Служба Fail2Ban помогает блокировать ip адреса ботов, которые подбирают пароли к вашему сайту. В последнее время часто используется для проведения атак, так как большое кол-во post запросов создает существенную нагрузку на веб сервер. В наших примерах мы разберем блокировку ip адресов на примере популярной CMS - Wordpress, а также для службы ssh.
1. Установим службу Fail2Ban
1.1 Подключаем Epel репозиторий
yum install epel-release
далее в /etc/yum.repos.d/epel.repo необходимо включить его, enabled=1
yum install fail2ban
2. Общие настройки
Служба Fail2ban хранит свои файлы конфигурации в каталоге /etc/fail2ban. Там есть файл со значениями по умолчанию, который называется jail.conf. Поскольку этот файл может быть перезаписан обновлениями пакета, мы не должны использовать его. Вместо этого мы напишем новый файл с именем jail.local. Любые значения, определенные в jail.local, переопределяют значения в jail.conf.
jail.conf содержит раздел [DEFAULT], за которым следуют разделы для отдельных служб. jail.local может переопределить любое из этих значений. Кроме того, файлы в /etc/fail2ban/jail.d/ могут использоваться для переопределения настроек в обоих этих файлах. Файлы применяются в следующем порядке:
/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf, alphabetically
/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local, alphabetically
Проверим и добавим настройки по умолчанию в файл /etc/fail2ban/jail.local
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true
Перезапустим службу
service fail2ban restart
Проверим состояние командой
fail2ban-client status
3. Wordpress фильтр
Добавим фильтр и правило (jail) блокировки ip адресов которые обратились по адресу /wp-login.php (админка wordpress) более 10 раз с одного ip адреса в течение 10 минут.
3.1 Фильтр
/etc/fail2ban/filter.d/wordpress.conf
[Definition]
failregex = ^.* "POST .*/wp-login.php([/\?#\\].*)? HTTP/.*" 200
ignoreregex =
По данному фильтру мы будем искать ip адреса.
3.2 Добавим jail
/etc/fail2ban/jail.d/wordpress.conf
[wordpress]
action = iptables-multiport[name="wordpress", port="http,https"]
filter = admin-wordpress
logpath = /var/www/vhosts/system/*/logs/*access*log
/var/log/httpd/*access_log
Если Вы используете другой веб сервер, Вам необходимо изменить фильтр согласно тому как он формируем лог и указать верный путь до файла журнала (access_log). После внесения изменений необходимо перезапустить службу.