В этой статье мы вновь вернемся к теме безопасности сервера и расскажем, как защитить VPS при помощи программы Fail2ban. Основное ее предназначение — защита хоста от несанкционированного доступа, что возможно благодаря тщательному отслеживанию сетевой активности на основных портах и чтению журналов записей (лог-файлов). Программа особенно эффективна против так называемых brute-force атак, поскольку она нейтрализует атакующего таким образом, что все пакеты, отправленные с устройства, IP-адрес которого по той или иной причине попал в черный список, отбрасываются. Блокировка настраивается путем внесения изменений в правила iptables. Итак, приступим к настройке арендованного VPS сервера.
Содержание
- Установка на Ubuntu 14.04
- Установка Fail2ban на CentOS 6.*
- Установка Fail2ban на Debian 7
- Настройка Fail2ban
Установка на 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=****@gmail.com, sender=fail2ban@***.com] 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