Настройка правил конфигурации
Общие настройки:
- maxretry — количество действий, которые разрешено совершить до бана.
- findtime — время в секундах, в течение которого учитывается maxretry;
- bantime — время, на которое будет блокироваться IP-адрес;
- action — действия, которое будет выполняться, если Fail2ban обнаружит активность, соответствующую критериям поиска;
- ignoreip — игнорировать защиту, если запросы приходят с перечисленных адресов.
В данном примере, если в течение 8 минут (480) будет найдено 5 строк (maxretry = 4), содержащих критерий фильтра, Fail2ban заблокирует IP-адрес, с которого идет подключение на 12 минут (720);
В секции [DEFAULT] хранятся общие настройки для всех правил. Каждую из настроек можно переопределить при конфигурировании самого правила.
Настройки jail:
[ssh] enabled = true port = ssh filter = sshd action = iptables[name=sshd, port=ssh, protocol=tcp] logpath = /var/log/auth.log maxretry = 10 findtime = 600
- ssh — название для правила;
- enabled позволяет быстро включать (true) или отключать (false) правило;
- port — порт целевого сервиса. Принимается буквенное или цифирное обозначение;
- filter — фильтр (критерий поиска), который будет использоваться для поиска подозрительных действий. По сути, это имя файла из каталога /etc/fail2ban/filter.d без .conf на конце;
- action — действие, совершаемое в случае срабатывания правила. В квадратных скобках указаны название для правила, сетевой порт и протокол для блокирования;
- logpath — расположение лог-файла, в котором фильтр будет искать подозрительную активность на основе описанных критериев.
Действия
Файлы с настройкой действий находятся в каталоге /etc/fail2ban/action.d. Чтобы блокировать адрес, Fail2ban создает правило в брандмауэре netfilter. Для этого, чаще всего, используются утилиты iptables или firewall-cmd. Последняя применяется в последних версиях CentOS / Red Hat / Fedora. iptables более универсальная и может использоваться, почти, во всех системах Linux.
- iptables — создание простого правила в netfilter с помощью одноименной утилиты;
- iptables-multiport — использование модуля multiports, позволяющий добавлять диапазоны портов для блокировки;
- iptables-ipset — использование ipset для придания более лаконичного вида правилам;
- iptables-allports — блокирует для адреса все порты;
- firewallcmd-new — создание простого правила в netfilter с помощью firewall-cmd;
- firewallcmd-ipset — добавляет правила с помощью утилиты firewall-cmd, используя ipset;
- firewallcmd-rich-rules — создает rich-rules при помощи firewall-cmd.
Фильтры
Фильтры, в основном, представляют набор регулярных выражений для поиска ключевых слов в log-файлах. Они находятся в каталоге /etc/fail2ban/filter.d.
Для создания и настройки своих фильтров, можно использовать имеющиеся файлы в качестве шпаргалки.
Готовые конфигурации для сервисов на Ubuntu
[ssh] enabled = true port = ssh filter = sshd action = iptables[name=sshd] logpath = /var/log/auth.log
[ssh-ddos] enabled = false port = ssh filter = sshd-ddos logpath = /var/log/auth.log maxretry = 6
[nginx] enabled = true port = http,https filter = nginx-http-auth action = iptables-multiport[name=nginx, port="http,https", protocol=tcp] logpath = /var/log/nginx/error.log
[postfix] enabled = true port = smtp,ssmtp,submission action = iptables[name=Postfix-smtp, port=smtp, protocol=tcp] filter = postfix logpath = /var/log/mail.log bantime = 86400 maxretry = 3 findtime = 3600 ignoreip = 127.0.0.1
[dovecot] enabled = true port = smtp,ssmtp,submission,imap2,imap3,imaps,pop3,pop3s filter = dovecot action = iptables-multiport[name=dovecot-pop3imap,port="pop3,pop3s,imap,imaps", protocol=tcp] logpath = /var/log/mail.log maxretry = 3 findtime = 3600 bantime = 86400
[roundcube-auth] enabled = true filter = roundcube-auth port = http,https logpath = /var/log/mail.log action = iptables-multiport[name=roundcube, port="http,https"] bantime = 86400 maxretry = 3 findtime = 3600
[apache] enabled = true port = http,https filter = apache-auth logpath = /var/log/apache2/error.log maxretry = 3
[apache-multiport] enabled = true port = http,https filter = apache-auth logpath = /var/log/apache2/error.log maxretry = 3
[apache-noscript] enabled = true port = http,https filter = apache-noscript logpath = /var/log/apache2/error.log maxretry = 3
[apache-overflows] enabled = true port = http,https filter = apache-overflows logpath = /var/log/apache2/error.log maxretry = 2
[vsftpd] enabled = true port = ftp,ftp-data,ftps,ftps-data filter = vsftpd logpath = /var/log/vsftpd.log action = iptables[name=VSFTPD, port=21, protocol=tcp] bantime = 600 maxretry = 3 findtime = 1800
[wp-login] enabled = true port = http,https action = iptables-multiport[name=WP, port="http,https", protocol=tcp] # включаем отправку оповещения на почту, если вам это необходимо sendmail[name=wp-login, dest=zeroxzed@gmail.com, sender=fail2ban@serveradmin.ru] filter = wp-login logpath = /web/sites/serveradmin.ru/log/access.log maxretry = 3