Архив метки: Asterisk

Отправка и приём SMS на оборудовании VoIP шлюзов OpenVox

Наиболее популярный вопрос в GSM VoIP шлюзах обычно касается SMS сообщений.

Рассылка SMS осуществляется по средствам Web-Интерфейса, http, api (на всех моделях шлюзов OpenVox). Так же удобно реализована пересылка и совмесная работа EMail и SMS.



WEB

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

Port – Выбор канала, с которого будет производиться рассылка SMS. В случае, когда получателей несколько, каналы оперируют их номерами по очереди в порядке списка.



Flash SMS – Вкл/Выкл функцию Flash SMS. Flash-SMS это SMS-сообщение, сразу отображаемое при получении на экране телефона, в разных моделях телефонов по-разному.



Load numbers from text file - Загрузить список номеров из текстового файла.



Destination Number – Поле для ввода номера, на который будет производиться рассылка.



В случае, если получаетелей много, их номера можно разделить пробелом, запятой, точкой с запятой, символом возврата каретки r и разделителем строки n.



Message – Поле для ввода самого сообщения.



Action – Кнопки действия. Send – начать отправку, Stop – остановить отправку.




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

Email

SMS to Email так же можно отнести к стандартной возможности подобных устройств.

Указываем необходимые данные для подключения к SMTP, email адреса, на которые пересылать входящие SMS, и настраиваем шаблон отправляемых писем. При этом в шаблоне доступно 4-е переменные:

  • номер отправителя
  • номер порта SIM карты
  • время приема
  • текст входящего сообщения.

Чаще всего производители предусматривают и обратную возможность – Email to SMS: мы отправляем email на какой-то адрес, который периодически проверяет шлюз и из входящих писем формирует SMS-ки, но в OpenVox решили подобную возможность не реализовывать.

HTTP

Отправки и прием SMS сообщений посредством HTTP запросов – один из самых простых способов интегрировать эти действия в работу сторонних приложений.

Для отправки СМС необходимо выполнить запрос вида:

http://disnetern.ru/sendsms?username=smsuser&password=password&phonenumber=80991234567&message=disnetern.ru

{

    "message":"disnetern.ru",

    "report":[{

        "1":[{

             "port":"umts-1.1",

             "phonenumber":"80991234567",

             "time":"2020-05-05 16:59:53",

             "result":"success"

         }]

     }]

}

Коротко о параметрах:

URL – Формат используемой ссылки.

username – имя пользователя, которое мы указали в настройках

password – пароль из настроек

phonenumber – номер получателя, можно указывать сразу несколько через «,»

message – текст отправляемого сообщения

port – через какой порт осуществлять отправку, можно указывать несколько, например gsm-1.1

report – отчет можно получить в виде JSON или String

timeout – время ожидания отчета

Помимо отправки, шлюзы OpenVox позволяют реализовать прием SMS сообщений поверх HTTP.

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

 



2020-05-05T17:29:32
Asterisk

VOIP кодеки – описание

 

VoIP — кодеки, понимаются различные математические модели используемые для цифрового кодирования и компрессирования (сжатия) аудио информации. Многие из современных кодеков используют особенности восприятия человеческим мозгом неполной информации: алгоритмы голосового сжатия пользуются этими особенностями, вследствие чего не полностью услышанная информация полностью интерпретируется головным мозгом. Основным смыслом таких кодеков является сохранение баланса между эффективностью передачи данных и их качеством.

G.711

Кодек G.711 это самый базовый кодек ТфОП (PSTN). В рамках данного кодека используется импульсно-кодовая модуляция PCM. Всего в мире используется 2 метода компандирования (усиления сигнала) G.711: µ – закон в Северной Америке и A – закон в остальной части мира. Данный кодек передает 8 – битное слово 8 000 раз в секунду. Если умножить 8 на 8 000, то получим 64 000 бит – то есть 64 Кб/с, скорость потока, создаваемого G.711.

Многие люди скажут, что G.711 это кодек, в котором отсутствует компрессирование (сжатие), но это не совсем так: сам по себе процесс компандирования является одной из форм компрессирования. Все мировые кодеки «выросли» на базе G.711.

Важная особенность G.711 в том, что он минимально загружает процессор машины, на которой он запущен.

G.726

Этот кодек использовался некоторое время, став заменой для G.721, который на тот момент устарел, и является одним из первых кодеков с алгоритмом компрессии. Он так же известен как кодек с адаптивной импульсно-кодовой модуляции (Adaptive Differential Pulse-Code Modulation, ADPCM) и может использовать несколько скоростей потока передачи. Наиболее распространенные скорости передачи это 16, 24 и 32 Кб/сек.

Кодек G.726 почти идентичен G.711 – единственным отличием является то, что он использует половину полосы пропускания. Это достигается путем того, что вместо отправки полного результата квантования, он отправляет только разницу между двумя последними измерениями. В 1990 году от кодека практически отказались, так как он не мог работать с факсимильными сигналами и модемами. Но в наше время, из – за своей экономии полосы пропускания и ресурсов центрального процессора у него есть все шансы вновь стать популярные кодеком в современных сетях.

G.729A

Учитывая то, какую малую полосу пропускания использует G.729A, всего 8 Кб/сек., он обеспечивает превосходное качество связи. Это достигается за счет использования сопряженной структуры с управляемым алгебраическим кодом и линейным предсказанием (Conjugate-Structure Algebraic-Code-Excited Linear Prediction, CS-ACELP). По причине патента, использование данного кодека является коммерческим; однако это не мешает кодеку G.729A быть популярным в различных корпоративных сетях и телефонных системах.

Для достижения такой высокой степени сжатия, G.729A активно задействует мощности процессора (CPU).

GSM

Кодек для глобального стандарта цифровой мобильной сотовой связи (Global System for Mobile Communications, GSM) не обременен лицензированием, как его аналог G.729A, но предлагает высокое качество и умеренную нагрузку на процессор при использовании 13 Кб/сек. полосы пропускания. Эксперты считают, что качество GSM несколько ниже чем G.729A.

iLBC

Кодек iLBC (Internet Low Bitrate Codec) сочетает в себе низкое использование полосы пропускания и высокого качества. Данный кодек идеально подходит для поддержания высокого качества связи в сетях с потерями пакетов.

iLBC не так популярен как кодеки стандартов ITU и поэтому, может быть не совместим с популярными IP – телефонами и IP – АТС. Инженерный совет Интернета (IETF) выпустил RFC 3951 и 3952 в поддержку кодека iLBC.

Internet Low Bitrate кодек использует сложные алгоритмы для достижения высокого показателя сжатия, поэтому, весьма ощутимо загружает процессор.

В настоящий момент iLBC используется бесплатно, но владелец этого кодека, Global IP Sound (GIPS), обязует уведомлять пользователей о намерении коммерческого использования этого кодека. Кодек iLBC работает на скорости в 13.3 Кб/сек. с фреймами в 30 мс, и на скорости 15.2 кб/сек. с фреймами в 20 мс.

Speex

Кодек Speex относится к семейству кодеков переменной скорости (variable-bitrate, VBR), что означает возможность кодека динамически менять скорость передачи битов в зависимости от статуса производительности сети передачи. Этот кодек предлагается в широкополосных и узкополосных модификациях, в зависимости от требования к качеству.

Speex полностью бесплатный и распространяется под программной лицензией университета Беркли (Berkeley Software Distribution license, BSD). Кодек работает на диапазонах от 2.15 до 22.4 Кб/сек. в рамках переменного битрейта.

G.722

G.722 является стандартом ITU-T (International Telecommunication Union – Telecommunication sector) и впервые опубликован в 1988 году. Кодек G.722 позволяет обеспечить качество, не ниже G.711 что делает его привлекательным для современных VoIP разработчиков. В настоящий момент патент на G.722 не действителен, и этот кодек является полностью бесплатным.



2020-02-10T12:57:04
Asterisk

Настройка fail2ban для защиты asterisk

Зачем fail2ban нужен для  asterisk?

Как Вам известно, asterisk является приложением (сервером) для IP-телефонии. То есть позволяет подключившимся к нему клиентам звонить друг другу и во внешний мир, используя (помимо всего прочего) линии телефонной связи. При этом возникают следующие риски:

  1. клиенты идентифицируются по логину/паролю, а также (как правило) по IP адресу. При этом существует возможность подобрать пароль (раньше или позже, в зависимости от его сложности, но в любом случае это возможно), причем крайне часто ограничения по IP адресам далеко не такие жесткие, как хотелось бы (в идеале для каждого клиента должен быть свой уникальный IP адрес)
  2. входящие звонки из интернета (например, с других серверов asterisk). С этими подключениями все сложнее, поскольку asterisk (в базовой конфигурации) не предусматривает отображение IP адресов, с которых производится подключение.

Программа fail2ban в связке с брандмауэром (например, iptables) и правильно настроенным asterisk (отображающим в логах полную информацию, в том числе IP адреса клиентов и других серверов) позволяет эффективно заблокировать попытки подключения и подбора пароля.

Перед началом настройки Вам необходимо установить iptables и fail2ban. Кроме того, iptables должен быть уже настроен (и разрешать подключения к asterisk) до начала настройки fail2ban! Прочитать, как настроить iptables можно здесь: настройка iptables для работы asterisk. Вы также можете установить fail2ban до установки самого asterisk, и в этом случае (по крайней мере, теоретически) в процессе установки последние версии asterisk обнаруживают установленный fail2ban и настраивают его автоматически. Однако:

  1. Не всегда вопрос безопасности IP-телефонии рассматривается до установки asterisk. То есть скорее всего, Вы захотите установить fail2ban на систему с уже установленным (и настроенным) астериском.
  2. Не во всех случаях автоматическое конфигурирование срабатывает вообще, не говоря уже о том, чтобы оно сработало правильно (и начало блокировать все атаки на asterisk).

Настройка ведения логов asterisk

В первую очередь имеет смысл настроить ведение логов asterisk, чтобы информация сразу же начала собираться в нужном нам формате и виде. Для этого в каталоге конфигурации asterisk (по умолчанию это /etc/asterisk) найдите файл logger.conf и внесите в него следующие изменения: раскомментируйте (уберите точку с запятой в начале строки):

dateformat=%F %T ; ISO 8601 date format

Это нужно для того, чтобы asterisk писал в логи дату в правильном формате:

год-месяц-день часы:минуты:секунды

Начиная с 10-й версии asterisk, Вы можете включить Asterisk Security Framework. Для этого в файле logger.conf найдите и раскомментируйте (или добавьте) строку:

security => security

В этой строке с левой стороны от стрелки указано имя файла, в котором будут сохраняться события, а с правой стороны – уровни (типы событий), которые будут сохраняться. В данном примере события, относящиеся к уровню security (и только они), будут сохраняться в файл с именем security в папке логов asterisk.

Разумеется, после внесения изменений необходимо, чтобы asterisk перечитал конфигурацию. Для этого можно либо перезагрузить сервис астериска, либо только конфигурацию логов (logger reload из asterisk CLI).

После этого в папке логов asterisk (по умолчанию /var/log/asterisk) появится файл с именем security. Не забудьте настроить ротацию логов для этого файла (так же, как и для остальных логов asterisk)!

Настройка правил фильтрации

Теперь нам необходимо создать фильтр, который будет извлекать из общего потока сообщений астериска потенциально опасные события (неверный логин/пароль, попытка входа с неразрешенного IP адреса, и т.д. и т.п.). При этом нам необходимо не только обнаруживать такие потенциально опасные события, но и вычленять оттуда IP адрес, с которого было выполнено действие. То есть мы не просто ищем определенные строки в файлах событий астериска, а настраиваем правила фильтрации.

Правила фильтрации можно прописать в файле /etc/fail2ban/filter.d/asterisk.conf. Вот образец содержимого этого файла:

# Fail2Ban configuration file

#

#

# $Revision: 250 $

#



[INCLUDES]



# Read common prefixes. If any customizations available -- read them from

# common.local

#before = common.conf





[Definition]



#_daemon = asterisk



# Option:  failregex

# Notes.:  regex to match the password failures messages in the logfile. The

#          host must be matched by a group named "host". The tag "" can

#          be used for standard IP/hostname matching and is only an alias for

#          (?:::f{4,6}:)?(?PS+)

# Values:  TEXT

#



# Asterisk 1.8 uses Host:Port format which is reflected here



failregex = NOTICE.* .*: Registration from '.*' failed for ':.*' - Wrong password

            NOTICE.* .*: Registration from '.*' failed for ':.*' - No matching peer found

            NOTICE.* .*: Registration from '.*' failed for ':.*' - Username/auth name mismatch

            NOTICE.* .*: Registration from '.*' failed for ':.*' - Device does not match ACL

            NOTICE.* .*: Registration from '.*' failed for ':.*' - Not a local domain

            NOTICE.* .*: Registration from '.*' failed for ':.*' - Peer is not supposed to register

            NOTICE.* .*: Registration from '.*' failed for ':.*' - ACL error (permit/deny)

            NOTICE.* .*: Registration from '.*' failed for '' - Wrong password

            NOTICE.* .*: Registration from '.*' failed for '' - No matching peer found

            NOTICE.* .*: Registration from '.*' failed for '' - Username/auth name mismatch

            NOTICE.* .*: Registration from '.*' failed for '' - Device does not match ACL

            NOTICE.* .*: Registration from '.*' failed for '' - Not a local domain

            NOTICE.* .*: Registration from '.*' failed for '' - Peer is not supposed to register

            NOTICE.* .*: Registration from '.*' failed for '' - ACL error (permit/deny)

            NOTICE.* .*: Registration from '".*".*' failed for ':.*' - No matching peer found

            NOTICE.* .*: Registration from '".*".*' failed for ':.*' - Wrong password

            NOTICE.* .*: No registration for peer '.*' (from )

            NOTICE.* .*: Host  failed MD5 authentication for '.*' (.*)

            NOTICE.* .*: Failed to authenticate user .*@.*

            NOTICE.*  failed to authenticate as '.*'$

            NOTICE.* .*: Sending fake auth rejection for device .*<sip:.*@>;tag=.*

            NOTICE.* .*:  tried  to authenticate with nonexistent user '.*'

            VERBOSE.*SIP/-.*Received incoming SIP connection from unknown peer



# Option:  ignoreregex

# Notes.:  regex to ignore. If this regex matches, the line is ignored.

# Values:  TEXT

#

ignoreregex =


 

В asterisk версии 1.4 и более ранних используются строки типа “… failed for ‘<HOST>’ …”, а в asterisk 1.8 и выше – строки “… failed for ‘<HOST>:.*’ …”, поскольку начиная с версии asterisk 1.8 в логах появилась информация о номере порта, которой нет в asterisk 1.4. Приведенный выше вариант учитывает как старые, так и новые версии asterisk, так что Вам нет необходимости в нем что-либо менять.

Для asterisk версии 10 и выше, если Вы включили ведение логов security, не забудьте прописать правила фильтрации для этих логов!

Правила фильтрации можно прописать в файле /etc/fail2ban/filter.d/asterisk-security.conf. Вот образец содержимого этого файла:

# Fail2Ban configuration file

#

#

# $Revision: 250 $

#



[INCLUDES]



# Read common prefixes. If any customizations available -- read them from

# common.local

#before = common.conf





[Definition]



#_daemon = asterisk



# Option:  failregex

# Notes.:  regex to match the password failures messages in the logfile. The

#          host must be matched by a group named "host". The tag "" can

#          be used for standard IP/hostname matching and is only an alias for

#          (?:::f{4,6}:)?(?PS+)

# Values:  TEXT

#



failregex = SECURITY.* SecurityEvent="FailedACL".*RemoteAddress=".+?/.+?//.+?".*

            SECURITY.* SecurityEvent="InvalidAccountID".*RemoteAddress=".+?/.+?//.+?".*

            SECURITY.* SecurityEvent="ChallengeResponseFailed".*RemoteAddress=".+?/.+?//.+?".*

            SECURITY.* SecurityEvent="InvalidPassword".*RemoteAddress=".+?/.+?//.+?".*



# Option:  ignoreregex

# Notes.:  regex to ignore. If this regex matches, the line is ignored.

# Values:  TEXT

#

ignoreregex =


Настройка изоляторов (jails) для fail2ban

Теперь нам необходимо создать описания так называемых “изоляторов” (jails) для fail2ban, т.е. “привязать” наши фильтры к fail2ban: объяснить, в каких файлах эти строки искать, и что потом делать.

Для этого откройте файл /etc/fail2ban/jail.conf

  1. Убедитесь, что нет (или не включено) других правил, связанных с asterisk! Для этого достаточно сделать поиск по файлу по имени “asterisk” (без кавычек) и убедиться, что если такие правила есть, для каждого из них свойство enabled установлено в false:

    enabled = false
  2. В случае, если версия asterisk меньше 10-й, либо Вы не хотите использовать логи security (использование логов security крайне рекомендуется), то Вам достаточно будет создать только одно правило. В противном случае Вам понадобится создать 2 правила.

Правило № 1

Это правило необходимо создать для всех версий asterisk. Вы можете создать новое правило, или модифицировать любое из уже имеющихся, но отключенных. Новое правило (поскольку в нашем примере используется fail2ban в связке с iptables) будет называться asterisk-iptables и будет применяться к файлу, в котором сохраняются все основные виды событий астериска (notice, warning, error, …). По умолчанию в астериске этот основной файл логов называется messages, но (например) в FreePBX это будет файл под названием full (как называется файл у Вас – см. настройки астериска в файле logger.conf). Итак, само правило:

# настраиваем изоляторы fail2ban для основных событий asterisk:

[asterisk-iptables]

# правило включено:

enabled  = true

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

# (название фильтра - это имя файла в каталоге /etc/fail2ban/filter.d):

filter   = asterisk

# к какому файлу (логам астериска) применять фильтр для поиска потенциально опасных событий:

logpath  = /var/log/asterisk/messages

# количество потенциально опасных событий, найденных фильтром, для срабатывания действия:

maxretry = 3

# на какой период времени (в секундах) применять действие action:

bantime = 86400

# за какой период времени (в секундах) искать в logpath потенциально опасные события:

findtime = 3600

# что делать, если фильтр обнаружил атаку (за период findtime секунд в логах logpath обнаружено

# maxretry потенциально опасных действий с одного IP адреса) - блокируем все порты 

# для этого IP и посылаем письмо для root:

action   = iptables-allports[name=ASTERISK, protocol=all]

           sendmail-whois[name=ASTERISK, dest=root, sender=fail2ban@asterisk]

# список IP адресов/подсетей, для которых все потенциально опасные события игнорируются:

ignoreip = 127.0.0.1/8


Правило № 2

Это правило будет работать только в случае, если версия asterisk – 10 или новее, а также если включено ведение логов security (см. выше). Вы также можете создать новое правило, или модифицировать любое из уже имеющихся, но отключенных. Новое правило (поскольку в нашем примере используется fail2ban в связке с iptables) будет называться asterisk-security-iptables и это правило будет использовать для анализа файл security в каталоге логов астериска:



# настраиваем изоляторы fail2ban для событий безопасности asterisk:

[asterisk-security-iptables]

# правило включено:

enabled  = true

# фильтр, которым будет пользоваться правило, называется asterisk-security 

# (название фильтра - это имя файла в каталоге /etc/fail2ban/filter.d):

filter   = asterisk-security

# к какому файлу (логам астериска) применять фильтр для поиска потенциально опасных событий:

logpath  = /var/log/asterisk/security

# количество потенциально опасных событий, найденных фильтром, для срабатывания действия:

maxretry = 3

# на какой период времени (в секундах) применять действие action:

bantime = 86400

# за какой период времени (в секундах) искать в logpath потенциально опасные события:

findtime = 3600

# что делать, если фильтр обнаружил атаку (за период findtime секунд в логах logpath обнаружено

# maxretry потенциально опасных действий с одного IP адреса) - блокируем все порты 

# для этого IP и посылаем письмо для root:

action   = iptables-allports[name=ASTERISK-security, protocol=all]

           sendmail-whois[name=ASTERISK-security, dest=root, sender=fail2ban@asterisk]

# список IP адресов/подсетей, для которых все потенциально опасные события игнорируются:

ignoreip = 127.0.0.1/8


Запуск fail2ban

Теперь необходимо запустить (или перезапустить) fail2ban и (если это необходимо, например iptables еще не был запущен) iptables.

Для запуска iptables (его нужно запустить первым) выполните следующую команду:

/etc/init.d/iptables start

Для перезапуска fail2ban выполните следующую команду:

/etc/init.d/fail2ban restart

Для проверки, что fail2ban запущен успешно и правило загружено, выполните следующую команду:

fail2ban-client status asterisk-iptables

и (если есть второе правило)

fail2ban-client status asterisk-security-iptables

Для отображения списка правил iptables выполните следующую команду:

iptables -L -n

В случае, если Вы только что установили fail2ban / iptables, не забудьте убедиться, что они настроены у Вас стартовать автоматически при загрузке системы!

 

Проверка работы fail2ban

Главное в процессе проверки fail2ban – иметь под рукой другой компьютер (или локальный доступ к серверу asterisk), чтобы в случае, когда fail2ban заблокирует Ваш IP адрес, Вы смогли подключиться и удалить эту блокировку!

Необходимо обязательно проверить работу связки fail2ban + iptables, поскольку, даже если Вы все настроили (или скопировали) правильно, возможно множество комбинаций событий, в результате которых настренные Вами блокировки работать не будут.

Последовательность действий для проверки работы связки fail2ban + iptables:

  1. Убедитесь, что у Вас настроен запуск iptables и fail2ban при старте компьютера
  2. Если Вы настроили 2 правила для fail2ban, настоятельно рекомендуем проверить работу каждого из них по отдельности. Для этого отключите одно из правил (enabled = false), например asterisk-security-iptables
  3. перезагрузите компьютер и проверьте, что:

    1. службы iptables и fail2ban запущены:

      service fail2ban status

      service iptables status
    2. одно из правил включено, а другое – выключено:

      fail2ban-client status asterisk-iptables

      fail2ban-client status asterisk-security-iptables

      При этом для выключенного правила появится сообщение:

      Sorry but the jail 'asterisk-security-iptables' does not exist ,

      а для включенного – сообщение вида:

      Status for the jail: asterisk-iptables

      |- filter

      | |- File list: /var/log/asterisk/messages

      | |- Currently failed: 0

      | `- Total failed: 0

      `- action

      |- Currently banned: 0

      `- Total banned: 0

  4. Запустите SIP-клиент (обязательно не с самого сервера asterisk, а с другого компьютера!), и указав неверные данные для авторизации (IP адрес для подключения должен быть IP адресом сервера asterisk!), попробуйте авторизоваться 3 раза или более (количество авторизаций, после которых IP адрес блокируется, задается в параметре maxretry для каждого правила отдельно). В качестве тестового sip клиента можно использовать программу sipsak, которая работает из командной строки.
  5. Если Вы запустили SIP клиента с того же компьютера, с которого подключались к серверу asterisk, и если fail2ban + iptables были настроены правильно, то на данный момент Ваш IP адрес заблокирован, и Вы не можете подключиться к серверу asterisk с этого компьютера (проверьте это!). Подключитесь к asterisk с другого компьютера (или локально) и продолжайте выполнение команд.
  6. Запустите команду вида:

    fail2ban-client status asterisk-iptables

    для включенного правила, и убедитесь, что IP адрес, с которого подключался SIP клиент, находится в списке заблокированных IP (banned).
  7. Теперь по аналогии с действиями из пункта 2 разблокируйте второе правило (например asterisk-security-iptables) и заблокируйте первое (asterisk-iptables).
  8. Выполните действия с пункта 3 по пункт 6, только вместо перезагрузки компьютера (что тоже можно сделать) достаточно перезагрузить службу fail2ban. После этого сразу разблокируется IP адрес компьютера, на котором Вы запускали SIP клиент, и его можно будет (и нужно, как в пункте 4) запустить еще раз – для проверки работы второго правила. Обратите внимание, что может и не разблокировать (точнее, разблокировать и снова заблокировать) – в этом случае Вам лучше сделать паузу findtime секунд, после чего еще раз перезагрузить сервис fail2ban.
  9. После того, как Вы проверили работу обоих правил по отдельности, не забудьте обязательно включить их оба (для asterisk-iptables и для asterisk-security-iptables параметр enabled = true). После этого, разумеется, не забудьте перезагрузить сервис fail2ban.
  10. И последний пункт: если Вы выполнили предыдущие пункты достаточно быстро (в течение нескольких минут), то может оказаться, что после включения обоих правил (и последующей перезагрузки fail2ban) у Вас снова заблокируется IP адрес, с которого Вы запускали SIP клиента.

    Будьте внимательны!

 

Управление правилами fail2ban

Временное отключение блокировки IP адреса

Для этого Вам необходимо воспользоваться услугой iptables. Сначала мы выведем список правил на консоль, а затем выбрав нужные IP, удалим их из бана.

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

iptables -L -n

Вы увидите сообщение следующего вида:

Chain INPUT (policy ACCEPT)

target prot opt source destination

...

fail2ban-ASTERISK all -- 0.0.0.0/0 0.0.0.0/0

...

Chain fail2ban-ASTERISK

target prot opt source destination

DROP all -- 1.2.3.4 0.0.0.0/0

RETURN all -- 0.0.0.0/0 0.0.0.0/0

RETURN all -- 0.0.0.0/0 0.0.0.0/0

...

Нас интересует удалить из бана IP адрес 1.2.3.4, который (как мы видим) находится в цепочке правил (chain) под названием fail2ban-ASTERISK. Набираем команду:

iptables -D fail2ban-ASTERISK -s 1.2.3.4 -j DROP

В случае успешного выполнения команды никаких сообщений не появится, и если мы теперь снова запустим команду

iptables -L -n

то увидим, что IP адрес исчез из блокировки iptables (хотя и остался в блокировке fail2ban!). При этом мы снова можем подключаться к серверу asterisk

 

Постоянное отключение блокировки IP адреса

Для того, чтобы fail2ban не блокировал определенный IP адрес (или несколько IP адресов) независимо от того, сколько неудачных попыток подбора пароля (и прочих “неправомерных” действий) они совершили, необходимо произвести дополнительную настройку jails в файле /etc/fail2ban/jail.conf

В каждом правиле файла jail.conf может присутствовать параметр ignoreip, который задает список IP адресов, попадающих в “белый список” для этого правила. Поскольку правил у нас может быть два, обратите внимание, что Ваш IP необходимо прописывать в обоих правилах!

Параметр имеет следующий вид:

ignoreip = 127.0.0.1/8 192.168.0.0/16 1.2.3.4

То есть Вы можете прописывать как подсети, так и отдельные IP адреса (в данном случае в “белый список” попадают IP 127.0.0.1-127.0.0.255, 192.168.0.1-192.168.255.255 и 1.2.3.4).

Разблокировка IP адреса, с которого производилось тестирование

Во время проверки правильности настройки fail2ban Вы неоднократно запускали SIP клиента для тестирования работы по блокировке будущих атак из интернета. И в процессе последующей работы Вам, возможно, также понадобится время от времени производить действия, последствиями которых может быть блокировка со стороны fail2ban / iptables. Хотелось бы не дожидаться, когда fail2ban “соизволит” разблокировать IP сам (а это может быть довольно долго – поскольку параметр bantime можно выставить хоть на час, хоть на день, хоть на год).

Существуют 2 пути решения подобной проблемы:

  1. Внести IP адрес в правилах fail2ban в список ignoreip. Но иногда это может быть нежелательно (чтобы, например, производить периодическое тестирование работы fail2ban)
  2. Обычно время findtime (это длительность интервала в секундах, за которое событие [атака, подбор пароля] должно повториться maxretry раз, после чего бан вступит в силу) намного меньше, чем bantime (это время бана в секундах, по истечении которого IP адрес удаляется из списка заблокированных). Например, findtime выставляется в 10 минут, а bantime – час. Либо findtime – час, а bantime – день или даже больше. И так далее. Поэтому имеет смысл сделать паузу длительностью не менее, чем findtime с момента последнего тестирования (и забанивания Вашего IP адреса), после чего перезагрузить сервис fail2ban. При перезагрузке сервиса fail2ban все блокировки аннулируются. Однако при последующей загрузке fail2ban логи анализируются снова, и если в логах в течение findtime было maxretry неудачных попыток подключения с одного IP, этот IP будет снова забанен сразу после запуска fail2ban.

Тестирование конфигурации fail2ban

Вы можете проверить, как будет применяться фильтр fail2ban к тому или иному логу. Для этого можно запустить команду:

fail2ban-regex /var/log/asterisk/messages /etc/fail2ban/filter.d/asterisk.conf

Где /var/log/asterisk/messages – это пример пути к файлу с логами, который будет фильтроваться, а /etc/fail2ban/filter.d/asterisk.conf – сам фильтр, который содержит те фрагменты [сообщения об ошибках], которые должны быть в логе [чтобы забанить IP адреса атакующих].

 

И напоследок: вместо перезагрузки fail2ban с помощью service fail2ban restart можно выполнить следующую команду fail2ban-client reload



2018-11-01T10:11:28
Asterisk

Настройка iptables для работы asterisk

iptables для asterisk. Общие сведения

Iptables – это брандмауэр, который защищает компьютер от несанкционированных подключений (как от входящих подключений извне, так и несанкционированных подключений вовне с самого компьютера). Для астериска iptables дает возможность отключить подсети, из которых не должно быть подключений к asterisk, а также в связке с fail2ban iptables может закрыть сервер от подбора паролей к серверу (в частности, отключать тех, кто пытается подобрать пароли клиентов asterisk).

Для того, чтобы успешно работать в связке с fail2ban, iptables предварительно должен быть правильно настроен. Asterisk использует разные протоколы для разных целей (например, SIP для авторизации пользователей и инициирования сеансов связи, RTP для передачи голоса, IAX для связи с другими серверами, и т.д.). Для каждого из протоколов должно быть предусмотрено отдельное правило (или несколько правил) в настройках iptables.

С чего начать: просмотр настроенных правил iptables

Для просмотра имеющихся (уже настроенных) правил запустите команду:

iptables -L -n

Если у Вас не высвечивается никаких правил, то рекомендуется предварительно настроить политику iptables (например, правила для ssh доступа, web-сервера если он есть, и т.д.), после чего уже настраивать правила iptbales для asterisk.

Настройка из командной строки

Для работы по SIP протоколу (порт UDP 5060) выполните команду:

iptables -A INPUT -p udp -m udp --dport 5060 -j ACCEPT

если у Вас asterisk работает на другом порту или Вы используете протокол TCP вместо UDP, исправьте команду соответствующим образом.

Для работы по RTP протоколу (голосовой поток, по умолчанию порты UDP с 10000 по 20000) выполните команду:

iptables -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT

В случае, если Вы ограничили в настройках asterisk диапазон портов (или полностью его сменили) не забудьте отразить это в правиле iptables!

Если Вы настроили соединение по IAX (точнее, IAX2) между двумя серверами asterisk (либо клиенты / пиры подключаются к астериску по IAX), не забудьте про правило для IAX в iptables:

iptables -A INPUT -p udp -m udp --dport 4569 -j ACCEPT

Если у Вас настроен asterisk AMI (Asterisk Manager Interface), то добавьте следующее правило:

iptables -A INPUT -p tcp -m tcp --dport 5038 -j ACCEPT

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

iptables-save > имя-файла-с-конфигурацией-iptables

например:

iptables-save > /etc/network/iptables-rules.conf

После чего в любой момент (например, после перезагрузки компьютера) Вы сможете восстановить правила командой:

iptables-restore < имя-файла-с-конфигурацией-iptables

например:

iptables-restore < /etc/network/iptables-rules.conf

Настройка через конфигурационные файлы

В операционной системе RHEL / CentOS уже предусмотрены конфигурационные файлы для iptables, они находятся здесь: /etc/sysconfig/iptables. Для IPv6 это будет: /etc/sysconfig/ip6tables.

Для Debian по умолчанию конфигурационных файлов не предусмотрено, как один из вариантов решения этой проблемы можно установить пакет iptables-persistent:

apt install iptables-persistent

После установки пакета можно сохранить правила в файл с конфигурацией:

iptables-save > /etc/iptables/rules.v4

для IPv6 это будет:

ip6tables-save > /etc/iptables/rules.v6

В соответствующий конфигурационный файл добавьте следующие строки (обязательно ДО строки COMMIT !):

# Для работы по SIP протоколу (порт UDP 5060):

-A INPUT -p udp -m udp --dport 5060 -j ACCEPT



# Для работы по RTP протоколу (голосовой поток, по умолчанию порты UDP с 10000 по 20000):

-A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT



# соединение по IAX (точнее, IAX2) между двумя серверами asterisk :

-A INPUT -p udp -m udp --dport 4569 -j ACCEPT



# Asterisk AMI (Asterisk Manager Interface):

-A INPUT -p tcp -m tcp --dport 5038 -j ACCEPT

После сохранения файла необходимо перезагрузить демон iptables.

Для CentOS это просто:

service iptables restart

для Debian:

/etc/init.d/iptables-persistent restart

Если сервис успешно стартует, то правила применились. В случае ошибки в правилах сервис выдаст ошибку при запуске.



2018-10-31T10:13:40
Asterisk

Asterisk – начальная настройка

Устанавливаем Asterisk:

apt install asterisk

После установки  заходим в shell Asterisk:

asterisk -rv

Обратите внимание на ключи, c которыми запускается shell. Количество ключей «v» влияет на количество выводимой информации при звонке, их количество варьируется от 1 до 14.

Если установка прошла успешно и Астериск запустился, вы увидите вот такое приглашение:

asterisk*CLI>

Первое что вам требуется сделать — создать пиров в файле /etc/asterisk/sip.conf.

Открываем его:

mcedit /etc/asterisk/sip.conf

И сразу переходим в конец файла. Вставляем следующий текст:

[internal](!)

type=friend

insecure=invite,port

context=office

fromdomain=<имя домена или IP>

host=dynamic

disallow=all

allow=alaw

qualify=yes

canreinvite=no

nat=no



[100](internal)

secret=XXX

[101](internal)

secret=XXX

Мы завели двух внутренних пиров с номерами 100 и 101. Разберем эти настройки, так как их понимание — ключ к успешному внедрению Астериска.

[internal](!)

[internal], это имя шаблона, а (!) указатель шаблона.

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

type=friend

Доступные параметры: «peer», «user» и «friend». Очень часто встречается ошибочное мнение относительно того, чем они отличаются. Многие считают, что параметр «user» разрешает только исходящие, «peer» — только входящие звонки, а «friend» разрешает звонки в обе стороны. Это не так. Использование ключа «peer» отключает проверку соответствия имени пользователя и пароля при звонке. При использовании параметра «peer», Астериском проверяется только соответствие IP-адреса и номера порта источника вызова, при использовании «user» — проверяется поле username, а проверка адреса источника не производится. Параметр «friend» заставляет проверять поле username и IP-адрес источника.

insecure=invite,port

invite — отключается аутентификация при входящем звонке.

port — отключается проверка порта источника.

При первоначальной настройке пропишите оба ключа.

context=office 

Контекст, в котором будут обрабатывается исходящие звонки от этого устройства. Подробности чуть ниже.

fromdomain=<имя домена или IP>

Имя SIP-домена. Для первоначальной настройки укажите IP адрес сервера с Астериском.

host=dynamic

IP-адрес пира. В случае использования авторизации по логину и паролю — ставьте dynamic. Конкретный IP указывается только в том случае, если настройки пира используются для транка без регистрации.

disallow=all

allow=alaw

Указываем разрешенные кодеки.

В нашем примере первая строка запрещает использование всех кодеков, а вторая — разрешает g711-a. Настройки кодеков индивидуальны для каждого случая, однако, большинство Российских и Украинских провайдеров используют g711a и g729. Последний — пропиетарный, и Астериском поддерживается лишь в Passthrough-режиме (то есть, невозможен транскодинг).

qualify=yes

Эта строка заставляет Астериск опрашивать устройство или софтфон пакетами OPTIONS. Необходим для мониторинга и траблшутинга.

canreinvite=no

Запрещает пересылать медиа напрямую между устройствами. Рекомендую ставить «no», для упрощения настройки.

nat=no

Говорим Астериску, что пир не за натом. Описание ключей и вариантов их использования, если сервер за ним, выходит за рамки статьи. Про варианты обхода расскажу в следующей статье.

[100](internal)

secret=XXX

[101](internal)

secret=XXX

Тут мы задаем имя пира и берем настройки из шаблона. Единственные уникальные параметры в нашем примере — имя пира и пароль.

На этом мы закончили настраивать внутренних пиров, перейдем к настройке стыка с операторами. Добавим 2 записи в конец sip.conf:

[operator1]

fromdomain=<имя домена или IP>

host=1.2.3.4

insecure=invite,port

port=5060

qualify=yes

type=friend

username=YourLogin

secret=YourPass

disallow=all

allow=alaw

context=operator1

Не буду расписывать значения каждой строки, т.к. все настройки идентичны настройкам внутренних пиров, за исключением поля host. В том случае, если Астериск выступает в роли клиента (а для сервера оператора наш астериск является клиентом), нам нужно указать адрес сервера оператора или его dns-имя.

Добавим второго оператора:

[operator2]

fromdomain=<имя домена или IP>

host=5.6.7.8

insecure=invite,port

port=5060

qualify=yes

type=friend

disallow=all

allow=alaw. 

context=operator2

Отличий тоже никаких, за исключением отсутствия строк username и secret, так как, напомню, второй оператор не использует регистрацию.

Осталось настроить регистрацию на сервере оператора №1. Для этого в файле sip.conf, перед секцией описывающей настройки оператора вставим следующую строку:

register => udp://YourLogin:YourPass:YourLogin@1.2.3.4/YourLogin

Синтаксис, для неподготовленного человека, выглядит сложным, поэтому не заморачивайтесь и просто позвоните в саппорт провайдера и узнайте у них о том, как регистрироваться на сервере Астериском, либо попросите выслать настройки. Как правило, большинство операторов без проблем высылают пример конфигурации под свои софт-свитчи.



На этом настройка пиров закончена, ее достаточно для работы в минимальной конфигурации, сохраняем и закрываем файл и возвращаемся в шелл Астериска командой:

asterisk -rv

В шелле Астериска пишем команду:

sip reload

Теперь вы можете зарегистрировать на своем Астериске пользователей с логинами 100 и 101. Проверяется состояние регистрации следующей командой:

sip show peers

Если вы все настроили правильно, то увидите примерно вот такой вывод:

asterisk*CLI> sip show peers

Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description

100/100                 10.0.0.52                              D  Yes        Yes            59080    OK (1 ms)

101/101                 10.0.0.57                              D  Yes        Yes            49973    OK (1 ms)

operator1           1.2.3.4                              No         No             5060     OK (22 ms)

operator2           5.6.7.8                              No         No             5060     OK (22 ms)


Если вы это видите, то, поздравляю, ваши устройства или софтфоны успешно зарегистрировались и Астериск увидел сервера операторов.

Состояние регистрации проверяется командой:

sip show registry

Если регистрация прошла успешно, то вы должны увидеть вот такой вывод:

asterisk*CLI> sip show registry

Host                                    dnsmgr Username       Refresh State                Reg.Time

1.2.3.4:5060                       N      YourLogin               120 Registered

1 SIP registrations.

На этом настройка пиров закончена, перейдем к настройке диалплана. Диалплан — это сердце Астериска, с помощью него обрабатываются абсолютно все звонки. Астериск понимает несколько языков, но в нашем примере мы будем использовать стандартный, появившийся в самых первых релизах Астериска. Файл конфигурации хранится в файле /etc/asterisk/extensions.conf.

Откроем его командой:

mcedit /etc/asterisk/extensions.conf

В стандартных файлах конфигурации хранится много дефолтных правил. Они нам не нужны, поэтому очистим содержимое и пропишем следующее:

[general]

static=yes

writeprotect=no



[globals]

Это параметры необходимые для нормального чтения диалплана, поэтому менять их не следует.

Начнем с простого. Нам нужно позвонить с номера 100, на номер 101. Для этого нужно прописать правило, сразу после секции globals:

[office]

exten => _1XX,1,Dial(SIP/${EXTEN})

Разберем эту строку.

[office] — имя контекста, в котором обрабатываются звонки от пира.

exten => — указатель начала шага.

_1XX — маска. На маске остановимся чуть подробнее. С помощью нее сортируются все звонки, попадающие в контекст диалплана.

Маска использует набор паттернов для сортировки звонков по caller-id:

X – любая цифра от 0-9

N – любая цифра от 2-9

[234-6] – цифры 2, 3, 4 и 6

. – любые возможные символы

Маска начинается с символа “_”, который означает что это шаблон. В случае, если вы забудете указать его, Астериск примет 1XX за вызываемый номер и передаст Dial-у паттерны вместо номера телефона, и звонок не состоится.

1 — номер действия.

Dial — это приложение. В диалплане можно использовать более 200 различных приложений, которые используются для манипуляций со звонками. Сейчас, в самом начале, мы будем использовать только одно приложение — Dial. Из названия понятно, что оно используется для совершения звонков.

(SIP/${EXTEN}) — аргументы для приложения. В нашем примере, для внутренних пиров мы используем протокол SIP, поэтому первый аргумент, который мы передаем dial-у — указывает на используемый протокол сигнализации. ${EXTEN} — текущий экстеншен, его значение берется из заголовка (из поля destination).

/ — разделитель для передаваемых аргументов.

Каждый из параметров разделяется запятыми. В нашем примере используются трехзначные номера, поэтому в маске должно быть 3 паттерна. В случае, если вы захотите использовать иную длину нумерации, то пишите в маске нужное количество паттернов. Теперь сохраняем файл, открываем шелл астериска и пишем команду:

dialplan reload

И снова перезагружаем диалплан через шелл Астериска.

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

exten => _XXXXXXX,1,Dial(SIP/${EXTEN}@operator1)

Перезагружаем диалплан и пробуем звонить в город.

Теперь нам надо принять входящий звонок. Сделаем новый контекст в диалплане, пишем в конец файла:

[operator1]

 exten => s,1,Dial(SIP/100&SIP/101)

Поясню что означает «s». Это стандартная маска в Астериске, под которую попадают абсолютно все вызовы. То есть, если мы используем транк с регистрацией, входящий caller-id будет «s».

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

Сейчас нам понадобилось позвонить на сотовый телефон, с федеральным номером. Допишем еще одну строку в контекст [office]:

exten => _89XXXXXXXXX,1,Dial(SIP/${EXTEN}@operator1)

Сохраняемся, перезагружаем диалплан и звоним. Все. Теперь мы можем полноценно использовать услуги оператора, предоставляющего городской номер.

Однако, тут кроется небольшая проблема, которая возникнет при звонке на сотовые телефоны других регионов. Так как номер телефона федеральный, то все звонки пойдут через первого оператора. Поэтому уместно уменьшить размер масок в диалплане. К примеру:

exten => _8909[89][2-9][1-3]XXXX,1,Dial(SIP/${EXTEN}@operator1)

exten => _8901[456][2-5]1XXXX,1,Dial(SIP/${EXTEN}@operator1)

exten => _XXXXXXX,1,Dial(SIP/${EXTEN}@operator1)

С такой конструкцией все звонки на телефоны с кодами из диапазонов 890982XXXXX-890999XXXXX и 8901421XXXX-8901651XXXX пойдут через первого оператора. Не совсем удобно, соглашусь с этим. В будущих статьях выложу конфигурацию диалплана для автоматического выбора оператора в зависимости от направления звонка, так как подобное опять же выходит за рамки этой статьи.

Теперь нам осталось пустить междугородние звонки через второго оператора. Добавляем строку в контекст [office]:

exten => _[78][3-689]XXXXXXXXX,1,Set(CALLERID(num)=74991234567)

same => n,Dial(SIP/${EXTEN}@operator2)

Как вы заметили, тут появились новые приложения, которые обрабатывают звонки. Set(CALLERID(num)=74991234567) — так как мы используем транк без регистрации, то это значит что мы должны отсылать оператору caller-id. Этот номер не обязательно должен существовать. Тут мы просто представляемся провайдеру и не более. Какой номер подставлять — зависит от оператора. Некоторые предоставляют услугу подмены caller-id на номер другого оператора, для совершения исходящих вызовов по межгороду или для зоновуй связи. За подробностями обращайтесь к оператору. same => n — указатель, который позволяет не писать каждый раз маску и номер действия. К примеру:

exten => 78121234567,1,Answer

exten => 78121234567,1,Set(CALLERID(name)=Trunk_1

exten => 78121234567,1,Dial(SIP/1000)

Можно заменить на:

exten => 78121234567,1,Answer

same => n,Set(CALLERID(name)=Trunk_1

same => n,Dial(SIP/1000)

Во втором случае все гораздо проще, не так ли?

На этом все, мы настроили Астериск. Теперь мы можем звонить в город, на сотовые, по межгороду и у нас есть внутренняя связь между пирами. Получаем вот такой, вполне рабочий диалплан:

[general]

static=yes

writeprotect=no



[globals]



[office]

exten => _8909[89][2-9][1-3]XXXX,1,Dial(SIP/${EXTEN}@operator1)

exten => _8901[456][2-5]1XXXX,1,Dial(SIP/${EXTEN}@operator1)

exten => _[78][3-689]XXXXXXXXX,1,Set(CALLERID(num)=74991234567)

same => n,Dial(SIP/${EXTEN}@operator2)

exten => _XXXXXXX,1,Dial(SIP/${EXTEN}@operator1)

exten => _1XX,1,Dial(SIP/${EXTEN})



[operator1]

exten => s,1,Dial(SIP/100&SIP/101)

На этом базовая минимальная настройка завершена.

По материалам



2018-10-29T09:33:08
Asterisk

Резервирование сервера Elastix с помощью heartbeat и rsync

Одним из простых способов построения отказоустоичивой системы телефонии на основе elastix является использование heartbeat для резервироания серверов и rsync для синхронизации конфигурации. Для начала устанавливаем и настраиваем heartbeat и rsync.

После настройки heartbeat и rsync создаем на основном сервере файл mysqldump.sh

mysqldump -u root -ppassword asterisk > /home/backup/asterisk.sql

mysqldump -u root -ppassword asteriskcdrdb > /home/backup/asteriskcdrdb.sql

mysqldump -u root -ppassword meetme > /home/backup/meetme.sql

cp /etc/sysconfig/iptables /home/backup/

Изменяем права на запуск:

chmod 750 /home/mysqldump.sh

Добавляем его в cron, для этого в файл /var/spool/cron/root добавляем строчку

00 00 * * * * /home/mysqldump.sh

Перезапускаем крон.

/etc/init.d/crond restart

На резервном сервере создадим скрипт который будет синхронизировать конфигурацию с основным сервером.

nano /home/sync_config.sh

Его содержание

rsync  -rc --exclude=Thumbs.db -t -e ssh --rsync-path=/usr/bin/rsync --temp-dir=/tmp root@server1:/home/backup/ /home/backup

rsync  -rc --exclude=Thumbs.db -t -e ssh --rsync-path=/usr/bin/rsync --temp-dir=/tmp root@server1:/etc/asterisk/ /etc/asterisk

rsync  -rc --exclude=Thumbs.db -t -e ssh --rsync-path=/usr/bin/rsync --temp-dir=/tmp root@server1:/var/lib/asterisk/ /var/lib/asterisk

rsync  -rc --exclude=Thumbs.db -t -e ssh --rsync-path=/usr/bin/rsync --temp-dir=/tmp root@server1:/var/spool/asterisk/monitor/ /var/spool/asterisk/monitor

mysql -u root -ppassword asterisk < /home/backup/asterisk.sql

mysql -u root -ppassword meetme < /home/backup/meetme.sql

mysql -u root -ppassword meetme < /home/backup/asteriskcdrdb.sql

cp /home/backup/iptables /etc/sysconfig/iptables service iptables restart /bin/asterisk.reload

Изменяем права

chmod 750 /home/sync_config.sh

И тоже добавляем его в cron

30 00 * * * * /home/sync_config.sh

Для корректной работы астериска, нужно прописать в  /etc/asterisk/sip.conf

bindaddr=192.168.0.12

Где 192.168.0.12 — общий ip адрес на который переключается сервер с помощью heartbeat.

Для этого в WEB интерфейсе elastix заходим во вкладку PBX->Unembedded freePBX. И на вкладке Tools в меню Asterisk Sip Seting в самом низу есть строка «Bind Address». Здесь прописываем наш адрес.

Так же настраиваем авторизацию по ключу. Чтобы работала синхронизация конфигурации через cron.



2018-10-01T12:04:16
Asterisk