Сразу перейду к делу. Пользователями FreePBX 14 замечен крайне серьёзный баг в утилите fail2ban.

Версия fail2ban, на которой замечен баг — 0.8.14-11 и ниже. Проверить можно командой rpm -qa | grep fail2ban:

fail2ban-fpbx-0.8.14-11.sng7.noarch

Данный баг заключается в том, что после установки чистой FreePBX Distro 14 сервис fail2ban хоть и в активном статусе, однако никаких “тюрем» (jails) он не подгружает и их количество = 0.

Проверить можно командой fail2ban-client status, если Ваш сервер подвержен багу, то Вы увидите:

[root@merionlab]# fail2ban-client status
Status
|- Number of jail: 0
`- Jail list:

Это значит, что например, максимальное число попыток ввода пароля для доступа к вэб-интерфейсу FreePBX или попыток регистрации SIP-клиента с неверным паролем — не ограничено, а IP-адрес, с которого приходят эти запросы не блокируется. Естественно, что модуль Intrusion Detection во FreePBX также не будет работать.

«Тюрьмы» или jails — это такие секции в файле /etc/fail2ban/jail.local, в которых указано, логи какого сервиса необходимо мониторить, чтобы выявлять и блокировать несанкционированные попытки доступа к этому сервису, а также такие параметры как время блокировки, максимальное число попыток и действие, которое необходимо предпринять в случае выявления.

Например, вот секция [asterisk-iptables]:

[asterisk-iptables]
enabled  = true
filter = asterisk-security
action   = iptables-allports[name=SIP, protocol=all]
           sendmail[name=SIP, dest=none@yourpbx.com, sender=none@yourpbx.com]
logpath  = /var/log/asterisk/fail2ban
maxretry = 5
bantime = 1800

В ней указано, что нужно мониторить лог /var/log/asterisk/fail2ban, искать в нём 5 попыток неуспешной регистрации (например SIP телефон пытается зарегистрироваться с неверным паролем) и банить IP-адрес на 30 минут. Ну и ещё можно отправку по email настроить о данном факте.

По умолчанию, в файле /etc/fail2ban/jail.local должно быть 7 таких секций — [apache-tcpwrapper][recidive][ssh-iptables][apache-badbots][pbx-gui][asterisk-iptables][vsftpd-iptables]. В каждой указан путь к логам соответствующего сервиса.


РЕШЕНИЕ

Итак, есть два решения данной проблемы. Первое – остановить сервис fail2ban командой systemctl stop fail2ban и внести следующие изменения в файл /usr/lib/systemd/system/fail2ban.service:

[Unit]
Description=Fail2Ban Service
After=httpd.service

[Service]
Type=forking
ExecStartPre=/bin/mkdir -p /var/run/fail2ban
ExecStart=/usr/bin/fail2ban-client -x start
ExecStop=/usr/bin/fail2ban-client stop
ExecReload=/usr/bin/fail2ban-client reload
PIDFile=/var/run/fail2ban/fail2ban.pid
Restart=always

[Install]
WantedBy=default.target

Затем запустить сервсис fail2ban командой systemctl start fail2ban и сделать так, чтобы сервис включался после ребута автоматически systemctl enable fail2ban.

И вторая – обновить сам fail2ban. Для этого вводим следующие команды:

yum install sangoma-devel
yum update

Проверяем версию fail2ban после обновления — rpm -qa | grep fail2ban:

fail2ban-fpbx-0.8.14-75.sng7.noarch

После данных действий, команда fail2ban-client status должна отобразить верное количество jails и fail2ban с Intrusion Detection должны вновь встать на стражу Вашего сервера:

[root@merionlab]# fail2ban-client status
Status
|- Number of jail:      7
`- Jail list:           apache-tcpwrapper, recidive, ssh-iptables, apache-badbots, pbx-gui, asterisk-iptables, vsftpd-iptables

Чтобы случайно не заблокировать свой адрес и игнорировать любые неуспешные попытки доступа к серверу с адресов, находящихся в локальной сети или других доверенных адресов, внесите их или всю доверенную подсеть в секцию [DEFAULT] в поле ignoreip в том же файле /etc/fail2ban/jail.local