Налаштування Fail2Ban в Linux для захисту SSH, Apache, MySQL, Exim

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 - час на яке буде заблокований IP
findtime = 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 від ​​перебору паролів).