Fail2ban сканирует различные текстовые лог-файлы и блокирует IP, которые делают слишком много ошибок ввода пароля, обновляя правила файрвола для отклонения IP-адреса, сходно с Sshguard.

 

Устанавливаем:

# yum install fail2ban

 Файлы настроек применяются в алфавитном порядке:

/etc/fail2ban/jail.conf

/etc/fail2ban/jail.d/*.conf,

/etc/fail2ban/jail.local

/etc/fail2ban/jail.d/*.local,

 

Любой из файлов может содержать раздел [DEFAULT], который выполняется первым, а затем – разделы для индивидуальных сервисов. Последнее значение, установленное для данного параметра, имеет приоритет.

 

Редактируем настройки в копии основного конфига:

# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# nano /etc/fail2ban/jail.local

Секция [DEFAULT] содержит в себе основные правила, заданные по умолчанию.

ignoreip — IP-адреса которые не будут блокироваться

bantime — время в секундах, на которое будут блокироваться злоумышленники

findtime — промежуток в течении которого будет отслеживаться IP-адрес после первой попытки

maxretry — допустимое число неуспешных попыток получения доступа к серверу

action — действия, которые будет выполнять Fail2ban при обнаружении атакующего IP-адреса,

logpath — полный путь к логу, который будет анализироваться

 

Проверим логи приложения:

# tail /var/log/fail2ban.log

Проверяем действие текущих правил:

# fail2ban-client status

# fail2ban-client status sshd

После изменения настроек перезапускаем сервис:

# systemctl restart fail2ban

Для ручного бана IP-адреса:

# fail2ban-client set [name-of-jail] banip [ip-address]

Вручную удалить IP-адрес их бана можно командой:

# fail2ban-client set sasl unbanip xxx.xxx.xxx.xxx

где sasl наименование цепочки

 

 

Для защиты админки сайта от взлома мы можем добавить в конфиг:

[wp-login]
enabled = true
port = http,https
action = iptables[name=WP, port=http, protocol=tcp]
# включаем отправку оповещения на почту, если вам это необходимо
        sendmail[name=wp-login, dest=This email address is being protected from spambots. You need JavaScript enabled to view it., sender=This email address is being protected from spambots. You need JavaScript enabled to view it.]
filter = wp-login
logpath = /var/log/access.log
maxretry = 3

И создаем фильтр:

# nano /etc/fail2ban/filter.d/wp-login.conf

 

[Definition]
failregex = ^<HOST> .* "POST /wp-login.php

Проверяем работу фильтра:

# fail2ban-regex /var/log/access.log /etc/fail2ban/filter.d/wp-login.conf

или с подробностями:

# fail2ban-regex --print-all-matched /var/log/access.log /etc/fail2ban/filter.d/wp-login.conf

 

 

Пример конфига /etc/fail2ban/jail.local:

 

[DEFAULT]

# Ban hosts for one hour:

bantime = 3600

findtime = 600

maxretry = 3

banaction = iptables-multiport

ignoreip = 127.0.0.1/8

 

[sshd]

enabled = true

logpath = %(sshd_log)s

 

[ssh-ddos]

enabled = true

port = ssh

filter = sshd-ddos

logpath = %(sshd_log)s

maxretry = 3

 

[nginx-http-auth]

enabled = true

 

[joomla]

enabled = true

port = http,https

action = iptables[name=joomla, port=http, protocol=tcp]

filter = joomla

logpath = /var/www/blog/log/nginx/access_log.log

maxretry = 3

findtime = 1200

 

Материалы:

https://vps.ua/wiki/install-linux-vps/security/configuring-fail2ban/

https://www.8host.com/blog/zashhita-ssh-pri-pomoshhi-fail2ban-v-centos-7/

https://serveradmin.ru/nastroyka-fail2ban-dlya-zashhityi-wordpress/