fail2ban + Asterisk 1.8 баним правильно
В связи с открытием нового филиала в маленьком городе Екатеринбурге,потребовалось настроить связь с главным офисом, для этого на платформе Intel Atom были подняты сервисы: Samba4 как PDC,Squid,Asterisk. Так как это небольшая заметка, то остановимся на конкретном вопросе защиты Asterisk'a.
Из исходников был поставлен asterisk 1.8.5, который собрался без проблем. Понравилось то, что в отличии от версии 1.6, в версии 1.8 в исходники входит asterisk-addons, что немного уменьшает количество телодвижений при установке. Особых отличий в настройке для 1.8 не было замечено, конфиги (sip.conf,logger.conf,extensions.conf) из asterisk 1.6 перенеслись без проблем. Но вот на этапе защиты от перебора паролей возникли некоторые сложности!
Для защиты от перебора использовался fail2ban. В интернете полно материалов по защите * через fail2ban. Вариант же, который ранее использовался для 1.6 версии, не подошел, при тестировании попытки перебора не блокировались. Поэтому первым делом был задан вопрос гуглу вида: «Asterisk 1.8 fail2ban», и был найден такой вариант: http://pbxinaflash.net/source/fail2ban/asterisk18.conf, который тоже оказался НЕРАБОЧИМ. Тогда решил вернуться к своему варианту и отлавливить ошибки.Вариант для asterisk 1.6 был такой (авторство и комментарии удалены для краткости):
/etc/fail2ban/filter.d/asterisk.conf
# Fail2Ban configuration file
failregex = NOTICE.* .*: Registration from '.* failed for '
NOTICE.* .*: Registration from '.*' failed for '
NOTICE.* .*: Registration from '.*' failed for '
NOTICE.* .*: Registration from '.*' failed for '
NOTICE.* failed to authenticate as '.*'$
NOTICE.* .*: No registration for peer '.*' \(from \)
NOTICE.* .*: Host failed MD5 authentication for '.*' (.*)
NOTICE.* .*: Failed to authenticate user .*@.*
Пробуем пару раз подцепить к * с неправильным паролем и сразу смотрим лог , чтобы понять, как должна правильна выглядеть строка failregex
/var/log/asterisk/messages
[2011-08-11 10:31:32] NOTICE[994] chan_sip.c: Registration from '604
Для сравнения regex файла для fail2ban и messages можно запустить команду:
# fail2ban-regex /var/log/asterisk/messages /etc/fail2ban/filter.d/asterisk.conf
И в выводе убедиться, что нет совпадений:
|- Regular expressions:| [1] NOTICE.* .*: Registration from '.* failed for '192.168.2.26:5060' - Wrong password`- Number of matches:[1] 0 match(es)
Также можно посмотреть в логах fail2ban
# tail -20 /var/log/fail2ban.log
No 'host' group in 'NOTICE.* .*: Registration from '.* failed for '192.168.2.26:5060' - Wrong password'Cannot remove regular expression. Index 0 is not valid
Если внимательно проанализировать и сравнить с выводом 1.6 версии, то видно, что добавилась запись порта, на который идет обращение от SIP клиента. Т.е. необходимо немного подкорректировать failregex, что было успешно сделано с помощью зрительно зала chel.lug на conference.jabber.ru. В итоге файл приобрел следующий вид:
failregex = NOTICE.* .*: Registration from '.* failed for '
NOTICE.* .*: Registration from '.*' failed for '
NOTICE.* .*: Registration from '.*' failed for '
NOTICE.* .*: Registration from '.*' failed for '
NOTICE.* failed to authenticate as '.*'$
NOTICE.* .*: No registration for peer '.*' \(from \)
NOTICE.* .*: Host failed MD5 authentication for '.*' (.*)
NOTICE.* .*: Failed to authenticate user .*@.*
Как видно, после
П.C. маленький бонус как снять бан, пример для ssh # iptables -D fail2ban-ssh 1