Настройка Fail2Ban для Asterisk
Используя Asterisk внутри организации без проброса портов в Интернет обычно хватает настройки брендмауэра. Что делать если вы хотите чтобы сотрудники подключались удаленно? Правильно, открываете порт 5060 наружу во всеобщий доступ. Буквально через несколько минут после этого в логах можно лицезреть кучу попыток подбора пароля. Защититься от этого поможет Fail2Ban. Рассмотрим как происходит настройка Fail2Ban для Asterisk.
Fail2Ban – это ПО предназначено для защиты системы от brute-force атак. На основе журналов программ fail2ban блокирует доступ на определенное время для зловредного IP адреса. Если этот адрес и после разблокировки продолжит пакостить, его можно заблокировать навсегда. Вместе с программой устанавливается множество фильтров (не только для Asterisk) для популярных программ. Среди них: apache, dovecot, drupal, exim, freeswitch, nginx, postfix и многие другие. Если для вашей программы нет готового фильтра, его можно написать самостоятельно.
Настраивать fail2ban я буду на Asterisk 18 установленной в ОС Centos 8. Перед началом установки необходимо подключить EPEL репозиторий. Он у вас скорее всего уже подключен но проверить не помешает.
Подключение репозитория EPEL
dnf install epel-release
Установка Fail2Ban
Устанавливать буду в Centos 8 с помощью менеджера пакетов dnf. В предыдущих версиях Centos используйте менеджер пакетов yum
dnf install fail2ban
После установки в каталоге /etc/fail2ban будет такая структура конфигурационных файлов
- /etc/fail2ban/jail.conf
- /etc/fail2ban/jail.d/*.conf
- /etc/fail2ban/jail.local
- /etc/fail2ban/jail.d/*.local
Конфигурационные файлы считываются сверху вниз. Последний считанный файл имеет высший приоритет. В данном случае при существовании фалов с расширением local будут более приоритетны.
Настройка защиты Asterisk в Fail2Ban
Чтобы не изменять стандартный файл настроек jail.conf создадим jail.local с необходимыми параметрами.
Создание файла конфигурации jail.local
nano /etc/fail2ban/jail.local
Добавим в него следующие настройки
[DEFAULT]
maxretry = 4
findtime = 10
bantime = 720
action = firewallcmd-ipset
ignoreip = 127.0.0.1/8
[asterisk]
enabled = true
filter = asterisk
action = iptables-allports[name=asterisk, protocol=all]
logpath = /var/log/asterisk/fail2ban
Секция [DEFAULT] – описывает общие параметры для всех jail (под каждый сервис своя тюрьма :)). Опишу указанные параметры
- maxretry – количество неудачных запросов в течение времени (параметр findtime) после которых IP адрес будет заблокирован
- findtime – промежуток времени за который будут считаться неудачные запросы, я указал 10 секунд для теста. Обычно ставят 300 и больше
- bantime – время на которое будет заблокирован IP превысивший указанные выше параметры
- action – действие которое будет выполняться при достижении параметра maxretry
- ignoreip – список IP адресов которые не будут блокироваться (т.н. белый список)
По умолчанию все время указывается в секундах, но можно указать конкретное время: 1m– 1 минута, 3h – 3 часа, 2d – 2 дня
Далее следуют секции с описанием конкретных jail. Их может быть несколько. Рассмотрим параметры тюрьмы [asterisk]
- enabled – состояние секции (вкл/выкл)
- filter – название фильтра для поиска по регулярным выражениям. Фильтры находятся по пути /etc/fail2ban/filter.d/
- action – выполняемое действие при достижении лимита запросов за отведенное время
- logpath – путь к файлу с журналами в которых fail2ban будет искать злодеев пытающихся взломать вашу систему
В конфиге я прописал что если в течение 10 секунд будет 4 и более неудачных запроса (из тех что фильтруются), то адрес будет заблокирован на 720 секунд. Подсеть 127.0.0.1/8 находится в белом списке. Для фильтрации я указал отдельный файл журнала для наглядности.
Добавление файла журнала Asterisk для мониторинга fail2ban
Я добавляю еще один файл для логирования событий Asterisk, в рабочей среде можете использовать файлы журналов которые уже настроены по умолчанию, например messages
Откроем файл /etc/asterisk/logger.conf
nano /etc/asterisk/logger.conf
В секцию [logfiles] добавляем строку
fail2ban => notice
Перезапустим asterisk
systemctl restart asterisk.service
После перезапуска сервиса будет создан новый файл по пути /var/log/asterisk/fail2ban куда будут сохранятся все события с детализацией уровня notice
Запуск сервиса fail2ban
Запустим сервис для проверки что все установлено верно и запускается
systemctl start fail2ban
Добавление fail2ban в автозагрузку
После того как мы убедились что все запускается добавим сервис в автозагрузку при старте системы
systemctl enable fail2ban
Просмотр текущего статуса
Проверить текущее состояние сервиса fail2ban можно так
systemctl status fail2ban
Мониторинг работы fail2ban
Для мониторинга активности fail2ban используется утитилита fail2ban-client. Введите fail2ban-client в консоли чтобы посмотреть список доступных параметров.
Просмотр статуса всех настроенных jail
fail2ban-client status
Увидеть более детальную статистику по конкретной тюрьме можно указав её название
fail2ban-client status asterisk
В случае изменения настроек в файл jail.local их необходимо перечитать, делается это командой
fail2ban-client reload
Проверка работы
Проверим что все настройки верны и fail2ban блокирует подборку паролей. Для этого я запущу софтфон и намеренно буду вводить неправильный пароль. Спустя некоторое время меня забанили, что называется доигрался 🙂
fail2ban-client status asterisk
Давайте окунемся в гущу событий и посмотрим лог программы fail2ban
cat /var/log/fail2ban.log
По записям видно что мена заблокировали в 14:44 и разблокировали 14:56. Ровно 12 минут или 720 секунд, как раз то что мы указывали в файле jail.local
Снятие блокировки
Если нет времени ждать, то можно снять блокировку вручную
fail2ban-client set asterisk unbanip 172.16.169.161
Рассмотренная в статье настройка Fail2Ban для Asterisk не представляет особой сложности. Я рассмотрел основные моменты, но как всегда есть возможности для более тонкой настройки. Инструмент очень обширный, читайте man там много интересного :). Спасибо за внимание и до новых встреч.
Рекомендую к просмотру видео по настройке Fail2Ban для Asterisk
Спасибо за мануал.
В конце статьи при разблокировке нужно указать jail – asterisk, т.е. вместо sshd нужно ставить asterisk
fail2ban-client set asterisk unbanip 172.16.169.161
Спасибо, поправил опечатку