Настройка Fail2ban

В этой статье мы вновь вернемся к теме безопасности сервера и расскажем, как защитить VPS при помощи программы Fail2ban. Основное ее предназначение — защита хоста от несанкционированного доступа, что возможно благодаря тщательному отслеживанию сетевой активности на основных портах и чтению журналов записей (лог-файлов). Программа особенно эффективна против так называемых brute-force атак, поскольку она нейтрализует атакующего таким образом, что все пакеты, отправленные с устройства, IP-адрес которого по той или иной причине попал в черный список, отбрасываются. Блокировка настраивается путем внесения изменений в правила iptables. Итак, приступим к настройке арендованного VPS сервера.

Установка на Ubuntu 14.04

1. Для установки программы Fail2ban выполните следующие команды:

sudo apt-get update 
sudo apt-get install fail2ban

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

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

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

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

3. Откройте файл jail.local для редактирования одной из команд: Если вам удобнее работать с редактором nano:

sudo nano /etc/fail2ban/jail.local

Если для вас предпочтительнее редактор vi:

sudo vi /etc/fail2ban/jail.local

Обратите внимание на секцию [DEFAULT].

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

ignoreip — значения этого параметра говорят о том, какие IP-адреса блокироваться не будут вовсе. Если вы хотите, чтобы Fail2ban игнорировал при проверке несколько IP-адресов, их необходимо указать в значении ignoreip через пробел.

bantime — данный параметр означает время в секундах, в течение которого подозрительный IP будет заблокирован. Изначально его значение составляет 10 минут.

findtime — определяет промежуток времени в секундах, в течение которого программой будет определяться наличие подозрительной активности.

maxretry — допустимое число неуспешных попыток получения доступа к серверу. При превышении указанного значения IP попадает в бан.

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

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

sudo service fail2ban restart
tail /var/log/fail2ban.log

Установка Fail2ban на CentOS 6.*

1. Чтобы установить программу на виртуальный сервер, выполните поочередно такие команды:

yum update
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install fail2ban

2. По аналогии с п. 2 в инструкции для Ubuntu создайте локальную копию конфигурационного файла и откройте этот файл для редактирования командами:

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

3. Активируйте защиту своего VPS там, где нужно, редактируя содержимое jail.local. Подробная инструкция по настройке представлена далее в разделе «Настройка Fail2ban». Внимательно следите за корректностью пути к файлу хранения логов в значении параметра logpath.

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

sudo service fail2ban restart

Установка Fail2ban на Debian 7

1. Установка программы на VPS выполняется следующим набором команд:

apt-get update && apt-get upgrade
sudo apt-get install fail2ban

2. Повторите п. 2 из двух предыдущих разделов для создания локальной копии конфигурационного файла jail.conf:

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

3. Настройка алгоритма работы Fail2ban задается точно таким же образом, как и для операционных систем Ubuntu и CentOS. Вам необходимо активировать нужные секции jail.local ([ssh], [apache] и прочие, в зависимости от портов, защиту которых вы хотите активировать) и сохранить результаты редактирования конфигурационного файла. Более подробное описание этой процедуры представлено ниже в разделе «Настройка Fail2ban».

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

sudo service fail2ban restart

Настройка Fail2ban

Первым делом настройте защиту своего VPS по протоколу SSH при помощи программы Fail2ban. Для этого найдите в файле 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]
	sendmail-whois[name=ssh, dest=****@yandex.ru, sender=fail2ban@***.ru]
logpath = /var/log/auth.log
maxretry = 3
bantime = 600

Запись выше означает, что, если выполнено более 3 неудачных попыток подключения к VPS через основные порты SSH, то IP-адрес, с которого выполнялась авторизация, попадет в бан на 10 минут. Правило запрета будет добавлено в iptables. В то же время владелец сервера получит уведомление на e-mail, указанный в значении переменной dest, о том, что указанный IP был заблокирован за попытку получения несанкционированного доступа по протоколу SSH. Также в сообщении будет указана WHOIS информация о заблокированном IP. Пример такого уведомления от Fail2ban:

Hi,

The IP 61.147.103.113 has just been banned by Fail2Ban after
3 attempts against SSH.

Here are more information about 61.147.103.113:

% [whois.apnic.net]
% Whois data copyright terms http://www.apnic.net/db/dbcopyright.html

% Information related to '61.147.0.0 - 61.147.255.255'

inetnum: 61.147.0.0 - 61.147.255.255
netname: CHINANET-JS
descr: CHINANET jiangsu province network
descr: China Telecom
descr: A12,Xin-Jie-Kou-Wai Street
descr: Beijing 100088
country: CN
admin-c: CH93-AP
tech-c: CJ186-AP
mnt-by: MAINT-CHINANET
mnt-lower: MAINT-CHINANET-JS
mnt-routes: maint-chinanet-js
changed: hostmaster@ns.chinanet.cn.net 20020209
changed: hostmaster@ns.chinanet.cn.net 20030306
status: ALLOCATED non-PORTABLE
source: APNIC

role: CHINANET JIANGSU
address: 260 Zhongyang Road,Nanjing 210037
country: CN
phone: +86-25-86588231
phone: +86-25-86588745
fax-no: +86-25-86588104
e-mail: ip@jsinfo.net
remarks: send anti-spam reports to spam@jsinfo.net
remarks: send abuse reports to abuse@jsinfo.net
remarks: times in GMT+8
admin-c: CH360-AP
tech-c: CS306-AP
tech-c: CN142-AP
nic-hdl: CJ186-AP
remarks: www.jsinfo.net
notify: ip@jsinfo.net
mnt-by: MAINT-CHINANET-JS
changed: dns@jsinfo.net 20090831
changed: ip@jsinfo.net 20090831
changed: hm-changed@apnic.net 20090901
source: APNIC
changed: hm-changed@apnic.net 20111114

person: Chinanet Hostmaster
nic-hdl: CH93-AP
e-mail: anti-spam@ns.chinanet.cn.net
address: No.31 ,jingrong street,beijing
address: 100032
phone: +86-10-58501724
fax-no: +86-10-58501724
country: CN
changed: dingsy@cndata.com 20070416
changed: zhengzm@gsta.com 20140227
mnt-by: MAINT-CHINANET
source: APNIC

% Information related to '61.147.0.0/16AS23650'

route: 61.147.0.0/16
descr: CHINANET jiangsu province network
country: CN
origin: AS23650
mnt-by: MAINT-CHINANET-JS
changed: ip@jsinfo.net 20030414
source: APNIC

% This query was served by the APNIC Whois Service version 1.69.1-APNICv1r0 (UNDEFINED)

Regards,

Fail2Ban

В качестве значения переменной sender после fail2ban@ укажите домен либо хостнейм VPS.

Важно! Для того чтобы сообщение о блокировке злоумышленника отправлялось на ваш e-mail, необходимо наличие почтового сервера на VPS.

Дополнительно для защиты SSH активируйте следующую секцию:

[ssh-ddos]
enabled = true
port 	= ssh
filter = sshd-ddos
logpath = /var/log/auth.log
maxretry = 2

Для хранения больших списков заблокированных IP-адресов можно использовать комбинацию Netfilter/Iptables и IPsets. Чтобы настроить работу Fai2ban таким образом, активируйте раздел [ssh-iptables-ipset4]:

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

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

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

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

Ниже представлены примеры настроек конфигурационного файла для защиты почтового сервера 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 завершится сообщением об ошибке. Если какой-то из лог-файлов отсутствует на вашем VPS, вы можете его создать самостоятельно командой 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 можно использовать следующие настройки Fail2ban:

[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

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

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

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

[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 завершена. Ознакомиться с полным списком правил, которыми программа будет руководствоваться при мониторинге активности на вашем VPS, можно с помощью команды sudo iptables –L

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

sudo fail2ban-client set JAIL unbanip IP

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

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

sudo fail2ban-client set ssh-iptables unbanip 61.147.103.113