У цій статті ми знову повернемося до теми безпеки сервера та розповімо, як захистити 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 не може бути зазначена інформація, якої немає у цьому файлі;
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