Сейчас очень часто приходится сталкиваться с различным родом атак на 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 является приложением (сервером) для 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. ОбычновремяэтодлительностьинтервалавсекундахзакотороесобытиеатакаподборпаролядолжноповторитьсяразпослечегобанвступитвсилунамногоменьшечемэтовремябанавсекундахпоистечениикоторогоадресудаляетсяизсписказаблокированныхНапримервыставляетсявминутачасЛибочасаденьилидажебольшеИтакдалееПоэтомуимеетсмыслсделатьпаузудлительностьюнеменеечемсмоментапоследнеготестированияизабаниванияВашегоадресапослечегоперезагрузитьсервисПриперезагрузкесервисавсеблокировкианнулируютсяОднакоприпоследующейзагрузкелогианализируютсясноваиесливлогахвтечениебылонеудачныхпопытокподключениясодногоэтотбудетсновазабаненсразупослезапуска

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

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

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

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

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

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

Дата: 09:56 28.07.2018

В интернете гуляет много историй о взломах астериска и последующей кары от оператора. Где-то лежала байка о некой маленькой компании в Австралии, которую угораздило залететь на $15000-20000. Думаю никто не хочет оказаться в подобной ситуации. Гораздо лучше, не дожидаясь беды, провести некоторый комплекс мероприятий, который значительно сократит количество вариантов взлома и минимизирует опасность.

Нестандартный порт вместо 5060

Если имеется техническая возможность - ОБЯЗАТЕЛЬНО меняйте стандартный порт 5060 на любой другой. Чем он будет больше непохож на стандартный - тем лучше. Злоумышленники очень быстро найдут ваш астериск обычным сканированием портов по диапазону адресов. Это произойдет очень быстро - первые попытки подбора пароля у меня обнаружились уже через 3 дня после вывода asterisk в интернет.
Настройка порта производится в файле sip.conf в секции :

Bindport=5060 => bindport=5172

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

Настраиваем файрвол

Запрещаем подключаться к порту Asterisk извне - это отрубит возможность подбора паролей. Однако, некоторые провайдеры SIP-телефонии не работают, если не могут сами достучаться до вашего порта 5060 - в этом случае необходимо разрешить доступ к этому порту от сервера этого провайдера. Так однажды несколько дней думал, почему нет связи с Билайном, потом открыл их айпи доступ к моему порту 5060 и связь появилась.

Отключаем guest-звонки

Если у вас нет необходимости принимать звонки без регистрации, обязательно выключите следующую опцию в sip.conf:
allowguest=yes => allowguest=no ; Allow or reject guest calls (default is yes)

Отключаем оповещение о неверном пароле

Практически у всех существуют аккаунты asterisk вида 100, 200, 700 и т.п. По умолчанию астериск выдает одну ошибку о неверном пароле для существующего аккаунта и другую для несуществующего аккаунта. С помощью спец. софта для подбора паролей, злоумышленник может быстро перебрать все короткие номера и подбирать пароли только к существующим аккаунтам, которые ответили «неверный пароль». Чтобы препятствовать этому, меняем опцию в sip.conf:
alwaysauthreject = no => alwaysauthreject = yes
После такой настройки, астериск будет давать одинаковый отбой для любых неверных авторизаций.

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

Любой пароль можно подобрать, вопрос только во времени. Поскольку настройка sip-устройств производится один раз и надолго, не скупитесь на сложные пароли. Для себя я использую длинные пароли с комбинациями больших и маленьких букв + цифр такого вида: secret=f64GCD74ssdZ42

ОБЯЗАТЕЛЬНО уберите все пароли совпадающие с логинами. Это - первые пароли, используемые для паролей.

Используем deny/permit для аккаунтов

Обязательный момент! Указываем для всех аккаунтов, которые не подразумевают подключение из интернета следующие строки:

Deny=0.0.0.0/0.0.0.0 permit=10.1.1.1/24 permit=10.1.2.1/24

Где 10.1.1.1,10.1.2.1 - диапазоны локальных адресов, с которых будет производится подключение. Подключения с других адресов asterisk принимать не будет.

Устанавливаем лимит звонков

Call-limit=1

Не используем default-экстеншн без необходимости

Не надо оно нам Все, что должно быть в дефолте:

Exten => _X.,1,Hangup

Не делаем одно универсальное правило для всех звонков

Скажем нет правилам вида:

Exten => _X.,1,Dial(SIP/${EXTEN}@operator)

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

;Экстренные службы exten => _0X,1, Dial(SIP/${EXTEN}@operator) exten => _0X,n, Hangup ;Москва exten => _8495XXXXXXX,1, Dial(SIP/${EXTEN}@operator) exten => _8495XXXXXXX,n, Hangup exten => _8499XXXXXXX,1, Dial(SIP/${EXTEN}@operator) exten => _8499XXXXXXX,n, Hangup exten => _XXXXXXX,1, Dial(SIP/${EXTEN}@operator) exten => _XXXXXXX,n, Hangup ;Межгород Россия/Мобильные exten => _8XXXXXXXXXX,1, Dial(SIP/${EXTEN}@operator) exten => _8XXXXXXXXXX,n, Hangup

Сейчас очень часто приходится сталкиваться с различным родом атак на 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-АТС от внешних вторжений не так уж трудно, следуя предложенным советам, можно достаточно серьёзно повысить безопасность и надёжность системы.