Настройка Fail2ban на Debian

Справочник системного администратора

В этой статье я расскажу как защитить ваш сервер на Debian при помощи программы Fail2ban. Основное ее предназначение — защита хоста от несанкционированного доступа, что возможно благодаря тщательному отслеживанию сетевой активности на основных портах и чтению журналов записей (лог-файлов).

Программа особенно эффективна против так называемых brute-force атак, поскольку она нейтрализует атакующего таким образом, что все пакеты, отправленные с устройства, IP-адрес которого по той или иной причине попал в черный список, отбрасываются. Блокировка настраивается путем внесения изменений в правила iptables.

Выполним установку Fail2Ban:

sudo apt-get install fail2ban

Для того, чтобы программа обеспечивало необходимую защиту, вам необходимо внести некоторые корректировки в конфигурационный файл. По умолчанию таковым является /etc/fail2ban/jail.conf.
Однако разработчики не рекомендуют работать с ним напрямую, чтобы избежать проблем при неправильной настройке, поэтому создайте локальную копию данного файла командой:

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

Далее мы будем выполнять редактирование только /etc/fail2ban/jail.local. Он будет подключен автоматически и имеет высший приоритет при исполнении.

Открываем конфигурационный файл для редактирования:

sudo nano /etc/fail2ban/jail.local

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

ignoreip — значения этого параметра говорят о том, какие IP-адреса блокироваться не будут вовсе. Если вы хотите, чтобы Fail2ban игнорировал при проверке несколько IP-адресов, их необходимо указать в значении ignoreip через пробел.
bantime — данный параметр означает время в секундах, в течение которого подозрительный IP будет заблокирован. Изначально его значение составляет 10 минут.
findtime — определяет промежуток времени в секундах, в течение которого программой будет определяться наличие подозрительной активности.
maxretry — допустимое число неуспешных попыток получения доступа к серверу. При превышении указанного значения IP попадает в бан.

Ниже будут представлены другие секции, при помощи которых можно настроить защиту различных сервисов, установленных на ваш сервер, например, ssh, ftp и прочих. Подробная процедура их настройки будет рассмотрена в конце данной статьи.

После редактирования jail.local обязательно сделайте перезапуск Fail2ban командой:

sudo service fail2ban restart

Первым делом настроим защиту сервера по протоколу SSH, для этого найдите в файле jail.local секцию [ssh]. Она должна быть активна по умолчанию, тем не менее убедитесь, что в значении параметра enabled установлено true, а не false.

Укажите значения параметров, на основании которых Fail2ban должен выполнять отслеживание активности:

filter — фильтр, который будет использоваться. По умолчанию это /etc/fail2ban/filter.d/sshd.conf;
action — действия, которые будет выполнять Fail2ban при обнаружении атакующего IP-адреса, все правила реагирования на действия злоумышленника описаны в файле /etc/fail2ban/action.d. Соответственно, в качестве значения параметра action не может быть указана информация, которой нет в файле /etc/fail2ban/action.d;
logpath — полный путь к файлу, в который будет записываться информация о попытках получения доступа к VPS.
findtime — время в секундах, в течение которого наблюдается подозрительная активность;
maxretry — разрешенное количество повторных попыток подключения к серверу;
bantime — промежуток времени, в течение которого попавший в черный список IP будет оставаться заблокированным.

Стоит обратить внимание на тот факт, что вовсе необязательно прописывать значения вышеуказанных параметров в каждой секции. Если их не упоминать, в действие вступят настройки, указанные в главном разделе [DEFAULT]. Главное, чтобы для переменной enabled было указано значение true.

Защита протокола SSH

Пример конфигурации Fail2ban на порту SSH:

[ssh]
enabled = true
port = ssh
filter = sshd
action = iptables[name=sshd, port=ssh, protocol=tcp]
logpath = /var/log/auth.log
maxretry = 3
bantime = 600

Запись выше означает, что, если выполнено более 3 неудачных попыток подключения к серверу через основные порты SSH, то IP-адрес, с которого выполнялась авторизация, попадет в бан на 10 минут. Правило запрета будет добавлено в iptables.

После правки конфигурационного файла сохраните внесенные изменения.

Аналогичным образом можно защитить и прочие сервисы.

Защита почтового сервера

Ниже представлены примеры настроек конфигурационного файла для защиты почтового сервера postfix.

[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

Обязательно обратите внимание, чтобы путь к файлу хранения логов (logpath) был указан корректно. В противном случае перезапуск Fail2ban завершится сообщением об ошибке. Если какой-то из лог-файлов отсутствует на вашем сервере, вы можете его создать самостоятельно командой touch, например, touch /var/log/mail.log. Обязательно назначьте ему необходимые права доступа командой:

chmod 755 /var/log/mail.log

[sasl]
enabled = true
port = smtp,ssmtp,submission,imap2,imap3,imaps,pop3,pop3s
filter = postfix-sasl
action = iptables[name=Postfix-smtp, port=smtp, protocol=tcp]
logpath = /var/log/mail.log
bantime = 86400
maxretry = 3
findtime = 3600

Защиту почтового сервера dovecot можно активировать следующим образом:

[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

Пример конфигурации jail.local для защиты roundcube:

[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

Для защиты веб-сервера Apache можно использовать следующие настройки:

[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

[php-url-fopen]
enabled = true
port= http,https
filter = php-url-fopen
logpath = /var/log/apache*/*access.log

В используемых выше секциях файла jail.local отсутствуют значения параметра action. В этом случае при обнаружении атаки на сервис apache программа Fail2ban будет выполнять действие, определенное в секции [DEFAULT], а именно action = iptables-multiport. Это значит, что атакующий IP-адрес будет заблокирован в iptables при помощи так называемого модуля multiports. Модуль multiports позволяет настроить правило сразу для диапазонов портов.

Защита FTP сервера

Для защиты FTP-сервера vsftpd можно использовать следующие параметры:

[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

Не забудьте о необходимости перезапуска Fail2ban после каждого редактирования конфигурационного файла.

На этом настройка Fail2ban завершена. Ознакомиться с полным списком правил, которыми программа будет руководствоваться при мониторинге активности на вашем сервере, можно с помощью команды:

sudo iptables –L

Основные моменты по установке и настройке программы рассмотрены. В случае, если какой-то IP-адрес будет заблокирован Fail2ban по ошибке, удалить его из черного списка можно командой:

sudo fail2ban-client set JAIL unbanip IP

Где JAIL — название секции конфигурационного файла jail.local, в соответствии с правилами которой была активирована блокировка, IP — адрес, который нужно разблокировать.

Пример команды разблокировки:

sudo fail2ban-client set ssh-iptables unbanip 85.24.66.72

Получить список правил можно командой:

fail2ban-client status

Получить статистику заблокированных адресов можно следующей командой:

fail2ban-client status JAIL

При наличие заблокированных IP-адресов мы увидим, примерно, следующее:

`- action
|- Currently banned: 2
| `- IP list: 85.24.66.72 10.231.169.13

Tags: