Настройка fail2ban для защиты asterisk. Защита Asterisk от взлома Защита asterisk от несанкционированных подключений

Телефония может быть дешевой
и функциональной!

Компания «Айти КУБ» предоставляет широкий спектр услуг по установке, интеграции и настройке IP-телефонии

IT-услуги могут быть качественными!

chmod 755 install_apf_bfd.sh

./install_apf_bfd.sh

Конфиг APF находится в /etc/apf/conf.apf

Чтобы начать редактировать файл, используйте следующую команду:

nano /etc/apf/conf.ap f

Ставим the IFACE_IN иIFACE_OUT для сетевого интерфейса, смотрящего в Интернет. Для сетевого интерфейса, смотрящего в локальную сеть, ставим IFACE_TRUSTED.

SET _ TRIM ="0"

У APF есть способность поддерживать QoS. Для SIP и IAX необходимо установить следующее:

TOS _8="21,20,80,4569,5060,10000_20000"

Если бы Вы изменили порт SSH, необходимо отредактировать conf.apf файл, чтобы соответствовать этому новому порту.

HELPER _ SSH _ PORT ="2222"

Удостоверьтесь, что заменили 2222 правильным числом порта, на котором Вы решили управлять SSH.

Фильтрация входящего трафика используется, чтобы открыть порты для доступа; у TCP и UDP есть отдельные параметры настройки. Для Asterisk (Trixbox) следующие порты должны быть открытыми; и TCP и UDP перечислены. Если Вы не используете TFTP, то не открывайте порт 69. Не забывайте изменять порт SSH. Иначе, Вы не сможете получить доступ; здесь мы используем порт 2222 из нашего последнего примера. Мы не включали порты IAX в эту установку. Есть легкий способ убедиться, что только определенные хосты могут использовать IAX, который мы откроем позже. Это удобно, если Вы используете IAX, чтобы поднять межстанционные транки, невидимые для внешнего мира.

IG_TCP_CPORTS="2222,69,80,5060,6600,10000_20000"
IG_UDP_CPORTS="69,5060,10000_20000"

Я не использую фильтрацию исходящего трафика, поэтому она не рассматривается в данной статье. Она установлено в EGF="0", отключена по умолчанию.

Чтобы увидеть список параметров командной строки, запустите apf без флагов.

# apf
apf(3402): {glob} status log not found, created
APF version 9.6 < This email address is being protected from spambots. You need JavaScript enabled to view it. >
Copyright (C) 1999-2007, R-fx Networks < This email address is being protected from spambots. You need JavaScript enabled to view it. >
Copyright (C) 2007, Ryan MacDonald < This email address is being protected from spambots. You need JavaScript enabled to view it. >
This program may be freely redistributed under the terms of the GNU GPL
usage /usr/local/sbin/apf
-s|--start ......................... load all firewall rules
-r|--restart ....................... stop (flush) & reload firewall rules
-f|--stop........ .................. stop (flush) all firewall rules
-l|--list .......................... list all firewall rules
-t|--status ........................ output firewall status log
-e|--refresh ....................... refresh & resolve dns names in trust
rules
-a HOST CMT|--allow HOST COMMENT ... add host (IP/FQDN) to
allow_hosts.rules and immediately load new rule into firewall
-d HOST CMT|--deny HOST COMMENT .... add host (IP/FQDN) to
deny_hosts.rules and immediately load new rule into firewall
-u|--remove HOST ................... remove host from
*_hosts.rules and immediately remove rule from firewall
-o|--ovars ......................... output all configuration options

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

# apf -s
apf(3445): {glob} activating firewall
apf(3489): {glob} determined (IFACE_IN) eth0 has address 192.168.1.31
apf(3489): {glob} determined (IFACE_OUT) eth0 has address 192.168.1.31
apf(3489): {glob} loading preroute.ruleshttp://r-fx.ca/downloads/reserved http://feeds.dshield.org/top10-2.txt
http://www.spamhaus.org/drop/drop.lasso
apf(3489): {sdrop} parsing drop.lasso into /etc/apf/sdrop_hosts.rules
apf(3489): {sdrop} loading sdrop_hosts.rules
apf(3489): {glob} loading common drop ports
...........trimmed for this document.........
apf(3489): {glob} default (ingress) input drop
apf(3445): {glob} firewall initalized
apf(3445): {glob} !!DEVELOPMENT MODE ENABLED!! - firewall will flush
every 5 minutes.

Мы можем видеть, что APF стартанул, загрузил несколько правил с dshield.org и spamhaus.org. Теперь проведем тест захода на Asterisk (Trixbox)-сервер по SSH, чтобы убедиться, что Вы настроили все правильно. Если Вы не можете соединиться, необходимо подождать 5 минут, и затем APF снимет блокировку. Как только Вы уверены, что можете войти по SSH, мы можем изменить в conf.apf DEVEL_MODE = "1" на DEVEL_MODE = "0" и перезапустить APF. APF стартанет и не выдаст предупреждение о том, чтобы он находится в DEVELOPMETN_MODE.

APF: дополнительный тюнинг

На этом настройка не заканчивается, если Вы хотите объединить свои Asterisk (Trixbox)-сервера по IAX. Для этого Вам потребуется добавить порты IAX в conf.apf. Этот вариант будет работать со статическими IP-адресами или DynDNS. Команда apf -a разрешает доступ для определенного IP-адреса. Это глобально позволит хосту соединяться с Asterisk (Trixbox), обходя правила брандмауэра.

apf -a 192.168.1.216

Это позволит системе 192.168.1.216 соединяться с любым портом на зафаерволенном сервере, таким образом, обходя правила брандмауэра. Если Вы управляете APF на обоих Asterisk (Trixbox), убедитесь, что сделали ту же самую вещь на другом хосте, использующем правильный IP-адрес.

APF также позволяет системному администратору блокировать хост или целую подсеть. Это удобно, если Вы видите, что кто-то пытается соединиться с Вашей машиной по FTP, Telnet, SSH и так далее. Чтобы заблокировать определенный хост, используйте следующее: убедитесь, что использовали IP-адрес, который Вы хотите заблокировать.

apf -d 192.168.1.216

Чтобы заблокировать полную подсеть (CIDR):

apf -d 202.86.128.0/24

APF не поддерживает QoS для UDP-пакетов. Только TCP. Есть легкий способ пофиксить это. В /etc/apf/internals есть файл functions.apf. Мы должны отредактировать этот файл вручную. Есть несколько мест, где мы должны добавить единственную строку. Ищем секцию TOS_ в functions.apf файле. Это будет похоже на это:

if [ ! "$TOS_0" == "" ]; then
for i in `echo $TOS_0 | tr "," " "`; do
i=`echo $i | tr "_" ":"`
$IPT -t mangle -A PREROUTING -p tcp --sport $i -j TOS --set-tos 0
$IPT -t mangle -A PREROUTING -p udp --sport $i -j TOS --set-tos 0
done
fi

Эта дополнительная строка должна быть сделана для всех битов TOS, которые Вы используете.

BFD

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

Конфигурационный файл для BFD расположен в /usr/local/bfd и назван conf.bfd. Этот файл, как и для APF, содержит множество комментариев. Мы рассмотрим лишь некоторые параметры настройки.

Первая переменная конфигурации, на которую мы обратим внимание, - TRIG; это число неудавшихся попыток прежде, чем злоумышленник будет заблокирован. По умолчанию равно 15. Имейте в виду, что это число попыток не с одного аккаунта, а с одного IP-адреса. Так, если с 1 IP-адреса прихоидт 15 неудачных попыток входа, используя разные аккаунты, он все равно будет залочен.

У BFD есть хорошая фича - послать электронные письма при обнаружении брутфорса. Чтобы включить данную опцию, установите EMAIL_ALERTS в 1; не забудьте указать адрес, на который Вы хотите получать уведомления - EMAIL_ADRESS.

BFD запускается cron-ом каждые 3 минуты и находится в /etc/cron.d.

Вы можете получить список забаненных IP-адресов, используя команду:

Для старта BFD используйте следующую команду:

bfd -s

Резюме

На этом обзор безопасности Asterisk (Trixbox) завершен.

В данной статье рассмотрены лишь основные принципы защиты Asterisk (Trixbox). Естественно, построение безопасных VoIP-систем этим не ограничивается.

С оригиналом статьи Вы можете ознакомиться по ссылке

Сейчас очень часто приходится сталкиваться с различным родом атак на Asterisk и аналоги. Неверная настройка и незнание простых правил влекут за собой финансовые потери для предприятия, которое использует PBX Asterisk.

В данной статье мы рассмотрим первоначальные механизмы безопасности Asterisk 13 после установки и не будем рассматривать механизмы безопасности Linux. Ниже будет описан ряд правил, которые помогут обезопасить вашу систему:

1. Устойчивые к взлому пароли и логины на всех сетевых устройствах (Asterisk, IP-телефоны, VoIP-шлюзы).

Пароли SIP-аккаунтов, администраторов, менеджеров Asterisk и на сетевых устройствах должны состоять не менее чем из 13 символов (буквы, цифры, спецсимволы, смена регистра). Не использовать логины в системе такие как admin, administrator, manager и т.д.

2. Правильная настройка SIP в Asterisk – sip.conf.

Для защиты от сканеров следует изменить стандартный порт SIP, запретить гостевые вызовы и регистрации, overlap-наборы, подписка на информацию о статусе канала и т.д. Полное описание параметров general sip.conf описан в статье . Ниже приведен сконфигурированный мною sip.conf для сервера Asterisk с комментариями:

Context=default ;По-умолчанию назначаем неиспользуемый контекст для исходящих вызовов allowguest=no ;Запрещаем гостевые (без аутентификации) подключения match_auth_username=no ;Запрещаем использование поля "username" вместо "from" allowoverlap=no ;Запрещаем набор по одной цифре;allowtransfer=no ;Запрещаем использование переадресации realm=CUCM11.5(1)SU3 ;Используем свое доменное имя сервера (скрываем что Asterisk) ;domainsasrealm=no ;recordonfeature=automixmon bindport=9050 ;Меняем порт SIP сигнализации udpbindaddr=0.0.0.0 ;Адрес UDP по-умолчанию tcpenable=yes ;Включаем поддержку TCP (вдруг у вас есть Avaya) tcpbindaddr=0.0.0.0 ;Адрес TCP по-умолчанию;tlsenable=no ;tlsbindaddr=0.0.0.0 ;tcpauthtimeout = 30 ;tcpauthlimit = 100 ;websocket_enabled = true ;websocket_write_timeout = 100 transport=udp ;Транспорт по-умолчанию srvlookup=yes ;Разрешаем осуществлять вызовы по DNS-именам;pedantic=yes ;tos_sip=cs3 ;tos_audio=ef ;tos_video=af41 ;tos_text=af41 ;cos_sip=3 ;cos_audio=5 ;cos_video=4 ;cos_text=3 ;maxexpiry=3600 ;minexpiry=60 ;defaultexpiry=120 ;submaxexpiry=3600 ;subminexpiry=60 ;mwiexpiry=3600 ;maxforwards=70 qualifyfreq=60 ;Устанавливаем проверку доступности хоста в 60 секунд;qualifygap=100 ;qualifypeers=1 ;keepalive=60 ;notifymimetype=text/plain ;buggymwi=no ;mwi_from=asterisk ;vmexten=voicemail ;preferred_codec_only=yes disallow=all ;Запрещаем все кодеки allow=alaw ;Разрешаем Alaw allow=ulaw ;Разрешаем Ulaw ;autoframing=yes ;mohinterpret=default ;mohsuggest=default ;parkinglot=plaza language=ru ;Делаем русский язык в системе по-умолчанию tonezone=ru ;Определяем глобальную тонзону в Ru relaxdtmf=yes ;Включим распознавание плохо распознаваемых DTMF сигналов;trustrpid = no ;sendrpid = yes rpid_update=yes ;Немедленное оповещение встречного сервера об изменениях состоянии линии;trust_id_outbound = no ;prematuremedia=no ;progressinband=no callerid=CUCM11.5(1)SU3 ;Если у нас где-то не установлен CallerID - делаем его символьным useragent=Cisco-SIPGateway/IOS-12.x ;А в качестве PBX у нас Cisco-SIPGateway ;promiscredir = no ;usereqphone = no dtmfmode=rfc2833 ;Устанавливаем тон нажатия кнопок на телефонном аппарате;compactheaders = yes videosupport=yes ;Включаем поддержку видео-вызова;textsupport=no maxcallbitrate=2048 ;Максимальный битрейт видеосвязи authfailureevents=yes ;Устанавливаем статус Peer, если он не может авторизоваться=rejected alwaysauthreject=yes ;Если запрос аутентификации был отклонен, то в ответе НЕ будет написано, что юзер введен неверно, защита перебора имен пользователей auth_options_requests=yes ;Требуем авторизацию при посылках OPTION и INVITE ;accept_outofcall_message = no ;outofcall_message_context = messages auth_message_requests=yes ;Включаем аутентификацию запросов MESSAGE ;g726nonstandard = yes ;outboundproxy=proxy.provider.domain:8080 ;supportpath=yes ;rtsavepath=yes ;matchexternaddrlocally = yes ;dynamic_exclude_static = yes ;contactdeny=0.0.0.0/0.0.0.0 ;contactpermit=172.16.0.0/255.255.0.0 ;contactacl=named_acl_example ;rtp_engine=asterisk ;regcontext=sipregistrations regextenonqualify=yes ;Если включено quality для пира и он выпадает, то * убивает этот экстеншен из regcontext ;legacy_useroption_parsing=yes ;send_diversion=no ;shrinkcallerid=yes ;use_q850_reason = no ;refer_addheaders=yes autocreatepeer=no ;Отключаем регистрацию UAC без аутентификации t1min=200 ;Минимальная задержка прохождения сообщений до хоста и обратно;timert1=500 ;timerb=32000 rtptimeout=600 ;Прерываем вызов если нет активности RTP медиапотоков через 600 секунд rtpholdtimeout=300 ;Прерываем вызов если нет активности RTP медиапотоков в режиме Hold через 300 секунд;rtpkeepalive= ;session-timers=originate ;session-expires=600 ;session-minse=90 ;session-refresher=uac ;sipdebug = yes ;recordhistory=yes ;dumphistory=yes ;allowsubscribe=no ;subscribecontext = default ;notifyringing = no ;notifyhold = yes ;notifycid = yes callcounter=yes ;Активируем счетчик вызовов t38pt_udptl=yes ;Включаем поддержку T.38 c FEC коррекцией ошибок faxdetect=yes ;Включаем определение CNG и T.38 nat=auto_force_rport,auto_comedia ;Находим Nat автоматически и медиаданные на порт с котрого Asterisk их получил а не то что получил в SDP ;media_address = 172.16.42.1 ;subscribe_network_change_event = yes ;icesupport = yes directmedia=no ;Направляем RTP-трафик напрямую между пирами, минуя Asterisk ;directrtpsetup=yes ;directmediadeny=0.0.0.0/0 ;directmediapermit=172.16.0.0/16 ;directmediaacl=acl_example ;ignoresdpversion=yes sdpsession=SIP Call ;Меняем имя SDP сессии sdpowner=CiscoSystemsSIP-GW-UserAgent ;Меняем поля пользователя в SDP owner string ;encryption=no ;encryption_taglen=80 ;avpf=yes ;force_avp=yes ;rtcachefriends=yes ;rtsavesysname=yes ;rtupdate=yes ;rtautoclear=yes ;ignoreregexpire=yes ;domain=customer.com,customer-context ;allowexternaldomains=no ;allowexternaldomains=no ;fromdomain=mydomain.tld ;snom_aoc_enabled = yes jbenable=yes ;Активируем использование RTP буфера для компенсации задержек;jbforce = no jbmaxsize=200 ;Устанавливаем максимальный размер RTP буфера 200 мс;jbresyncthreshold = 1000 ;jbimpl = fixed ;jbtargetextra = 40 ;jblog = no

3. Используем нестандартные порт IAX.

Для этого в файле /etc/asterisk/iax.conf в секции меняем параметр bindport=4569 на параметр bindport=9069

4. Запуск Asterisk должен производиться от другого пользователя (не root). О том как это сделать написано в .

5. Задать разрешенные IP адреса или сети для SIP Extensions.

deny=0.0.0.0/0.0.0.0 ;Запрещаем всё permit=10.0.0.0/255.0.0.0 ;Разрешаем известное permit=172.20.0.0/255.255.0.0 ;Разрешаем известное permit=192.168.0.0/16 ;Разрешаем известное

6. Устанавливаем лимит одновременных звонков.

call-limit=2 ;Устанавливаем значение в 2, чтобы пользователь мог сделать transfer

7. Устанавливаем различные правила исходящей маршрутизации для каждого пользователя.

Необходимо убрать все маршруты, используемые по-умолчанию и назначить свои собственные с разграничением на контексты:

  • Локальные наборы
  • Местные вызовы
  • Зоновые вызовы
  • Междугородние вызовы
  • Международные вызовы

Полный перечень кодов ABC, DEF можно взять с официального ресурса Россвязи .
Для маршрута по-умолчанию сделать

Exten => _X.,1,Hangup()

8.

9.

10. Все телефонные устройства выводим в отдельный Voice VLAN. Тут надо напрячь сетевиков.

11. Особое внимание уделяем международному направлению 8-10.

Устанавливаем только используемые в организации направления и по мере необходимости их добавляем (расширяем). Также делаем оповещение на почту если пользователь или злоумышленник воспользовался неизвестным международным направлением и устанавливаем лимит на каждое соединение и на одновременное число вызовов. Готовое решение по защите направления 8-10 описано в статье.

12. Отключить неиспользуемые каналы и сервисы.

Например, если вы не используете протокол MGCP или Skinny, отключайте эти модули в файле /etc/asterisk/modules.conf :

Noload => pbx_gtkconsole.so noload => chan_alsa.so noload => chan_console.so noload => res_ari.so noload => chan_dahdi.so noload => codec_dahdi.so noload => res_ari_device_states.so noload => res_ari_applications.so noload => res_ari_channels.so noload => res_ari_events.so noload => res_ari_playbacks.so noload => res_ari_endpoints.so noload => res_ari_recordings.so noload => res_ari_bridges.so noload => res_ari_asterisk.so noload => res_ari_sounds.so noload => res_pjsip.so noload => cdr_mysql.so noload => res_phoneprov.so noload => cdr_odbc.so noload => cdr_pgsql.so ;============================ ; PBX -- noload => pbx_ael.so ; Channels -- noload => chan_mgcp.so noload => chan_skinny.so noload => chan_unistim.so noload => chan_pjsip.so noload => chan_modem.so noload => chan_modem_aopen.so noload => chan_modem_bestdata.so noload => chan_modem_i4l.so noload => chan_alsa.so noload => chan_oss.so ; Codecs -- noload => codec_lpc10.so ; Formats -- noload => format_au.so noload => format_gsm.so noload => format_h263.so noload => format_ilbc.so noload => format_jpeg.so ; Applications -- noload => app_image.so noload => app_zapateller.so noload => app_zapbarge.so noload => app_zapscan.so noload => res_config_ldap.so

13. Ограничиваем удаленный доступ к IP-АТС при помощи Firewall.

Если вы планируете предоставлять удалённый доступ для авторизованных сотрудников, лучше всего организовать его при помощи VPN сервера (например, Open VPN).

14. Устанавливаем ограниченные права на каталоги.

Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.

Сейчас очень часто приходится сталкиваться с различным родом атак на Asterisk и аналоги. Неверная настройка и незнание простых правил влекут за собой финансовые потери для предприятия, которое использует PBX Asterisk .

В данной статье мы рассмотрим первоначальные механизмы безопасности Asterisk 13 после установки и не будем рассматривать механизмы безопасности Linux. Ниже будет описан ряд правил, которые помогут обезопасить вашу систему:

1. Устойчивые к взлому пароли и логины на всех сетевых устройствах (Asterisk, IP-телефоны, VoIP-шлюзы).

Пароли SIP-аккаунтов, администраторов, менеджеров Asterisk и на сетевых устройствах должны состоять не менее чем из 13 символов (буквы, цифры, спецсимволы, смена регистра). Не использовать логины в системе такие как admin , administrator , manager и т.д.

2. Правильная настройка SIP в Asterisk - sip.conf.

Для защиты от сканеров следует изменить стандартный порт SIP, запретить гостевые вызовы и регистрации, overlap-наборы, подписка на информацию о статусе канала и т.д. Полное описание параметров general sip.conf описан в статье . Ниже приведен сконфигурированный мною sip.conf для сервера Asterisk с комментариями:
context=default ;По-умолчанию назначаем неиспользуемый контекст для исходящих вызовов allowguest=no ;Запрещаем гостевые (без аутентификации) подключения match_auth_username=no ;Запрещаем использование поля "username" вместо "from" allowoverlap=no ;Запрещаем набор по одной цифре;allowtransfer=no ;Запрещаем использование переадресации realm=CUCM11.5(1)SU3 ;Используем свое доменное имя сервера (скрываем что Asterisk) ;domainsasrealm=no ;recordonfeature=automixmon bindport=9050 ;Меняем порт SIP сигнализации udpbindaddr=0.0.0.0 ;Адрес UDP по-умолчанию tcpenable=yes ;Включаем поддержку TCP (вдруг у вас есть Avaya) tcpbindaddr=0.0.0.0 ;Адрес TCP по-умолчанию;tlsenable=no ;tlsbindaddr=0.0.0.0 ;tcpauthtimeout = 30 ;tcpauthlimit = 100 ;websocket_enabled = true ;websocket_write_timeout = 100 transport=udp ;Транспорт по-умолчанию srvlookup=yes ;Разрешаем осуществлять вызовы по DNS-именам;pedantic=yes ;tos_sip=cs3 ;tos_audio=ef ;tos_video=af41 ;tos_text=af41 ;cos_sip=3 ;cos_audio=5 ;cos_video=4 ;cos_text=3 ;maxexpiry=3600 ;minexpiry=60 ;defaultexpiry=120 ;submaxexpiry=3600 ;subminexpiry=60 ;mwiexpiry=3600 ;maxforwards=70 qualifyfreq=60 ;Устанавливаем проверку доступности хоста в 60 секунд;qualifygap=100 ;qualifypeers=1 ;keepalive=60 ;notifymimetype=text/plain ;buggymwi=no ;mwi_from=asterisk ;vmexten=voicemail ;preferred_codec_only=yes disallow=all ;Запрещаем все кодеки allow=alaw ;Разрешаем Alaw allow=ulaw ;Разрешаем Ulaw ;autoframing=yes ;mohinterpret=default ;mohsuggest=default ;parkinglot=plaza language=ru ;Делаем русский язык в системе по-умолчанию tonezone=ru ;Определяем глобальную тонзону в Ru relaxdtmf=yes ;Включим распознавание плохо распознаваемых DTMF сигналов;trustrpid = no ;sendrpid = yes rpid_update=yes ;Немедленное оповещение встречного сервера об изменениях состоянии линии;trust_id_outbound = no ;prematuremedia=no ;progressinband=no callerid=CUCM11.5(1)SU3 ;Если у нас где-то не установлен CallerID - делаем его символьным useragent=Cisco-SIPGateway/IOS-12.x ;А в качестве PBX у нас Cisco-SIPGateway ;promiscredir = no ;usereqphone = no dtmfmode=rfc2833 ;Устанавливаем тон нажатия кнопок на телефонном аппарате;compactheaders = yes videosupport=yes ;Включаем поддержку видео-вызова;textsupport=no maxcallbitrate=2048 ;Максимальный битрейт видеосвязи authfailureevents=yes ;Устанавливаем статус Peer, если он не может авторизоваться=rejected alwaysauthreject=yes ;Если запрос аутентификации был отклонен, то в ответе НЕ будет написано, что юзер введен неверно, защита перебора имен пользователей auth_options_requests=yes ;Требуем авторизацию при посылках OPTION и INVITE ;accept_outofcall_message = no ;outofcall_message_context = messages auth_message_requests=yes ;Включаем аутентификацию запросов MESSAGE ;g726nonstandard = yes ;outboundproxy=proxy.provider.domain:8080 ;supportpath=yes ;rtsavepath=yes ;matchexternaddrlocally = yes ;dynamic_exclude_static = yes ;contactdeny=0.0.0.0/0.0.0.0 ;contactpermit=172.16.0.0/255.255.0.0 ;contactacl=named_acl_example ;rtp_engine=asterisk ;regcontext=sipregistrations regextenonqualify=yes ;Если включено quality для пира и он выпадает, то * убивает этот экстеншен из regcontext ;legacy_useroption_parsing=yes ;send_diversion=no ;shrinkcallerid=yes ;use_q850_reason = no ;refer_addheaders=yes autocreatepeer=no ;Отключаем регистрацию UAC без аутентификации t1min=200 ;Минимальная задержка прохождения сообщений до хоста и обратно;timert1=500 ;timerb=32000 rtptimeout=600 ;Прерываем вызов если нет активности RTP медиапотоков через 600 секунд rtpholdtimeout=300 ;Прерываем вызов если нет активности RTP медиапотоков в режиме Hold через 300 секунд;rtpkeepalive= ;session-timers=originate ;session-expires=600 ;session-minse=90 ;session-refresher=uac ;sipdebug = yes ;recordhistory=yes ;dumphistory=yes ;allowsubscribe=no ;subscribecontext = default ;notifyringing = no ;notifyhold = yes ;notifycid = yes callcounter=yes ;Активируем счетчик вызовов t38pt_udptl=yes ;Включаем поддержку T.38 c FEC коррекцией ошибок faxdetect=yes ;Включаем определение CNG и T.38 nat=auto_force_rport,auto_comedia ;Находим Nat автоматически и медиаданные на порт с котрого Asterisk их получил а не то что получил в SDP ;media_address = 172.16.42.1 ;subscribe_network_change_event = yes ;icesupport = yes directmedia=no ;Направляем RTP-трафик напрямую между пирами, минуя Asterisk ;directrtpsetup=yes ;directmediadeny=0.0.0.0/0 ;directmediapermit=172.16.0.0/16 ;directmediaacl=acl_example ;ignoresdpversion=yes sdpsession=SIP Call ;Меняем имя SDP сессии sdpowner=CiscoSystemsSIP-GW-UserAgent ;Меняем поля пользователя в SDP owner string ;encryption=no ;encryption_taglen=80 ;avpf=yes ;force_avp=yes ;rtcachefriends=yes ;rtsavesysname=yes ;rtupdate=yes ;rtautoclear=yes ;ignoreregexpire=yes ;domain=customer.com,customer-context ;allowexternaldomains=no ;allowexternaldomains=no ;fromdomain=mydomain.tld ;snom_aoc_enabled = yes jbenable=yes ;Активируем использование RTP буфера для компенсации задержек;jbforce = no jbmaxsize=200 ;Устанавливаем максимальный размер RTP буфера 200 мс;jbresyncthreshold = 1000 ;jbimpl = fixed ;jbtargetextra = 40 ;jblog = no

3. Используем нестандартные порт IAX.

Для этого в файле /etc/asterisk/iax.conf в секции меняем параметр bindport=4569 на параметр bindport=9069

4. Запуск Asterisk должен производиться от другого пользователя (не root). О том как это сделать написано в статье .

5. Задать разрешенные IP адреса или сети для SIP Extensions.

deny=0.0.0.0/0.0.0.0 ;Запрещаем всё permit=10.0.0.0/255.0.0.0 ;Разрешаем известное permit=172.20.0.0/255.255.0.0 ;Разрешаем известное permit=192.168.0.0/16 ;Разрешаем известное

6. Устанавливаем лимит одновременных звонков.

call-limit=2 ;Устанавливаем значение в 2, чтобы пользователь мог сделать transfer

7. Устанавливаем различные правила исходящей маршрутизации для каждого пользователя.

Необходимо убрать все маршруты, используемые по-умолчанию и назначить свои собственные с разграничением на контексты:

  • Локальные наборы
  • Местные вызовы
  • Зоновые вызовы
  • Междугородние вызовы
  • Международные вызовы
Полный перечень кодов ABC, DEF можно взять с официального ресурса Россвязи .
Для маршрута по-умолчанию сделать exten => _X.,1,Hangup()

8. Используем IPtables

9. Используем Fail2Ban

10. Все телефонные устройства выводим в отдельный Voice VLAN. Тут надо напрячь сетевиков.

11. Особое внимание уделяем международному направлению 8-10.

Устанавливаем только используемые в организации направления и по мере необходимости их добавляем (расширяем). Также делаем оповещение на почту если пользователь или злоумышленник воспользовался неизвестным международным направлением и устанавливаем лимит на каждое соединение и на одновременное число вызовов. Готовое решение по защите направления 8-10 описано в статье.

12. Отключить неиспользуемые каналы и сервисы.

Например, если вы не используете протокол MGCP или Skinny , отключайте эти модули в файле /etc/asterisk/modules.conf :
noload => pbx_gtkconsole.so noload => chan_alsa.so noload => chan_console.so noload => res_ari.so noload => chan_dahdi.so noload => codec_dahdi.so noload => res_ari_device_states.so noload => res_ari_applications.so noload => res_ari_channels.so noload => res_ari_events.so noload => res_ari_playbacks.so noload => res_ari_endpoints.so noload => res_ari_recordings.so noload => res_ari_bridges.so noload => res_ari_asterisk.so noload => res_ari_sounds.so noload => res_pjsip.so noload => cdr_mysql.so noload => res_phoneprov.so noload => cdr_odbc.so noload => cdr_pgsql.so ;============================ ; PBX -- noload => pbx_ael.so ; Channels -- noload => chan_mgcp.so noload => chan_skinny.so noload => chan_unistim.so noload => chan_pjsip.so noload => chan_modem.so noload => chan_modem_aopen.so noload => chan_modem_bestdata.so noload => chan_modem_i4l.so noload => chan_alsa.so noload => chan_oss.so ; Codecs -- noload => codec_lpc10.so ; Formats -- noload => format_au.so noload => format_gsm.so noload => format_h263.so noload => format_ilbc.so noload => format_jpeg.so ; Applications -- noload => app_image.so noload => app_zapateller.so noload => app_zapbarge.so noload => app_zapscan.so noload => res_config_ldap.so

13. Ограничиваем удаленный доступ к IP-АТС при помощи Firewall.

Если вы планируете предоставлять удалённый доступ для авторизованных сотрудников, лучше всего организовать его при помощи VPN сервера (например, Open VPN).

В сегодняшней статье поговорим о том, как защитить IP-АТС от несанкционированного доступа и дадим несколько простых советов, следуя которым, можно существенно повысить безопасность вашей телефонной станции. Примеры, которые будут приведены в данной статье, относятся к IP-АТС на базе Asterisk, однако многие из них распространяются на все без исключения VoIP-АТС.

Для начала, давайте разберёмся, чем же грозят “дыры” в безопасности и какие последствия грозят бизнесу, если злоумышленник получит доступ к IP-АТС.

Угроза взлома

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

Как правило, целями злоумышленников становятся IP-АТС, которые доступны из публичной сети. Используя различные SIP-сканнеры и исследуя системные уязвимости, они выбирают места для атаки. Дефолтные (default) пароли, открытые SIP-порты, неправильно управляемый firewall или его отсутствие - всё это может стать причиной несанкционированного доступа.

К счастью, все эти уязвимости можно устранить и причём совершенно бесплатно.

Простые шаги к повышению безопасности

Как видите, защитить IP-АТС от внешних вторжений не так уж трудно, следуя предложенным советам, можно достаточно серьёзно повысить безопасность и надёжность системы.

Как Вам известно, 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 $ # # 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 .*\<.>

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

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

ПравилафильтрацииможнопрописатьвфайлеВотобразецсодержимогоэтогофайла

Настройкаизоляторовдля

Теперьнамнеобходимосоздатьописаниятакназываемыхизоляторовдлятепривязатьнашифильтрыкобъяснитьвкакихфайлахэтистрокиискатьичтопотомделать

Дляэтогооткройтефайл

  1. УбедитесьчтонетилиневключенодругихправилсвязанныхсДляэтогодостаточносделатьпоискпофайлупоименибезкавычекиубедитьсячтоеслитакиеправилаестьдлякаждогоизнихсвойствоустановленов
  2. ВслучаеесливерсияменьшейлибоВынехотитеиспользоватьлогииспользованиелоговкрайнерекомендуетсятоВамдостаточнобудетсоздатьтолькоодноправилоВпротивномслучаеВампонадобитсясоздатьправила

Правило№

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

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

Правило№

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

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

Запуск

Теперьнеобходимозапуститьилиперезапуститьиеслиэтонеобходимонапримерещенебылзапущен

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

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

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

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

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

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

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

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

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

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

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

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

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

  4. ЗапуститеклиентобязательнонессамогосервераасдругогокомпьютераиуказавневерныеданныедляавторизацииадресдляподключениядолженбытьадресомсерверапопробуйтеавторизоватьсяразаилиболееколичествоавторизацийпослекоторыхадресблокируетсязадаетсявпараметредлякаждогоправилаотдельноВкачестветестовогоклиентаможноиспользоватьпрограммукотораяработаетизкоманднойстроки
  5. ЕслиВызапустиликлиентастогожекомпьютераскоторогоподключалиськсерверуиеслибылинастроеныправильнотонаданныймоментВашадресзаблокированиВынеможетеподключитьсяксерверусэтогокомпьютерапроверьтеэтоПодключитеськсдругогокомпьютераилилокальноипродолжайтевыполнениекоманд
  6. Запуститекомандувида

    длявключенногоправилаиубедитесьчтоадресскоторогоподключалсяклиентнаходитсявспискезаблокированных

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

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

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

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

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

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

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

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

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

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

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

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

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

ТоестьВыможетепрописыватькакподсетитакиотдельныеадресавданномслучаевбелыйсписокпопадаюти

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

ВовремяпроверкиправильностинастройкиВынеоднократнозапускаликлиентадлятестированияработыпоблокировкебудущихатакизинтернетаИвпроцессепоследующейработыВамвозможнотакжепонадобитсявремяотвременипроизводитьдействияпоследствиямикоторыхможетбытьблокировкасостороныХотелосьбынедожидатьсякогдасоизволитразблокироватьсамаэтоможетбытьдовольнодолгопосколькупараметрможновыставитьхотьначасхотьнаденьхотьнагод

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

  1. ВнестиадресвправилахвсписокНоиногдаэтоможетбытьнежелательночтобынапримерпроизводитьпериодическоетестированиеработы
  2. ОбычновремяэтодлительностьинтервалавсекундахзакотороесобытиеатакаподборпаролядолжноповторитьсяразпослечегобанвступитвсилунамногоменьшечемэтовремябанавсекундахпоистечениикоторогоадресудаляетсяизсписказаблокированныхНапримервыставляетсявминутачасЛибочасаденьилидажебольшеИтакдалееПоэтомуимеетсмыслсделатьпаузудлительностьюнеменеечемсмоментапоследнеготестированияизабаниванияВашегоадресапослечегоперезагрузитьсервисПриперезагрузкесервисавсеблокировкианнулируютсяОднакоприпоследующейзагрузкелогианализируютсясноваиесливлогахвтечениебылонеудачныхпопытокподключениясодногоэтотбудетсновазабаненсразупослезапуска

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

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

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

Инапоследоквместоперезагрузкиспомощьюможновыполнитьследующуюкоманду

Ссылкинаисточники

Материалыповзятывчастностисофициальногосайта регэкспыиправиладляастерискавзятыизраздела