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

Зміст

  1. Встановлення на Ubuntu 14.04
  2. Встановлення Fail2ban на CentOS 6.*
  3. Встановлення Fail2ban на Debian 7
  4. Налаштування 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 не може бути зазначена інформація, якої немає у цьому файлі;

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