Студия веб-дизайна "Шери"

Настройка fail2ban для drupal с обработкой captcha

Установка fail2ban в Ubuntu:
sudo apt-get update && sudo apt-get install fail2ban
все зависимости устанавливаются автоматически, но лучше проверить наличие iptables командой sudo iptables -L

После этого переходим к настройке fail2ban

Переходим в папку настроек cd /etc/fail2ban

Все настройки необходимо производить только в файле jail.local!

Если файл настроек jail.local не создался автоматически, то создаём его командой sudo cp jail.conf jail.local и открываем его для редактирования привычным для нас редактором sudo nano jail.local

Все настройки разбиты на секции, в которых описываются правила обработки событий.

Для начала отредактируем секцию default так, чтобы наш адрес никогда не блокировался ignoreip

[default]
ignoreip = 127.0.0.1 your_ip
bantime  = 600
maxretry = 3

вместо your_ip указываем свой ip-адрес

bantime - время блокировки в секундах
maxretry - количество неудачных попыток, после которых хост будет заблокирован

Следующая важная для нас секция - ssh

[ssh]

enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 3
bantime = 600

enabled - может принимать значения true/false - вкл/выкл
port - указывает какой именно порт будет заблокирован, если правило сработает
filter - указывает какой из обработчиков в папке filter.d будет использован. Значение совпадает с названием файла обработчика без окончания .conf
logpath - указывает какой именно файл использовать для наблюдения

Следующая важная для нас секция - ssh-ddos - настройки аналогичные предыдущей секции

Интересная особенность: пока я не начал указывать bantime в каждой секции fail2ban правила не работали

Теперь несколько специфичных для меня настроек - fail2ban и drupal.

Во-первых, мне нужны были правила для защиты от брутфорса на сайтах под Drupal. Для этого я сходил на drupal.org за модулем Fail2ban firewall integration. После внимательного изучения работы модуля оказалось, что весь модуль в принципе не нужен. Достаточно создать обработчик событий в папке filter.d, который будет читать логи сервера и выделять в них то, что относится только к Drupal'у. После этого осталось создать правило в jail.local.

Собственно сам обработчик (взят из модуля Fail2ban firewall integration) drupal-auth.conf:

# Fail2Ban configuration file
#
# Author: Tipi Koivisto

[Definition]

# Option:  failregex
# Notes.:  regex to match the password failure messages in the logfile. The
#          host must be matched by a group named "host". The tag "" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P[\w\-.^_]+)
# Values:  TEXT
#

failregex = \|\d*\|user\|\|.*Login attempt failed for \s?

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

failregex - указывает какое выражение считать ошибочным вводом, т.е. попыткой подбора логина/пароля
ignoreregex - указывает, что мы не будем считать попыткой подбора логина/пароля

Созданный файл сохраняем в /etc/fail2ban/filter.d/ и после этого добавляем правило в jail.local

[drupal-auth]

enabled = true
port    = http,https
filter  = drupal-auth
logpath = /var/log/messages
maxretry = 3
bantime = 180

Опытным путём определили, что друпал пишет логи в /var/log/messages

Но этого мне показалось недостаточно, т.к. на сайтах уже стояла защита в виде captcha, но некоторые боты её обходили. Поэтому был создан обработчик fail2ban captcha - captcha.conf:

# Fail2Ban configuration file
#
# Author: Vyacheslav Manchev

[Definition]

# Option:  failregex
# Notes.:  regex to match the password failure messages in the logfile. The
#          host must be matched by a group named "host". The tag "" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P[\w\-.^_]+)
# Values:  TEXT
#

failregex = \|\d*\|CAPTCHA\|\|.*post blocked by CAPTCHA module*

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

и добавлено правило в jail.local

[captcha]

enabled = true
port    = http,https
filter  = captcha
logpath = /var/log/messages
maxretry        = 3
bantime =180

Пока на этом всё. Возможно, что со временем появятся новые задачи и статья будет дополнена новой информацией.