Возникла задача подключить к серверу с Asterisk интерфейс с реальным IP адресом. Реализация этой идеи подвергает Asterik дополнительной опасности. Одно из средств защиты — установка скрипта Fail2Ban. Fail2Ban на основе заданных шаблонов парсит логи приложений, в случае совпадения строки в логе с шаблоном, банит IP при помощи правила в Iptables.
Для начала установим пакеты iptables и fail2ban
apt-get install iptables fail2ban
Основной конфигурационный файл Fail2Ban — /etc/fail2ban/jail.conf
Добавляем в конец файла строки
[asterisk-iptables]
enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK, protocol=all]
sendmail-whois[name=ASTERISK, dest=root, sender=fail2ban@asterisk]
logpath = /var/log/asterisk/fail2ban
maxretry = 3
bantime = 259200
Здесь
- logpath — директория расположения лога, который будет парситься этим фильтром
- maxretry — максимальное количество строк в логе для единичного ip, соответствующих шаблону фильтра до бана (баним на четвертый раз)
- bantime — время, на которое баним ip
Далее шаблонами описываем сам фильтр: nano /etc/fail2ban/filter.d/asterisk.conf и приводим содержимое к следующему виду
# Fail2Ban configuration file
#
#
# $Revision: 250 $
#
[INCLUDES]
# Read common prefixes. If any customizations available -- read them from
# common.local
#before = common.conf
[Definition]
#_daemon = asterisk
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P\S+)
# Values: TEXT
#
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.* failed to authenticate as '.*'$
NOTICE.* .*: No registration for peer '.*' \(from \)
NOTICE.* .*: Host failed MD5 authentication for '.*' (.*)
NOTICE.* .*: Failed to authenticate user .*@.*
WARNING.* Ext. s: .* unknown SIP connection from .*
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
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.* failed to authenticate as '.*'$
NOTICE.* .*: No registration for peer '.*' \(from \)
NOTICE.* .*: Host failed MD5 authentication for '.*' (.*)
NOTICE.* .*: Failed to authenticate user .*@.*
WARNING.* Ext. s: .* unknown SIP connection from .*
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
Теперь нужно настроить логгер астериска, чтобы писал необходимые события в файл/var/log/asterisk/fail2ban
Открываем файл nano /etc/asterisk/logger_general_custom.conf, добавляем в секцию [logfiles] строку
fail2ban => notice,warning
Сохраняем,заходим в консоль астериска, делаем ротацию лога и перезагружаем логгер
# asterisk -r
pbx*CLI> logger rotate
pbx*CLI> logger reload
|
Теперь перезапускаем Fail2Ban
sudo /etc/init.d/fail2ban restart
|
Просмотреть статус выполнения fail2ban можно выполнив команду
fail2ban-client status asterisk-iptables
Все, теперь fail2ban будет блокировать попытки подключения и совершения звонков, подбор паролей злоумышленниками.
Отладка
Для добавления новых шаблонов потребуется отладка, для этого есть удобная утилита fail2ban-regex. Синтаксис выглядит так:
fail2ban-regex /var/log/asterisk/fail2ban "WARNING.* Ext. s: .* unknown SIP connection from .*"
Утилита выведет отчет о проверке. Так же можно на вход давать напрямую файл
fail2ban-regex /var/log/asterisk/fail2ban /etc/fail2ban/filter.d/asterisk.conf
Можно инициировать попытку звонка через asterisk c с дугой машины при помощи sipsak
sipsak -U -s sip:s@ip_asterisk:5060
Источник: http://blog.itradius.ru/?p=337 |