Основные параметры конфигурации 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
-
Отредактируйте pjsip.endpoint_custom.conf путем добавления следующих данных
-
Отредактируйте extensions_custom.conf
Настройка PBXAct
-
Отредактируйте pjsip.endpoint_custom.conf добавив следующие данные
-
Отредактируйте extensions_custom.conf
Чтобы показать хинты от каждой АТС соответственно вы можете ввести следующее
-
В CLI на FreePBX: asterisk-rx ‘core show hints’ | grep-i (ext)
Как вы можете видеть, экземпляр FreePBX следит за расширениями 7200 и 4100 на PBXact
Когда пользователь находится в состоянии вызова — BLF изменится так же, как и хинт
-
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.