Fail2ban дозволяє блокувати доступ до сервера або запущеним службам на основі аналізу логів доступу і підключень. Fail2Ban автоматично може створювати правила брандмауера для блокування окремих IP адрес, якщо дії з цього IP визначаються як підозрілі. Так, Fail2Ban може захистити ваш сервер від перебору паролів по SSH, DDoS атак, спроб експлуатації експлойтів, виконанні заборонених дій.

Будь-сервіс сервера, порти якого відкриті до зовнішнього світу, потенційно вразливий. Порти деяких сервісів можна закрити, але так можна вчинити не з усіма. Наприклад, якщо ви хочете, щоб у вас повноцінно працювала поштова SMTP служба, ви не можете відключити її або заблокувати порт на firewall і час від часу в логах можна спостерігати записи про спробу підбору пароля до облікового запису. Так відбувається і з іншими сервісами.

Зазвичай на всіх своїх серверах, я закриваю SSH доступу ззовні, тому що підключаюся до своїх серверів зі свого статичного IP-адреси або через OpenVPN підключення. Але це не завжди можливо. На допомогу приходить заміна стандартних портів, або настройка на сервері служби fail2ban. У цьому прикладі ми покажемо, як встановити та використовувати fail2ban в CentOS, однак ви можете використовувати цю інструкцію і для інших дистрибутивів Linux.

Установка і первинна настройка Fail2Ban в CentOS 8/7

Пакет для установки fail2ban знаходиться в репозиторії Epel, підключимо його:

# yum install epel-release -y

Після підключення сховища, можна встановити fail2ban через yum або dnf (в CentOS 8):

# yum install fail2ban -y

установка fail2ban в linux centos

Як і будь-який інший сервіс, 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. Так як даний файл може бути перезаписаний при оновленні сервісу, для роботи потрібно створити файл в’язниця. місцевий. Також файли в директорії /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

fail2ban-статус клієнта sshd

У файлі тюрма.conf можна описати загальні параметри, які не будуть перевизначатися в в’язниця. місцевий.

Розблокуйте рядок:

ignoreip = 127.0.0.1/8

Змініть наступні значення:
bantime = 10m – час на яке буде заблокований IP
findtime = 10m – час, протягом якого будуть обчислюватися невдалі спроби авторизації.
maxretry = 3 – кількість спроб до блокування

Щоб отримувати сповіщення по електронній пошті, вам потрібно налаштувати наступні параметри:
destemail = root@build-centos.info -одержувача
sender = root@build-centos.info – відправник
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 / 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] Unban 222.186.175.216

Як ви можете бачити fail2ban працює і періодично блокує або прибирає блокування для IP адрес.

Щоб перевірити, які IP адреси заблоковані в iptables службою fail2ban, виконайте:

# iptables -L

iptables - правила для блокування окремих IP

Як бачите, з відкритим назовні ssh, час від часу хтось намагається підібрати пароль і авторизуватися. Якщо поштова статистику через якийсь час, видно, що кількість заблокованих IP зростає.

список заблокованих IP в fail2ban

Захист Apache за допомогою Fail2Ban

Якщо ви хочете налаштувати fail2ban для вашого apache (httpd), додайте наступні настройки в в’язниця. місцевий:

# выявляем неудачные попытки ввода пароля
[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 потрібно додати окремий блок в конфігураційний файл в’язниця. місцевий:

[mysqld-auth]
enabled = true
filter = mysqld-auth
port = 3306
logpath = /var/log/mysql/error.log

Ця установка захистить вас від перебору паролів для користувача mysql (це дуже частий брутфорс).

mysqld-auth - правило fail2ban для 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 (білий список). Для цього в файлі конфігурації тюрма.conf внесіть IP в рядок:

ignoreip =185.*.*.*

Додавши свій IP-адресу в виключення, я виконав кілька атак подібно попередньої і блокування не відбулося.

Як ви бачите, fai2ban досить просто в налаштуванні, але цілком ефективний засіб додаткового захисту вашого сервера від зловмисників. Для Windows на жаль, я не бачив безкоштовних програм з подібним функціоналом (можна спробувати реалізувати блокування IP адрес за допомогою PowerShell – див. Статтю Захист RDP від ​​перебору паролів).

Leave a Reply

Your email address will not be published. Required fields are marked *