Fail2ban дозволяє блокувати доступ до сервера або запущеним службам на основі аналізу логів доступу і підключень. Fail2Ban автоматично може створювати правила брандмауера для блокування окремих IP адрес, якщо дії з цього IP визначаються як підозрілі. Так, Fail2Ban може захистити ваш сервер від перебору паролів по SSH, DDoS атак, спроб експлуатації експлойтів, виконанні заборонених дій.
Будь-сервіс сервера, порти якого відкриті до зовнішнього світу, потенційно вразливий. Порти деяких сервісів можна закрити, але так можна вчинити не з усіма. Наприклад, якщо ви хочете, щоб у вас повноцінно працювала поштова SMTP служба, ви не можете відключити її або заблокувати порт на firewall і час від часу в логах можна спостерігати записи про спробу підбору пароля до облікового запису. Так відбувається і з іншими сервісами.
Зазвичай на всіх своїх серверах, я закриваю SSH доступу ззовні, тому що підключаюся до своїх серверів зі свого статичного IP-адреси або через OpenVPN підключення. Але це не завжди можливо. На допомогу приходить заміна стандартних портів, або настройка на сервері служби fail2ban. У цьому прикладі ми покажемо, як встановити та використовувати fail2ban в CentOS, однак ви можете використовувати цю інструкцію і для інших дистрибутивів Linux.
зміст:
- Установка і первинна настройка Fail2Ban в CentOS 8/7
- Використання Fail2Ban для захисту SSH від перебору паролів
- Список Fail2Ban
- Захист Apache за допомогою Fail2Ban
- Налаштування зв'язки Fail2Ban і Nginx
- Захист MySQL за допомогою Fail2Ban
- Правила Fail2Ban для Exim
- Білий список IP в Fail2Ban, розблокування IP-адрес
Установка і первинна настройка Fail2Ban в CentOS 8/7
Пакет для установки fail2ban знаходиться в репозиторії Epel, підключимо його:
# Yum install epel-release -y
Після підключення сховища, можна встановити fail2ban через yum або dnf (в CentOS 8):
# Yum install fail2ban -y
Як і будь-який інший сервіс, fail2ban потрібно додати в автозавантаження, щоб він автоматично запускався при рестарт системи:
[Root @ server ~] # systemctl enable fail2ban
Created symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service → /usr/lib/systemd/system/fail2ban.service.
служба fail2ban зберігає файли конфігурації в директорії / Etc / fail2ban. Головний файл конфігурації - /etc/fail2ban/jail.conf. Так як даний файл може бути перезаписаний при оновленні сервісу, для роботи потрібно створити файл jail.local. Також файли в директорії /etc/fail2ban/jail.d/ можуть використовуватися для перевизначення налаштувань в вище зазначених файлах. Файли застосовуються в наступному порядку:
- /etc/fail2ban/jail.conf
- /etc/fail2ban/jail.d/*.conf
- /etc/fail2ban/jail.local
- /etc/fail2ban/jail.d/*.local
Використання Fail2Ban для захисту SSH від перебору паролів
Створимо файл і внесемо настройки:
# Nano /etc/fail2ban/jail.local
І додамо в нього вміст:
[DEFAULT] # Ban hosts for one hour: bantime = 3600 # Override /etc/fail2ban/jail.d/00-firewalld.conf: banaction = iptables-multiport [sshd] enabled = true
Дана конфігурація встановлює новий час для блокування IP адресовм для всіх служб, встановлює використання iptables для блокувань і включається захист для sshd.
Щоб використовувати для фільтрації firewalld, вкажіть:
banaction = firewallcmd-ipset
Після зміни налаштувань перезапустіть сервіс:
# Systemctl restart fail2ban
Щоб подивитися статус fail2ban, і перевірити список захищаються служби, виконайте команду:
[Root @ server ~] # fail2ban-client status
Status | - Number of jail: 1 '- Jail list: sshd
Ви можете запросити поточний статус блокувань fail2ban для конкретної служби:
# Fail2ban-client status sshd
У файлі jail.conf можна описати загальні параметри, які не будуть перевизначатися в jail.local.
Розблокуйте рядок:
ignoreip = 127.0.0.1/8
Змініть наступні значення:bantime = 10m
- час на яке буде заблокований IPfindtime = 10m
- час, протягом якого будуть обчислюватися невдалі спроби авторизації.maxretry = 3
- кількість спроб до блокування
Щоб отримувати сповіщення по електронній пошті, вам потрібно налаштувати наступні параметри:destemail = [email protected]
-одержувачsender = [email protected]
- відправникmta = postfix
- SMTP служба, через яку здійснюється відправлення
Щоб налаштувати блокування для окремих сервісів, в файлі /etc/fail2ban/jail.local після блоку [DEFAULT] створюється блок для потрібного сервісу, наприклад, як з sshd. Додамо в нього деякі настройки:
[Sshd] enabled = true port = ssh logpath =% (sshd_log) s
Ми вказали який порт блокувати і куди писати логи блокування. Зверніть увагу на директорію /etc/fail2ban/filter.d, там описуються фільтри за допомогою яких будуть аналізуватися записи в журналі і перевіряти, вказує та чи інша запис на невдалу аутентифікацію. Якщо вивести список файлів в каталозі, можна виявити правила fail2ban для більшість популярних сервісів:# Ls /etc/fail2ban/filter.d
Файли дуже докладно описані і можна вивчити потрібний вам, щоб розуміти, як відбуваються перевірки журналу.
Список Fail2Ban
Щоб перевірити журнал fail2ban, виконайте команду:
# Journalctl -b -u fail2ban
Так само можна перевірити логи в реальному часі:
# Tail -F /var/log/fail2ban.log
Висновок з логу:
2019-12-05 12: 13: 26,914 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 222.186.180.17 2019-12-05 12: 13: 26,930 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 222.186 .180.223 2019-12-05 12: 13: 26,944 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 36.72.82.10 2019-12-05 12: 13: 26,958 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 40.117.135.57 2019-12-05 12: 13: 26,973 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 45.55.155.224 2019-12-05 12: 13: 26,988 fail2ban.actions [9750]: NOTICE [sshd ] Restore Ban 67.205.135.127 2019-12-05 12: 13: 27,003 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 83.171.107.216 2019-12-05 12: 13: 43,362 fail2ban.filter [9750]: INFO [sshd] Found 183.87.134.98 - 2019-12-05 12:13:42 2019-12-05 12: 13: 45,571 fail2ban.filter [9750]: INFO [sshd] Found 183.87.134.98 - 2019-12-05 12 : 13: 45 2019-12-05 12: 15: 46,109 fail2ban.filter [9750]: INFO [sshd] Found 112.64.170.178 - 2019-12-05 12:15:45 2019-12-05 12: 17: 05,317 fail2ban.actions [9750]: NOTICE [sshd] Unba n 222.186.175.216
Як бачите, fail2ban працює і періодично блокує або прибирає блокування для IP адрес.
Щоб перевірити, які IP адреси заблоковані в iptables службою fail2ban, виконайте:
# Iptables -L
Як бачите, з відкритим назовні ssh, час від часу хтось намагається підібрати пароль і авторизуватися. Якщо поштова статистику через якийсь час, видно, що кількість заблокованих IP зростає.
Захист Apache за допомогою Fail2Ban
Якщо ви хочете налаштувати fail2ban для вашого apache (httpd), додайте наступні настройки в jail.local:
# Виявляємо невдалі спроби введення пароля [apache] enabled = true port = http, https filter = apache-auth logpath = / var / log / httpd / error_log maxretry = 3 # блокує IP, які безпосередньо звертаються до скриптів з розширенням php, asp, exe, pl, cgi, scgi [apache-noscript] enabled = true port = http, https filter = apache-noscript logpath = / var / log / httpd / error_log maxretry = 3 # виявляємо спроби переповнення Апача [apache-overflows] enabled = true port = http, https filter = apache-overflows logpath = / var / log / httpd / error_log maxretry = 2 # виявляємо невдалі спроби пошуку в домашній директорії на сервері [apache-nohome] enabled = true port = http, https filter = apache -nohome logpath = / var / log / httpd / * error_log maxretry = 2
Після зміни конфігураційного файлу, виконуємо рестарт сервісу і перевіряємо статус:
[Root @ server ~] # fail2ban-client status apache
Status for the jail: apache | - Filter | | - Currently failed: 0 | | - Total failed: 0 | '- File list: / var / log / httpd / error_log' - Actions | - Currently banned: 0 | - Total banned: 0 '- Banned IP list:
Для тесту, я встановив на сервер Joomla, після чого намагався відкрити неіснуючий файл і fail2ban мене заблокував:
[Root @ server httpd] # fail2ban-client status apache-noscript
Status for the jail: apache-noscript | - Filter | | - Currently failed: 1 | | - Total failed: 6 | '- File list: / var / log / httpd / error_log' - Actions | - Currently banned: 1 | - Total banned: 1 '- Banned IP list: *. *. *. *
Налаштування зв'язки Fail2Ban і Nginx
Якщо веб-сервером у вас виступає nginx і на сайті є розділи вимагають авторизації, у вас так само можуть бути проблеми зі спробами перебору паролів. для fail2ban ми можемо вказати використовувати файл nginx-http-auth.conf, За замовчуванням він вже описаний в файлі конфігурації /etc/fail2ban/jail.conf:
[Root @ server ~] # cat /etc/fail2ban/jail.conf | grep nginx
[Nginx-http-auth] logpath =% (nginx_error_log) s # To use 'nginx-limit-req' jail you should have 'ngx_http_limit_req_module' # and define 'limit_req' and 'limit_req_zone' as described in nginx documentation # http: / /nginx.org/en/docs/http/ngx_http_limit_req_module.html # or for example see in 'config / filter.d / nginx-limit-req.conf' [nginx-limit-req] logpath =% (nginx_error_log) s [ nginx-botsearch] logpath =% (nginx_error_log) s logpath =% (nginx_access_log) s
Нам потрібно включити його в файлі конфігурації /etc/fail2ban/jail.local додавши:
[Nginx-http-auth] enabled = true
Після все проведених налаштувань, не забуваємо виконувати перезавантаження сервісу:
# Systemctl restart fail2ban
Захист MySQL за допомогою Fail2Ban
Для захисту MySQL потрібно додати окремий блок в конфігураційний файл jail.local:
[Mysqld-auth] enabled = true filter = mysqld-auth port = 3306 logpath = /var/log/mysql/error.log
Ця установка захистить вас від перебору паролів для користувача mysql (це дуже частий брутфорс).
Правила Fail2Ban для Exim
Щоб налаштувати захист для поштового сервісу exim, внесіть наступну конфігурацію:
[Exim] enabled = true filter = exim action = iptables-multiport [name = exim, port = "25,465,587"] logpath = / var / log / exim / mainlog
Таким чином ви можете налаштувати fail2ban для роботи практично з усіма популярними сервісами та ваш сервер стане максимально безпечний.
Білий список IP в Fail2Ban, розблокування IP-адрес
Щоб розблокувати IP, який потрапив в блокування fail2ban, використовуйте команду:
# Fail2ban-client set SECTION unbanip IP
- де SECTION назву секції в файлі конфігурації, за правилами якого був заблокований ваш IP адреса. наприклад:
# Fail2ban-client set apache-noscript unbanip 185. *. *. *
Ви можете додати певні IP адреси в виключення fail2ban (білий список). Для цього в файлі конфігурації jail.conf внесіть IP в рядок:
ignoreip = 185. *. *. *
Додавши свій IP-адресу в виключення, я виконав кілька атак подібно попередньої і блокування не відбулося.
Як ви бачите, fai2ban досить просто в налаштуванні, але цілком ефективний засіб додаткового захисту вашого сервера від зловмисників. Для Windows на жаль, я не бачив безкоштовних програм з подібним функціоналом (можна спробувати реалізувати блокування IP адрес за допомогою PowerShell - див. Статтю Захист RDP від перебору паролів).