В этой статье я расскажу как защитить ваш сервер на 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