Установка и настройка fail2ban
Устанавливаем из портов. За собой он потянет Python, если у Вас он не установлен.
- КОД: ВЫДЕЛИТЬ ВСЁ
cd /usr/ports/security/py-fail2ban; make install clean
После установки переходим в каталог /usr/local/etc/fail2ban и приступаем к настройке.
- КОД: ВЫДЕЛИТЬ ВСЁ
cd /usr/local/etc/fail2ban
В папке находятся 2 поддиректории.
action.d – Хранятся файлы, в которых описываются действия при срабатывании правил.
filter.d – Хранятся шаблоны, использующие в основном регулярные выражения, которые служат для обнаружения атак, попытки подбора паролей, и т.д.
А так же 2 файла:
fail2ban.conf - Файл содержит общие настройки для демона, такие как уровень логирования и т.д.
jail.conf - Файл в котором содержится описание фильтров.
Редактируем файл jail.conf, в конец файла добавляем следующее.
- КОД: ВЫДЕЛИТЬ ВСЁ
[asterisk-pf]
enabled = true
filter = asterisk
action = pf[table=asterisk-ban]
sendmail[name=ASTERISK, dest=root, sender=fail2ban@example.com]
logpath = /var/log/asterisk/messages
maxretry = 5
bantime = 86400
ignoreip = 192.168.15.0/24ляем
Немного подробнее о переменных.
filter = asterisk - Название фильтра, которые будут использоваться для обнаружения совпадений.
В случае срабатывания фильтра, будут выполнены следующие действия.
action = pf[table=asterisk-ban]
sendmail[name=ASTERISK, dest=root, sender=fail2ban@example.com]
pf[table=asterisk-ban] - Будет выполнен скрипт pf.conf (в директории action.d), которому будет передана переменная table со значением asterisk-ban (Где asterisk-ban - это название таблицы в pf)
sendmail[name=ASTERISK, dest=root, sender=fail2ban@example.com] - Будет отправлено уведомление о срабатывании фильтра. (name - тема письма, dest - кому будет послано, sender - отправитель)
logpath = /var/log/asterisk/messages - Путь до лог файла asterisk
maxretry = 5 - Количество совпадений, который вызывает блокировку IP адреса
bantime = 86400 - Продолжительность (в секундах), в течение которых IP адрес будет блокирован.
ignoreip = 192.168.15.0/24 - Не проверять данные сети, IP адреса.
Создадим файл - шаблон /usr/local/etc/fail2ban/filter.d/asterisk.conf следующего содержания.
- КОД: ВЫДЕЛИТЬ ВСЁ
cat /usr/local/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 "<HOST>" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P<host>\S+)
# Values: TEXT
#
failregex = NOTICE.* .*: Registration from '.*' failed for '<HOST>' - Wrong password
NOTICE.* .*: Registration from '.*' failed for '<HOST>' - No matching peer found
NOTICE.* .*: Registration from '.*' failed for '<HOST>' - Username/auth name mismatch
NOTICE.* .*: Registration from '.*' failed for '<HOST>' - Device does not match ACL
NOTICE.* <HOST> failed to authenticate as '.*'$
NOTICE.* .*: No registration for peer '.*' \(from <HOST>\)
NOTICE.* .*: Host <HOST> failed MD5 authentication for '.*' (.*)
NOTICE.* .*: Failed to authenticate user .*@<HOST>.*
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
Далее создаем файл /usr/local/etc/fail2ban/action.d/pf.conf в котором опишем связь с pf.
- КОД: ВЫДЕЛИТЬ ВСЁ
cat /usr/local/etc/fail2ban/action.d/pf.conf
[Definition]
actionstart =
actionstop =
actioncheck =
actionban = pfctl -t <table> -Ta <ip>
actionunban = pfctl -t <table> -Td <ip>
[Init]
port = any
localhost = 127.0.0.1
Где переменную <table> мы описали в jail.conf (action = pf[table=asterisk-ban])
Asterisk
Теперь нужно немного настроить Asterisk.
- КОД: ВЫДЕЛИТЬ ВСЁ
vim /usr/local/etc/asterisk/logger.conf
И раскомментируем
- КОД: ВЫДЕЛИТЬ ВСЁ
[general]
dateformat=%F %T
Заходим в консоль asterisk и рестартуем сервис логирования
- КОД: ВЫДЕЛИТЬ ВСЁ
asterisk -rx "logger reload"
PF
Добавим блокирующее правило в pf.conf. Для примера:
- КОД: ВЫДЕЛИТЬ ВСЁ
block in log quick on $EXT_IF proto {tcp udp} from <asterisk-ban> to $EXT_IF port 5060
Запуск
Добавляем fail2ban в /etc/rc.conf.
- КОД: ВЫДЕЛИТЬ ВСЁ
echo ‘fail2ban_enable="YES"’ >> /etc/rc.conf
И запускаем
- КОД: ВЫДЕЛИТЬ ВСЁ
/usr/local/etc/rc.d/fail2ban start
Теперь можно проверить, попробовать авторизироваться на asterisk с неправильным паролем и посмотреть, что из этого получится, должно будет прийти письмо, если вы добавили эту возможность, или смотрите лог файл.
Логи fail2ban пишет в /var/log/fail2ban.log или настройте сами, куда вам удобно в /usr/local/etc/fail2ban/fail2ban.conf
Постскриптум
В папке filter.d вы можете найти много различных фильтров ко многим известным сервисам, да вы и сами можете написать их, это не так сложно.
И еще по поводу Asterisk. Помните, fail2ban не поможет Вам, если вы используете легкие пароли (123 и т.д.), используйте сложные, длинные пароли, по возможности привязывайте аккаунты к ip адресам. Только совокупность этих мер поможет вам и вашей компании не получить гигантский счет за связь.
AzureZ, спасибо за инфу!
ОтветитьУдалить