Exchange восстановление удаленного письма

Для того чтобы востановить письма, нужно находиться в Группе управлением обнаружением (Discovery Management). Введем команду

Add-RoleGroupMember -Identity "Discovery Management" -Member User1

Перезапускам EMS
Восстанавливаем удаленные письма, в том числе и удаленные из папки «удаленные»

Search-Mailbox "исходный ящик" -TargetMailbox целевой ящик -TargetFolder RECOVER

Исходный ящик» это тот, из которого письма удалили, целевой — тот, в который они будут восстановлены. Соответственно, всё что будет восстановлено, появится в целевом ящике в папке RECOVER. Указывать один и тот же ящик в роли исходного и целевого нельзя.
Если надо восстанавливать на все письма, а письма только с определённой темой, то синтаксис может быть таким:

Search-Mailbox "Исходный ящик" -SearchQuery subject:"Тема письма" -TargetMailbox Целевой ящик -TargetFolder Соответствующая папка

Есть один момент, когда у вас Русский Exchange то при указании параметров на английском, выходит ошибка. Покажу на примере

[PS] C:\Windows\system32>Search-Mailbox ivanov -SearchQuery "from:sidorov@gmail.com" -TargetMailbox petrov -TargetFolder RECOVER
Ключевое слово property не поддерживается.
    + CategoryInfo          : InvalidArgument: (:) [], ParserException
    + FullyQualifiedErrorId : 73EC546F

Данную ошибку можно устранить заменить параметр на Русский перевод:

[PS] C:\Windows\system32>Search-Mailbox ivanov -SearchQuery "Откого:sidorov@gmail.com" -TargetMailbox petrov -TargetFolder RECOVER

Ссылка 1

NTP

По сути когда у вас домен, время должно распространятся от корневого контролера — вниз до обычных хостов.
Корневой PDC может синхронизировать свое время как со внешним источником, так и с самим собой, последнее задано конфигурацией по умолчанию и является абсурдом, о чем периодически намекают ошибки в системном журнале.
Синхронизация клиентов корневого PDC может осуществятся как с его внутренних часов, так и с внешнего источника. В первом случае сервер времени корневого PDC объявляет себя как «надежный» (reliable).

Конфигурация NTP-сервера на корневом PDC
Конфигурирование сервера времени (NTP-сервера) может осуществляться как с помощью утилиты командной строки w32tm, так и через реестр. Где возможно, я приведу оба варианта.
Открываем ветку реестра:

HKLM\System\CurrentControlSet\services\W32Time\Parameters

Здесь в первую очередь нас интересует параметр Type, который задает тип синхронизации. Он может принимать следующие значения:
NoSync— Служба времени не синхронизируется с другими источниками.
NTP— Служба времени выполняет синхронизацию с серверами, указанными в записи реестра NtpServer.
NT5DS— Служба времени выполняет синхронизацию на основе иерархии домена.
AllSync— Служба времени использует все доступные механизмы синхронизации.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters]
"Type"="NTP"
w32tm /config /syncfromflags:manual

В параметре NtpServer указываются NTP-сервера, с которыми будет синхронизировать время данный сервер. По умолчанию в этом параметре прописан NTP-сервер Microsoft (time.windows.com, 0?1), при необходимости можно добавить еще несколько NTP-серверов, введя их DNS имена или IP адреса через пробел. В конце каждого имени можно добавлять флаг (напр. ,0?1) который определяет режим для синхронизации с сервером времени.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters]
"NtpServer"="server1,0x8 server2,0x8"
w32tm /config /manualpeerlist:"server1,0x8 server2,0x8"

Допускаются следующие значения режима:
0?1 – SpecialInterval, использование временного интервала опроса;
0?2 – режим UseAsFallbackOnly;
0?4 – SymmetricActive, симметричный активный режим;
0?8 – Client, отправка запроса в клиентском режиме.

Объявление NTP-сервера в качестве надежного

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config]
"AnnounceFlags"=dword:0000000a
w32tm /config /reliable:yes

Включение NTP-сервера

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer]
"Enabled"=dword:00000001

Задание интервала синхронизации с внешним источником
Время в секундах между опросами источника синхронизации, по умолчанию 900с = 15мин. Работает только для источников, помеченных флагом 0?1.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient]
"SpecialPollInterval"=dword:00000384

Установка минимальной положительной и отрицательной коррекции
Максимальная положительная и отрицательная коррекция времени (разница между внутренними часами и источником синхронизации) в секундах, при превышении которой синхронизация не происходит. Рекомендую значение 0xFFFFFFFF, при котором коррекция сможет производиться всегда.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config]
"MaxPosPhaseCorrection"=dword:FFFFFFFF
"MaxNegPhaseCorrection"=dword:FFFFFFFF

После настройки необходимо обновить конфигурацию сервиса. Сделать это можно командой

w32tm /config /update.

Можно узнать, насколько системное время данного компьютера отличается от времени на контроллере домена или других компьютерах. Например:

w32tm /monitor /computers:time.nist.gov

можно заставить компьютер синхронизироваться с используемым им сервером времени.

w32tm /resync

показывает разницу во времени между текущим и удаленным компьютером. Команда w32tm /stripchart /computer:time.nist.gov /samples:5 /dataonly произведет 5 сравнений с указанным источником и выдаст результат в текстовом виде.

w32tm /stripchart

основная команда, используемая для настройки службы NTP. С ее помощью можно задать список используемых серверов времени, тип синхронизации и многое другое. Например, переопределить значения по умолчанию и настроить синхронизацию времени с внешним источником, можно командой w32tm /config /syncfromflags:manual /manualpeerlist:time.nist.gov /update

w32tm /config

показывает текущие настройки службы. Например команда w32tm /query /source покажет текущий источник времени, а w32tm /query /configuration выведет все параметры службы.

w32tm /query

net stop w32time — останавливает службу времени, если запущена.
w32tm /unregister — удаляет службу времени с компьютера.
w32tm /register – регистрирует службу времени на компьютере. При этом создается заново вся ветка параметров в реестре.
net start w32time — запускает службу.

Особенности виртуализированных контроллеров домена

Контроллеры домена, работающие в виртуализированной среде, требуют к себе особенного отношения.
Средства синхронизации времени виртуальной машины и хостовой ОС должны быть выключены. Во всех адекватных системах виртуализации (Microsoft, vmWare и т. д.) присутствуют компоненты интеграции гостевой ОС с хостовой, которые значительно повышают производительность и управляемость гостевой системой. Среди этих компонентов всегда есть средство синхронизации времени гостевой ОС с хостовой, которое очень полезно для рядовых машин, но противопоказано для контроллеров домена. Потому как в этом случае весьма вероятен цикл, при котором контроллер домена и хостовая ОС будут синхронизировать друг друга. Последствия печальны.
Для корневого PDC синхронизация с внешним источником должна быть настроена всегда. В виртуальной среде часы не настолько точны как в физической, потому как виртуальная машина работает с виртуальным процессором и прерываниями, для которых характерно как замедление, так и ускорение относительно «обычной» частоты. Если не настроить синхронизацию виртуализированного корневого PDC с внешним источником, время на всех компьютерах предприятия может убегать/отставать на пару часов в сутки. Не трудно представить неприятности, которые может принести такое поведение.

Источник1,Источник 2

Exchange, каждому своя адресная книга.

Бывает что в одном домене несколько организаций. И все пользуются едиными сервером Exchange, но с разными доменами получателей. И как сделать так, чтобы одина организация не видела почтовые адреса другой организации в своей адресной книге?.

Не буду вдаваться в подробности что есть что, можете прочесть об этом тут. Я лишь выложу свое решение.

И так есть сервер. На котором много доменов. И из адресной книги одной организации нам нужно исключить несколько доменов. Запускаем EMS и вводим такую простую команду:

Get-AddressList  -Identity BookOrg1 | Set-AddressList -RecipientFilter {((((-not(EmailAddresses -like '*excample1.com')) -and (-not(EmailAddresses -like '*excample2.com')) -and (-not(EmailAddresses -like '*excample3.com')))) -and (Alias -ne$null))}

В данном примере мы взяли существующую книгу адресов и добавили в нее правило, которое исключает из данной книги все адреса в которых присутствуют указанные три домена.
Еще пример. Предположим мы завели контакты (contact) в AD (не через Exchange). И теперь хотим их отобразить в отдельной адресной книге (группе). Для понимания предстоящего решения прочтем
https://technet.microsoft.com/ru-ru/library/cc164375(v=exchg.141).aspx,тут и тут.
Т.к. контакты «не родные» для Exchange они их отображать не будет. Потребуется написать фильтр отбора данных. Для этого определимся по какому критерию мы будем делать выборку данных. В своем случае я взял имя компании. В каждом контакте в разделе Company я заполнил одну и туже информацию «Называние компании». И попытался по этому атрибуту получить список.

New-AddressList -Name BookOrg2 -RecipientFilter {(Company -like 'Называние компании')}

Еще пример, укажем контейнер где должны браться данные

>New-AddressList -Name BookOrg2 -RecipientContainer "domain.local/Accounts/Users/Отдел"

Решение проблем с Outlook Address Book

Не забываем обновить данные в Exchange

Update-AddressList BookOrg2

pfSense блокирование социальных сетей и других сайтов

Требуется ограничить доступ сотрудников к опеределенным интернет ресурсам, социальных сетей и прочее. Для решения данной задачи будем использовать такую технологию как Layer 7, на сколько мне известно, данная технология считываем первые 2 килобайта в пакете, в котором ищет указаное вхождение. Если найдено, то выполняются указанные действия.
Заходим через SSH на pfSense. Переходим в деррикторию

cd /usr/local/share/protocols/

В данном каталоге находятся паттерны, через которые идет отлов пакетов. Но нас интересует социальные сети, для них паттера нет — решаем. Для начала создадим файл с раширением .pat в который буде записано правило.

ee antisocial.pat

Важно, нужно чтобы называние файла совпадало с названием протокола объявленного в создаваемом паттере.
Запишем в наш паттер следующие строки.

# Protocol name
antisocial
# Pattern
^.+(vk.com|vkontakte|odnoklassniki|odnoklasniki|facebook).*$

Сохраняем.
Переходим к web-интерфейсу pfsense. В раздел Firewall: Traffic Shaper: Layer7. В данном разделе создаем новое правило Create new l7 rules group. Если в предыдущих пунктах все было сделано правильно, то в списке протоколов появится новый пункт antisocial.
120520150804
Теперь требуется применить это ограничение к группе адресов. В разделе правил маршрутизации создаем правило. И в пункте Layer7 выбираем наше ограничение.
120520150814
Применяем новое правило. И проверяем.

Пользователи у нас хитрые. И пытаються использовать такую богомерзкую программу как TOR, но и на это у pfsense есть достойный ответ.
Для этого установим такой инструмент как pfBlocker. После установки, находим его в разделе Firewall.
Делаем настройки как на рисунке. В разделе Inbound Interface(s) выставляем WAN интерфейс, в разделе Outbound Interface(s) указываем LAN.
Под каждым интерфейсом выставляем параметр Block
22092015

Далее в разделе Lists, указываем URL откуда будем брать списки TOR серверов, я использую для этого эту http://list.iblocklist.com/?list=tor ссылку. Вставляем ее в указаное поле, выставляем обновлять список каждый час. Сохраняем.155022092015

Все, после этого у меня ТОР перестал работать.

Asterisk, отправка факса на email

Перерыл кучу интернета, дабы добраться до истины, но ни где не нашел достойного и подробного описания с объяснением до момента «взлетела». Попробую исправить это упущение.
И так, у нас есть Ubuntu 14.04.1, Asterisk 12. Требуется настроить его на принятие факсов. Не будем использовать решение от Digium, а будем использовать spandsp в ходящее в поставку Asterisk. Но т.к. мы собирали Asterisk сами, то данный модуль у нас отсутствует. Скачаем его и пересоберем Asterisk по новой.
Скачиваем пакет spandsp

wget http://soft-switch.org/downloads/spandsp/spandsp-0.0.6.tar.gz

Разархивируем его

tar -xzvf spandsp-0.0.6.tar.gz

Для работы нам понадобиться библиотека libtiff , установим ее. Сначала пропишем новый репозиторий и обновим

echo 'deb http://cz.archive.ubuntu.com/ubuntu saucy main universe' >> /etc/apt/sources.list.d/extra.list
apt-get update

Теперь установим библиотеку

apt-get install libtiff4 libtiff4-dev

Библиотека установлена, теперь перейдем не посредственно к установке spandsp. Переходим в каталог с spandsp и собираем его.

cd spandsp-0.0.6
./configure --prefix=/usr/local
make
make install

Далее нужно указать пути библиотек для системы, вносим некоторые изменения

/etc/ld.so.conf.d/spandsp.conf << EOF
/usr/local
/usr/local/lib
EOF

Собираем Asterisk с поддержкой spandsp модуля. Обратимся к статье Установка Asterisk. Для начала выполним очистку

make distclean

По новой проверим все

./configure

Перейдем не посредственно к меню добавления модулей

make menuselect

В разделе Resource Modules необходимо убедится что выбрано два модуля. res_fax и res_fax_spandsp
Сохраняем конфигурацию и пересобираем Asterisk по новой

make
make install

После запускаем новый Asterisk

service asterisk start

Заходим в консоль

asterisk -rvv

И проверяем подключены ли модули

fax show capabilities

В нормальном случае должно выглядеть так

Registered FAX Technology Modules:

Type : Spandsp
Description : Spandsp FAX Driver
Capabilities : SEND RECEIVE T.38 G.711 GATEWAY

1 registered modules

Проверим еще вот таким образом какие модули у нас загружены

module show like fax

В нормальном случае должно выглядеть так

Module                         Description                              Use Count  Status
res_fax.so                     Generic FAX Applications                 1          Running
res_fax_spandsp.so             Spandsp G.711 and T.38 FAX Technologies  0          Running
2 modules loaded

Если чуда не произошло то пытаемся перезапустить и загрузить данные модули

CLI> module reload res_fax.so
CLI> modeule load res_fax_spandsp.so

Если Asterisk выдал ошибку

Error loading module 'res_fax_psandsp.so' : libspandsp.so.2 cannot open shared object file: No such file or directory

То выходим из консоли Asterisk и вводим следующую команду

 ln /usr/local/lib/libspandsp.so.2.0.0  /lib/libspandsp.so.2

Модули подключили, а как же принять факс, и сохранить его в файл на сервере? Для этого отредактируем файл конфигурации диалплана в разделе [incoming_calls]

[incoming_calls]
exten => _X.,1,Verbose(1,Получен звонок с внешней линии 2)
exten => _X.,n,answer()
exten => _X.,n,ReceiveFAX(/home/user/fax/rr.tif,f)

Перезапустим диалплан.

sudo asterisk -rcvv
Asterisk*CLI> dialplan reload

Пробуем отправить факс. Проверяем наличие файла в указанной директории. Идем дальше. Теперь требуется отправить данный файл на email.
Для начала установим пакет говорящий сам за себя sendemail

sudo apt-get install sendemail

Попробуем тестово отправить наше сообщение из консоли по smtp протоколу через какой нибудь сервер. Для этого нужно чтобы уже на этом сервере у нас была заведена учетная запись и пароль. В моем случае я назвал учетку fax

sendemail -f sender@local.host -t dest@example.com -u test -m "test test" -s mail.example.com:25 -o tls=auto -xu fax -xp p@s$w0rd -a "/home/user/fax/rr.tif"

Письмо ушло и мы получили его на той стороне. Теперь попробуем заставить это делать Asterisk
Для этого снова отредактируем фаил конфигурации диалплана. Приведем его к такому виду

[general]

[globals]

[default]

[incoming_calls]
exten => _X.,1,Verbose(1,Получен звонок с внешней линии 2)
exten => _X.,n,Goto(fax-rx,receive,1)    ;переводим вызов на "процедуру" принятия факса

[outgoing_calls]
exten => _X.,1,Verbose(Совершается исходящий вызов)
exten => _X.,n,answer()
exten => _X.,n,Dial(SIP/Operator_SIP/${EXTEN})

[phones]
include => outgoing_calls

[fax-rx]
exten => receive,1,NoOP(------------------- FAX from ${CALLERID(number)} ------------------)
 same => n,Answer()     ;подымаем трубку
 same => n,Set(DT=${TIMESTAMP}-${CALLERIDNUM}-${UNIQUEID})      ;загоняем в переменную время номер звонящего и еще какую то херь
 same => n,Set(FAXOPT(headerinfo)=Received by ${CALLERID(number)} ${STRFTIME(${EPOCH},,%Y-%m-%d %H-%M)})
; same => n,Set(FAXOPT(localstationid)=Name)
; same => n,Set(FAXOPT(maxrate)=14400)
; same => n,Set(FAXOPT(minrate)=2400)
 same => n,NoOp(FAXOPT(ecm) : ${FAXOPT(ecm)})
 same => n,NoOp(FAXOPT(headerinfo) : ${FAXOPT(headerinfo)})
 same => n,NoOp(FAXOPT(localstationid) : ${FAXOPT(localstationid)})
 same => n,NoOp(FAXOPT(maxrate) : ${FAXOPT(maxrate)})
 same => n,NoOp(FAXOPT(minrate) : ${FAXOPT(minrate)})
 same => n,NoOp(**** RECEIVING FAX : ${DT} ****)
 same => n,ReceiveFAX(/home/user/fax/${FAXOPT(headerinfo)}.tif,f)
 same => n,System(sendemail -f sender@local.host -t dest@example.com -u test -m "test test" -s mail.example.com:25 -o tls=auto -xu fax -xp p@s$w0rd -a "/home/severin/fax/${FAXOPT(headerinfo)}.tif")
 same => n,HangUp()

Сохраняем. Перезапускаем диалплан.

sudo asterisk -rcvv
Asterisk*CLI> dialplan reload

Проверяем работспособность.

Ссылки на статьи которые я использовал:
Ссылка 1
Ссылка 2
Ссылка 3
Ссылка 4

Asterisk, совершаем первый вызов на городскую линию.

И так, Asterisk у нас работает на входящие звонки, но не работает на исходящие. Надо решать.
Для того чтобы совершать и принимать звонки (да, то что мы описывали в предыдущей статье в разделе [default] тоже работает, но после внесения изменений описанных здесь, потребность и возможность в использовании этого раздела для приема звонков отпадет) добавим конфигурацию для нашего оператора.
Т.к. у нас оператор связи работает по SIP протоколу, обратимся для редактирования к файлу sip.conf

 sudo nano /etc/asterisk/sip.conf

И внесем данные об операторе

[Operator_SIP]
type=peer               ;указываем что при получении INVITE(вызов) будем сравнивать не имя поставщика сервисов а его IP адрес
host=sipprovaider.ru    ;указываем от кого мы должны получать/отправлять INVITE
fromuser=8800000        ;имя пользователя для аутентификации
defaultuser= 8800000
secret=p@ssword$
context=incoming_calls  ;задаем контекст, на него же будем принимать звонки
dtmfmode=rfc2833        ;метод генерации тонального DTFM-кода
disallow=all            ;запрещаем все кодеки
allow=gsm               ;разрешаем кодек GSM
allow=ulaw              ;разрешаем кодек
insecure=invite         ;

Далее нам требуется отредактировать диалплан.

 sudo nano /etc/asterisk/extensions.conf

Отредактируем его до такого вида

[general]

[globals]

[default]

[incoming_calls]
exten => _X.,1,Verbose(Получен вызов с внешней линии)
exten => _X.,n,Dial(SIP/100)

Как видно в контекст

[incoming_calls]

который мы описали в sip.conf поступает звонок и мы его сразу переводим на номер 100.
Перезапустим в Asterisk конфигурационные файлы.

sudo asterisk -rcvv
AsteriskGARS*CLI> dialplan reload
AsteriskGARS*CLI> sip reload

И попробуем совершить звонок с городского номера на телефонный аппарат.
Теперь требуется совершить звонок с внутреннего номера на городской. Для этого снова отредактируем файл диалплана

 sudo nano /etc/asterisk/extensions.conf

Следующим образом. Создадим раздел [outgoing_calls].

[outgoing_calls]
exten => _X.,1,Verbose(Совершается исходящий вызов)
exten => _X.,n,Dial(SIP/Operator_SIP/${EXTEN})

${EXTEN} — переменная которая содержит набранный вами номер.
Еще один важный момент, т.к. у нас телефонный аппарат находится в контексте phones, а метод вызова находится в контексте outgoing_calls, то они между собой не связаны, для того чтобы связать между собой эти два контекста воспользуемся выражением include. Добавим в фаил extensions.conf вот такие строки

[phones]
include => outgoing_calls

Сохраняем пере запускаем конфиги и пробуем дозвониться на городские линии.

sudo asterisk -rcvv
AsteriskGARS*CLI> dialplan reload

Все должно работать.

Принимаем первый внешний звонок на внутренний номер.

И так, телефон подключен к Asterisk, а Asterisk подключен к оператору связи, теперь как бы дозвониться нам до абонента 100, с внешнего мира? Нужен Dialplan. В данном случае, мы на прямую пробросим наш городской номер на телефонный аппарат.Переименуем дефолтный файл диалплана extensions.conf

 sudo mv /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.backup

Создадим новый файл extensions.conf.

sudo nano /etc/asterisk/extensions.conf

Диалплан состоит из контекстов (это очень важно), кто знаком с программированием, то это сравнимо с процедурами. По умолчанию всегда имеются три контекста [general] [globals] и [default](не указывается явно).
Для решения наших целей нам нужен контекст default, добавим в него такие действия. Поступает звонок, АТС беред трубку, проигрывает звуковой файл, кладет трубку:

[general]

[globals]

[default]
exten => _X.,1,Verbose(1,Получен звонок с внешней линии)        ;передаем произвольный текст в детальный вывод
exten => _X.,n,Answer()                                         ;поднимаем трубку
exten => _X.,n,Playback(hello-world)                            ;проигрываем звуковой файл
exten => _X.,n,Hangup()                                         ;ложим трубку

Сохраняем, перезапустим диалплан и проверим.

sudo asterisk -rcvv
dialplan reload

_X. — это шаблон, он обозначает любой набор цифр. В место шаблона можно было бы указать внешний номер нашей организации, но будем более универсальны.

Проверили, послушали приветствие, убедились что звонки с внешних линий к нам проходят. Теперь усложним: будем сразу поступающие звонки перенаправлять на внутренний номер 100. Для этого воспользуемся приложением Dial. Данное приложение пытается соединить каналы. Правим наш диалпан, заменим строчку в которой идет проигрыш звукового сигнала, на Dial.

[general]

[globals]

[default]
exten => _X.,1,Verbose(1,Получен звонок с внешней линии)        ;передаем произвольный текст в детальный вывод
exten => _X.,n,Answer()                                         ;поднимаем трубку
exten => _X.,n,Dial(SIP/100)                                    ;переводим вызов на абонента 100
exten => _X.,n,Hangup()                                         ;ложим трубку

Сохраняем, перезапустим диалплан и проверим.

sudo asterisk -rcvv
dialplan reload

Если все правильно сделали, то должно заработать. Обращаю ваше внимание, что на исходящие звонки, с внутренних номеров на городские, наша АТС еще не настроена.

Подключение Asterisk к оператору связи

Сегодня будем пробовать подключаться к оператору связи через SIP протокол.
Так как это SIP протокол, то нам придется редактировать файл sip.conf

 sudo nano /etc/asterisk/sip.conf

Для подключения будем использовать выражение register, «данное выражение используется для регистрации вашего Asterisk на удаленном сервере».
У нас есть логин- телефон, пароль и адрес сервера для регистрации, попробуем зарегистрироваться. Делаем это в разделе [general]

[general]
register=88009999999:p@$$w0RD@sip01.serveroperator.ru

После занесения данных, сохраняем файл и пере запускаем конфигурацию sip протокола asterisk.

sudo asterisk -rcvv
sip show peers

Если не было ошибок проверяем регистрацию

Asterisk*CLI> sip show registry
Host                                    dnsmgr Username       Refresh State                Reg.Time
sip01.serveroperator.ru:5060            N      88009999999        105 Registered           Mon, 13 Apr 2015 08:23:35
1 SIP registrations.

Все ОК, мы зарегистрировались на другом сервере, в данном случае на сервере оператора.

Подключение телефонного аппарата к Asterisk

Описание находится в книге Asterisk будущее телефонии Глава 4. Конфигурация SIP-телефона.

Будем рассматривать на примере Yealink-T22.
Переименуем наш файл конфигурации sip.conf в sip.conf.backup

sudo mv /etc/asterisk/sip.conf /etc/asterisk/sip.conf.backup

Создадим новый файл конфигурации sip.conf

sudo nano /etc/asterisk/sip.conf

И в несем в него минимальные конфигурационные данные для работы с SIP телефоном:

[100]                   ;аккаунт регистрации, считай его ID и номер телефона
type=friend             ;указываем что устройство может принимать и совершать вызовы
host=dynamic            ;указываем что IP адрес у телефона динамический т.е. по DHCP
context=phones          ;"контекст" в котором данный номер работает.

Далее заходим на сам телефонный аппарат по его IP адресу. И в разделе Аккаунт выставляем адрес сервера телефонии, и аккаунт (номер) телефона в Asterisk:
090420151620
Жмем сохранить и переходим дальше к нашему серверу.
Т.к. sip.conf файл уже настроен его нужно применить. Для этого входим в консоль управления Asterisk

sudo asterisk -rcvv

И перезапускам файл sip.conf

sip reload

Если все прошло без ошибок, то можно проверить статус подключения.

Asterisk*CLI> sip show peers
Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status                                                                                                                               Description
100/100                   192.168.120.10                           D  Auto (No)  No             5062     Unmonitored                                                                                                                        
1 sip peers [Monitored: 0 online, 0 offline Unmonitored: 1 online, 0 offline]

В данном случае все ОК и телефон зарегистрировался.

Поговорим о безопасности.
Т.к. наш телефон могут взломать и воспользоваться международными и междугородными звонками за наш счет, обезопасим себя, установим сложные пароли на вэб вход телефона (сами разберитесь где это). И защитим немного сам сервере Asterisk. Открываем sip.conf

sudo nano /etc/asterisk/sip.conf

В разделе [general].Сменим порт на который хотим принимать SIP соединения.

bindport=6743

Запрещаем отправку детального ответа «на отказ в соединении»

alwaysauthreject=yes

В дискрипшене аппарата ограничиваем диапазон сетей с которых ожидать подключение.

deny=0.0.0.0/0.0.0.0
permit=192.168.120.0/24

Устанавливаем пароль для аутентификации

secret=p@$$W0rd

В итоге получаем такой конфиг:

[general]
bindport=4563           ;порт на который желаем принимать SIP соединение
alwaysauthreject=yes    ;не выдаем детального сообщения причины почему нет подключения.

[100]                   ;аккаунт регистрации, считай его ID и номер телефона
type=friend             ;указываем что устройство может принимать и совершать вызовы
host=dynamic            ;указываем что IP адрес у телефона динамический т.е. по DHCP
context=phones          ;"контекст" в котором данный номер работает.
secret=p@$$W0rd         ;пароль для аутентификации аппарата на сервере
deny=0.0.0.0/0.0.0.0    ;запрещаем подключение со всех IP адресов
permit=192.168.120.0/24 ;разрешаем подключение с определенного диапазона IP адресов

Это не полный перечень как обезопасить себя, статья на эту тему.

Установка Asterisk

Годная статья , автор молодец, по этому запостю ее к себе с маленькими обновлениями.

Установку Asterisk 12 будем проводить на ОС Ubuntu 14.04.01 server x86_64, установленную на Oracle VM VirtualBox.

Заходим в терминал Ubuntu и обновим системные пакеты.

sudo apt-get update
sudo apt-get upgrade

Перезагрузим систему

sudo reboot

Синхронизируем время, для этого установим сервер NTP

sudo apt-get install ntp

Установим зависимости, которые будут необходимы для корректной работы Asterisk

sudo apt-get install build-essential linux-headers-`uname -r` openssh-server mysql-server mysql-client libgnutls28 bison flex curl sox libncurses5-dev libssl-dev libmysqld-dev libmysqlclient-dev mpg123 libxml2-dev libnewt-dev sqlite3 libsqlite3-dev pkg-config automake libtool git g++ subversion uuid-dev vim-nox php5 php5-curl php5-cli php5-mysql php-pear php-db php5-gd

В процессе установки нужно будет ввести пароль для root пользователя MYSQL
080420151126
Перезагружаем систему

sudo reboot

Создадим папку, куда будем скачивать дистрибутивы Asterisk, DAHDI и LibPRI

sudo mkdir -p /usr/src/asterisk-12
cd /usr/src/asterisk-12

Скачиваем исходники Asterisk 12.8.1 (на момент написания инструкции последняя актуальная версия), DAHDI (пакет, ранее называвшийся zaptel, который осуществляет обработку аналоговых и цифровых интерфейсов), libPRI (библиотека, предназначенная для работы с потоковыми TDM-интерфейсами ISDN: PRI (Primary Rate Interface) и BRI (Basic Rate Interface))

sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-12.8.1.tar.gz
sudo wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-2.10.1+2.10.1.tar.gz
sudo wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.4.15.tar.gz

Распаковываем скаченные исходники

sudo tar xvfz dahdi-linux-complete-2.10.1+2.10.1.tar.gz
sudo tar xvfz libpri-1.4.15.tar.gz
sudo tar xvfz asterisk-12.8.1.tar.gz

Для начала компилируем DAHDI

cd /usr/src/asterisk-12/dahdi-linux-complete-2.10.1+2.10.1
sudo make all
sudo make install
sudo make config

Далее компилируем LibPRI

cd /usr/src/asterisk-12/libpri-1.4.15/
sudo make
sudo make install

Начнем установку Asterisk 12. Необходимые модули устанавливаем командой make menuselect.

cd /usr/src/asterisk-12/asterisk-12.8.1/
sudo ./configure

При установке может вылететь ошибка

configure: error: *** JSON support not found (this typically means the libjansson development package is missing)

Для этого делаем следующее

cd /usr/src/
sudo wget http://www.digip.org/jansson/releases/jansson-2.7.tar.gz
sudo tar xvfz jansson-2.7.tar.gz
cd jansson-2.7/
sudo ./configure --prefix=/usr/
sudo make clean
sudo make
sudo make install
sudo ldconfig

Далее запускаем еще раз установку Asterisk

cd /usr/src/asterisk-12/asterisk-12.8.1/
sudo ./configure
sudo make menuselect

080420151455
По большей части, все необходимые модули уже включены. Вы можете что-то добавить или удалить. При выборе модуля у него будет короткое описание, за что он отвечает.

В разделе Add-ons выбираем модули format_mp3(понадобиться чтобы делать голосовое меню не в gsm формате, а в mp3) и все опции относящиеся к MySQL. Они понадобятся в случае подключения FreePBX.
Не забудьте загрузите модуль meetme.
Во вкладке Core Sound Packages – выберите необходимые форматы звуковых пакетов.
080420151502
В Music On Hold File Packages включаем все модули.
В Extras Sound Packages включаем первые 4 модуля содержащие EN
После настройки нажмите F12 для сохранения данных и выхода в окно консоли.
Далее вводим команду:

sudo make

Во время выполнения функции make у меня вылезла ошибка.

**************************************************************
***                                                        ***
***   --->  READ THIS OR YOUR BUILD WILL FAIL  <---        ***
***                                                        ***
*** format_mp3 has been selected to be installed, but the  ***
*** mp3 decoder library has not yet been downloaded into   ***
*** the source tree.  To do so, please run the following   ***
*** command:                                               ***
***                                                        ***
***          $ contrib/scripts/get_mp3_source.sh           ***
***                                                        ***
**************************************************************

   [CC] app_mysql.c -> app_mysql.o
   [LD] app_mysql.o -> app_mysql.so
   [CC] cdr_mysql.c -> cdr_mysql.o
   [LD] cdr_mysql.o -> cdr_mysql.so
   [CC] format_mp3.c -> format_mp3.o
format_mp3.c:39:24: fatal error: mp3/mpg123.h: Нет такого файла или каталога
 #include "mp3/mpg123.h"
                        ^
compilation terminated.
make[1]: *** [format_mp3.o] Ошибка 1
make: *** [addons] Ошибка 2

Для её устранения, вводим требуемую команду.

sudo contrib/scripts/get_mp3_source.sh

Запускаем опять команду make

sudo make

Далее вводим команды

sudo make install
sudo make samples
sudo make config

Перезагружаем сервер

sudo reboot

Проверяем работоспособность Asterisk. Вводим команду

sudo rasterisk

Далее автор предлагает обезопасить систему путем ввода и передачи брозд правления новому пользователю. Я этого не делал, но все же приведу цитату.
Если необходимо обезопасить систему, можем задать пользователя для управления Asterisk. Создаем пользователя, его каталог и пароль. Далее даем ему права для работы с Asterisk.

sudo adduser asterisk
sudo mkdir /home/username
sudo passwd username
sudo chown -R asterisk. /var/run/asterisk
sudo chown -R asterisk. /etc/asterisk
sudo chown -R asterisk. /var/{lib,log,spool}/asterisk
sudo chown -R asterisk. /usr/lib/asterisk

Перезагружаем сервер

sudo reboot

Заходим под пользователем asterisk

su asterisk

Проверяем работоспособность Asterisk. Вводим команду

rasterisk

И попадаем в консоль управления Asterisk.
Сделаем некоторую настройку для MySQL. Заходим в MySQL.

mysql -uusername -ppassword -hlocalhost

Здесь сокращения:
-h host
-u user
-p password
Пробел после них отсутствует
Или mysql –u username -p
После ввода пароля мы окажемся в консоле mysql. Создадим пользователя asterisk с localhost и паролем ‘password’.

create user 'asterisk'@'localhost' identified by 'password';

Пользователь создан. Для проверки посмотрим список пользователей:

select user,host,password from mysql.user;

Создадим базу данных asteriskcdrdb, asterisk.

create database asterisk;
create database asteriskcdrdb;

Далее определяем владельца базы данных

GRANT ALL PRIVILEGES ON asterisk.* TO asterisk@localhost IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asterisk@localhost IDENTIFIED BY 'password';
flush privileges;