Raspberry pi + freebpx(asterisk) + mikrotik = атс мини

Основные параметры конфигурации NAT для Asterisk

 sip.conf
 

Поддержка NAT в Asterisk 12

 localnet

параметр ‘localnet’ список сетевых адресов, которые считаются «внутренними».

 localnet=192.168.0.0/255.255.0.0 - RFC 1918 адреса
 localnet=10.0.0.0/255.0.0.0      - Также RFC1918
 localnet=172.16.0.0/12           - Другое RFC1918 с CIDR обозначением
 localnet=169.254.0.0/255.255.0.0 - Zeroconf локальная сеть
externaddr

Внешний адрес щлюза (маршрутизатора) во внешнюю сеть. «externaddr = hostname» указывает статический адрес который будет использован в SIP и SDP сообщениях. Имя хоста (hostname) поднимается каждый раз, когда загружается sip.conf. Если порт не назначен, используется значение указанное в параметре «udpbindaddr». примеры:

 externaddr = 123.34.56.78:         - использовать этот адрес.
 externaddr = 123.34.56.78:9900     - использовать этот адрес и порт.
 externtcpport = 9900    - отображаемый наружу tcp порт
 externtlsport = 12600   - отображаемый наружу tcp порт;  'externtlsport' по рекомендации RFC назначенный порт 5061.	
media_address

IP адрес используемый для медиа (аудио, видео и текста) в SDP может быть переназначен параметром ‘media_address’. Данный параметр может быть использован только в секции .

 media_address = 172.16.42.1
icesupport

ICE/STUN/TURN использование может быть включено глобально или для конкретного пира с помощью ‘icesupport’ опции.

 icesupport = yes
directmedia

Для отключения прямых RTP потоков (peer-to-peer) используйте опцию:

 directmedia=nonat

rtp.conf

 rtpstart=10000

Задает первый порт диапазона для приема и оправки голосовых пакетов RTP.

 rtpend=10100

Задает последний порт диапазона для приема и оправки голосовых пакетов RTP.

 stunaddr=sip.stun.tld

В Asterisk начиная с версии 11 появилась поддержка stun. icesupport должно быть включено.

Отключение SIP ALG на роутерах

Если вы хотите что бы SIP телефония работала корректно, при условии что ваш сервер с астериск находится за NATом, вам необходимо выполнить следующие на своем роутере:

  • Проброс UDP порта 5060 (SIP) отвечающий за сигнализацию вызова
  • Проброс диапазона UDP портов 10000-20000 (RTP) отвечающий за голос

В качестве dst.address должен быть указан ip астериска, а в качестве dst.port аналогичные порты из пункта выше.

Если после этого вы испытываете проблемы с SIP регистрацией и прочим, то необходимо проверить наличие на вашем роутере SIP ALG и отключить его.

Так как определенные модели роутеров и сетевых экранов имеют  встроенную технологию передачи SIP протокола (прозрачное изменение SIP сообщений), которые призваны упростить работу с NAT, то использование стандартного порта 5060 при такой конфигурации будет не упрощать работу, а наоборот, усложнять, т.к. нужно использовать либо проброс, либо sip alg.

Отключение SIP ALG для CISCO роутеров:

no ip nat service sip udp port 5060

3xx – сообщения о переадресации

SIP/2.0 300 Multiple ChoicesУказывает несколько SIP-адресов, по которым можно найти вызываемого пользователя.

SIP/2.0 301 Moved PermanentlyВызываемый пользователь больше не находится по адресу, указанному в запросе.

SIP/2.0 302 Moved TemporarilyПользователь временно сменил местоположение. (Настроена переадресация по SIPUA в т.ч. с VOIP-телефона)

SIP/2.0 305 Use ProxyВызываемый пользователь не доступен непосредственно. Входящий вызов должен пройти через прокси-сервер.

SIP/2.0 380 Alternative ServiceЗапрошенная услуга недоступна, но доступны альтернативные услуги.

5xx – ошибки сервера

SIP/2.0 500 Internal Server ErrorВнутренняя ошибка сервера.

SIP/2.0 500 DB TimeoutНет ответа от базы данных.

SIP/2.0 500 Database ErrorТо же самое, но в другой момент.

SIP/2.0 500 Wrong DB ResponseНеправильный ответ базы данных.

SIP/2.0 500 Undefined ReasonНеопределенная причина.

SIP/2.0 500 account has been moved to a remote systemАккаунт перенесен в удаленную систему (дословно).

SIP/2.0 500 Call placing quota exceededПревышен CPS.

SIP/2.0 501 Method Not Supported HereВ сервере не реализованы какие-либо функции, необходимые для обслуживания запроса. Метод запроса SIP не поддерживается.

SIP/2.0 502 Bad GatewayСервер, функционирующий в качестве шлюза или прокси-сервера, принимает некорректный ответ от сервера, к которому он направил запрос.

SIP/2.0 503 Service UnavailableСервер не может в данный момент обслужить вызов вследствие перегрузки или проведения технического обслуживания.

SIP/2.0 504 Server time-outСервер не получил ответа в течение установленного промежутка времени от сервера, к которому он обратился для завершения вызова.

SIP/2.0 505 SIP Version not supportedВерсия не поддерживается. Сервер не поддерживает эту версию протокола SIP.

SIP/2.0 513 Message too bigСервер не в состоянии обработать запрос из-за большой длины сообщения.

Настройка Mikrotik

Нужно настроить проброс портов и защиту.

IP-Firewall-жмем на плюсик:

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

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

Долго собирал из разных источников эту работающую инструкцию. Может кому то и поможет.

P.S. Добавлена возможность отправки СМС через модем из SIP клиента, например Zoiper.

Peer is not supposed to register

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

Есть два удаленных сервера astersik, связанных между собой vpn каналом на базе openvpn. Длительное время все нормально работало, настройки никто не менял, кроме добавления пользователей, как минимум пару лет. Работает и работает, необходимости в изменениях не было.

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

NOTICE chan_sip.c: Registration from » failed for ‘108.68.220.194:54233’ – Peer is not supposed to register ERROR chan_sip.c: Peer ‘servnew’ is trying to register, but not configured as host=dynamic

А тот, что пытался зарегистрироваться в лог сыпал сообщениями:

NOTICE chan_sip.c: — Registration for ‘[email protected]’ timed out, trying again (Attempt #10)

Часть конфигурации сервера, который пытается зарегистрироваться:

register => servnew:[email protected]:51612/servxm

А это учетка на сервере приемнике:

type = friend host = 10.1.3.205 username = servnew secret = 1444Fxczvg insecure = invite trunk = yes qualify = yes context = old_serv

peercontext = old_serv

205, ему нет необходимости регистрироваться. Однако, все именно с такими настройками и работало длительное время. Я специально это проверил, восстановив виртуалки и сравнив конфиги.

Они не изменились с тех пор, но ошибка появилась только сейчас.

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

Первым делом я решил изменить параметр учетной записи и поменять параметр host со старого на новый:

host = dynamic

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

Как я не пытался понять, почему так происходит, не получилось разобраться.

Решил проблему простым способом. На сервере приемнике поставил как и было:

host = 10.1.3.205

А на сервере, который пытался зарегистрироваться через

register => servnew:[email protected]:51612/servxm

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

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

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

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

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

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

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

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

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

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

# Fail2Ban configuration file
#
#
# $Revision: 250 $
#



# Read common prefixes. If any customizations available -- read them from
# common.local
#before = common.conf




#_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}:)?(?P\S+)
# 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 $
#



# Read common prefixes. If any customizations available -- read them from
# common.local
#before = common.conf




#_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}:)?(?P\S+)
# 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 =

/etc/asterisk/asterisk.conf

В файле конфигурации asterisk.conf Вы определяете следующее:

  • Местоположение, права доступа и владельца сокета, которые используется для подключения удаленной консоли управления сервером.
  • Местоположение различных директорий, используемых сервером Asterisk для определения местоположения файлов конфигурации, библиотек, скриптов и место, где будут создаваться лог фалы.
  • Параметры командной строки запуска сервера, используемые по умолчанию.

Пример конфигурации.

Директории

Директории используемые в Asterisk.

directories

(!)
astetcdir => /etc/asterisk
astmoddir => /usr/lib/asterisk/modules
astvarlibdir => /var/lib/asterisk
astdbdir => /var/lib/asterisk
astkeydir => /var/lib/asterisk
astdatadir => /var/lib/asterisk
astagidir => /var/lib/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /var/run/asterisk
astlogdir => /var/log/asterisk
astsbindir => /usr/sbin

astetcdir => /etc/asterisk

astmoddir => /usr/lib(64)/asterisk/modules

astvarlibdir => /var/lib/asterisk

astspooldir => /var/spool/asterisk

Директории для файлов создаваемых Asterisk в процессе работы. Например: Записи разговоров, принятые факсы, голосовая почта, call-файлы итд.

 ls -1  /var/spool/asterisk/
/fax
/meetme
/monitor
/outgoing
/sysadmin
/system
/tmp
/voicemail

astrundir => /var/run/asterisk

Место куда Asterisk записывает UNIX control socket файл (asterisk.ctl) и файл ID процесса (asterisk.pid)

ls -1  /var/run/asterisk/
asterisk.ctl
asterisk.pid

astlogdir => /var/log/asterisk

Файлы логов Asterisk. Настройки вывода логов производятся в файле /etc/asterisk/logger.conf

 ls -1  /var/log/asterisk
/cdr-csv ;директории CDR файлов
/cdr-custom
full
queue_log

а также могут быть:

 fail2ban   ; 
 freepbx_debug 
 freepbx.log

astsbindir => /usr/sbin

Исполняемые файлы Asterisk.

 ls /usr/sbin | grep asterisk
 asterisk
 rasterisk
 safe_asterisk
Параметр Значение по умолчанию / Пример Описание
verbose Устанавливает уровень детализации (verbose) консоли и лога . Это значние также может быть установлено в консоли коммандой ‘core set verbose <0-9> или off.
debug Залает значение уровня отладки (debug). по умолчанию — 0
alwaysfork no всегда в фоновом режиме, даже с опциями -v или -d
nofork no Отключить фоновое выполнение.
quiet no Работать тихо (-q). Уменьшает выхлоп консоли.
timestamp no Временные отметки в выводе консоли(-T) CLI verbose output
execincludes no Разрешить #EXEC записи в файлах конфигурации
console no Всегда запускать в консольном режиме, с приглашением CLI.
highpriority no Запускать Asterisk c наивысшим приоритетом в режиме реального времени.
initcrypto no Загружать ключи из ../astkeydir при старте.
nocolor no Цветная консоль.
dontwarn no Отключить предупреждения (warning messages).
dumpcore no Делать дамп (содержимое рабочей памяти процесса, ядра)при падении
languageprefix yes Как находится путь к звуковому файлу с языковым префиксом. По умолчанию, ‘yes’ — перфикс языка в пути к файлу перед подкаталогов, например ../ru/digits/1.gsm. Если ‘no’ то префикс после имени каталога, например: (digits/ru/1.gsm).
internal_timing yes Включить внутренний источник синхронизации для аудио
systemname not set Уникальное имя Asterisk. Используется как часть UNIQUEID в CDR. По умолчанию не задано
autosystemname no Автоматом задавать ‘systemname’ на основании имени хоста
maxcalls not set Максимальное кол-во одновременных входящих вызовов. По умолчанию не ограничено
maxload not set/0.9 Максимальная нагрузка на процессор, при которой Asterisk прекратит новые соединения.
minmemfree not set /256
cache_record_files yes / no Кэшировать записи
record_cache_dir <dir> директория кэша записей
transmit_silence no Транслировать тишину, если нет другог источника звука
transcode_via_sln yes перекодировать кодеки через SLINEAR
runuser asterisk Владелец Asterisk.
rungroup asterisk Группа Asterisk.
documentation_language en / es / ru Язык документации
hideconnect no Не показывать сообщения о подключении удаленных консолей

PBXact

 Настройка FreePBX Config

  1. Отредактируйте pjsip.endpoint_custom.conf путем добавления следующих данных

  1. Отредактируйте extensions_custom.conf

Настройка PBXAct

  1. Отредактируйте pjsip.endpoint_custom.conf добавив следующие данные

  1. Отредактируйте extensions_custom.conf

Чтобы показать хинты от каждой АТС соответственно вы можете ввести следующее

  1. В CLI на FreePBX: asterisk-rx ‘core show hints’ | grep-i (ext)

Как вы можете видеть, экземпляр FreePBX следит за расширениями 7200 и 4100 на PBXact

Когда пользователь находится в состоянии вызова — BLF изменится так же, как и хинт

  1. DND так же можно контролировать

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

ГлавноевпроцессепроверкииметьподрукойдругойкомпьютерилилокальныйдоступксерверучтобывслучаекогдазаблокируетВашадресВысмоглиподключитьсяиудалитьэтублокировку

НеобходимообязательнопроверитьработусвязкипосколькудажееслиВывсенастроилиилископировалиправильновозможномножествокомбинацийсобытийврезультатекоторыхнастренныеВамиблокировкиработатьнебудут

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

УбедитесьчтоуВаснастроензапускипристартекомпьютера
ЕслиВынастроилиправиладлянастоятельнорекомендуемпроверитьработукаждогоизнихпоотдельностиДляэтогоотключитеодноизправилнапример
перезагрузитекомпьютерипроверьтечтослужбыизапущены
одноизправилвключеноадругоевыключеноПриэтомдлявыключенногоправилапоявитсясообщениеадлявключенногосообщениевида

ЗапуститеклиентобязательнонессамогосервераасдругогокомпьютераиуказавневерныеданныедляавторизацииадресдляподключениядолженбытьадресомсерверапопробуйтеавторизоватьсяразаилиболееколичествоавторизацийпослекоторыхадресблокируетсязадаетсявпараметредлякаждогоправилаотдельноВкачестветестовогоклиентаможноиспользоватьпрограммукотораяработаетизкоманднойстроки
ЕслиВызапустиликлиентастогожекомпьютераскоторогоподключалиськсерверуиеслибылинастроеныправильнотонаданныймоментВашадресзаблокированиВынеможетеподключитьсяксерверусэтогокомпьютерапроверьтеэтоПодключитеськсдругогокомпьютераилилокальноипродолжайтевыполнениекоманд
Запуститекомандувидадлявключенногоправилаиубедитесьчтоадресскоторогоподключалсяклиентнаходитсявспискезаблокированных
Теперьпоаналогиисдействиямиизпунктаразблокируйтевтороеправилонапримеризаблокируйтепервое
ВыполнитедействияспунктапопункттольковместоперезагрузкикомпьютерачтотожеможносделатьдостаточноперезагрузитьслужбуПослеэтогосразуразблокируетсяадрескомпьютеранакоторомВызапускаликлиентиегоможнобудетинужнокаквпунктезапуститьещераздляпроверкиработывторогоправилаОбратитевниманиечтоможетинеразблокироватьточнееразблокироватьисновазаблокироватьвэтомслучаеВамлучшесделатьпаузусекундпослечегоещеразперезагрузитьсервис
ПослетогокакВыпроверилиработуобоихправилпоотдельностинезабудьтеобязательновключитьихобадляидляпараметрПослеэтогоразумеетсянезабудьтеперезагрузитьсервис
ИпоследнийпунктеслиВывыполнилипредыдущиепунктыдостаточнобыстровтечениенесколькихминуттоможетоказатьсячтопослевключенияобоихправилипоследующейперезагрузкиуВассновазаблокируетсяадресскоторогоВызапускаликлиентаБудьтевнимательны

Звонок абоненту используя SIP URI

ЗадачаОбеспечить возможность входящих звонков по протоколу SIP без авторизации, используя адресацию SIP URI. Звонки могут осуществлять софтфоны, которые могут звонить без регистрации (например, twinkle) или различные веб сервисы.

Настройка DNS
Настройка Астериск на прием вызовов SIP URI
Безопасность

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

1. Настройка DNS

На вашем DNS сервер необходимо добавить запись типа SRV. Например, так:

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

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

Для проверки SRV записи можно использовать nslookup:

Если вы получили аналогичный ответ, то DNS конфигурация SIP URI прошла успешно.

2. Настройка Астериск на прием вызовов SIP URI

Делаем изменения в файле sip.conf:

allowguest=yes

context=from-internet

cli>sip reload

Проверяем, что настройки применились

cli>sip show settings

… Allow unknown access:  Yes… Context:               from-internet

Теперь Астериск будет обрабатывать неавторизованные вызовы в контексте from-internetОпишим его в файле extensions.conf

exten = > team,1,Verbose (1,Internet guest call from IP=${SIPCHANINFO (peerip)})exten = > team,n,Dial (SIP/712&SIP/711)exten = > _.,1,Verbose (1,Internet guest call from IP=${SIPCHANINFO (peerip)})exten = > _.,n,Wait (3) ; снизит скорость DDOSexten = > _.,n,Hangup ()

Сохраняем и применяем настройки dialplan reload. Теперь наш Астериск готов принять звонки типа: [email protected]

3. Безопасность

Рекомендуем делать данную настройку не на основном сервере, если это возможно. Также нерекомендуем делать данную настройку, на узком интернет канале. Т.к.

прием неавторизованного вызова «лакмусовая бумажка» для злоумышлиника. И хотя мы запретили вызовы кроме конкретных, злоумышлиник будет «пробивать» ваш диалплан на предмет возможности делать исходящие вызовы.

Что вызовит нагрузку на ваш интернет канал.

С этим можно бороться на уровне firewall. Если мы определили атаку и заблокировали, то через некоторое время злоумышлиник скорее всего перестанет делать попытки прозвона. Предполагаем, что у вас уже установлен fail2ban, и активировано правило asterisk-iptables в файле jail.conf (jail.local)

# /etc/init.d/fail2ban statusFail2ban (pid 11416) is running…Status|— Number of jail:     5

`- Jail list:          apache-tcpwrapper, apache-badbots, ssh-iptables, asterisk-iptables, vsftpd-iptables

В папке /etc/fail2ban/filter.d находим конфиг, который отвечает за блокировку для логов астериск, например, asterisk.conf:

В секцию failregex добавляем новое правило (последняя строка):

failregex = Registration from ‘.*’ failed for ‘ (:{1,5})?’ — Wrong password           Registration from ‘.*’ failed for ‘ (:{1,5})?’ — No matching peer found           Registration from ‘.*’ failed for ‘ (:{1,5})?’ — Device does not match ACL           Registration from ‘.*’ failed for ‘ (:{1,5})?’ — Username/auth name mismatch           Registration from ‘.*’ failed for ‘ (:{1,5})?’ — Peer is not supposed to register           NOTICE.* failed to authenticate as ‘.*’$           NOTICE.*. *: No registration for peer ‘.*’ (from )           NOTICE.*. *: Host failed MD5 authentication for ‘.*’ (.*)           VERBOSE.* logger.c: —. *IP/-.* Playing ‘ss-noservice’ (language ‘.*’)           Internet guest call from IP=

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

/etc/init.d/fail2ban restart

Примечание: не забудьте проверить, что iptables у вас запущен

На этом настройка закончена и теперь множественные попытки в короткий промежуток времени, даже если они будут успешными (т.е. на правильный exten), будут заблокированы на уровне iptables.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: