Fail2Ban: Захист веб-сайтів від атак

Fail2Ban: Захист веб-сайтів від атак

Fail2Ban — це інструмент для підвищення безпеки серверів, який допомагає автоматично блокувати підозрілі активності, зокрема brute force атаки, спроби зловмисного підключення або доступу до сервісів. Це чудовий спосіб підсилити захист вашого сервера, особливо коли йдеться про адміністрування веб-додатків, таких як WordPress.

Що таке Fail2Ban?

Fail2Ban працює шляхом моніторингу лог-файлів вашого сервера (наприклад, SSH, Apache, Nginx, та інших), виявляючи певні шаблони підозрілої активності. Якщо зловмисник, наприклад, робить кілька невдалих спроб підключитися, Fail2Ban автоматично блокує його IP-адресу через брандмауер (наприклад, iptables) на певний час.

Як Fail2Ban працює?

  1. Моніторинг логів: Fail2Ban читає лог-файли сервісів, таких як SSH, веб-сервери, FTP тощо.
  2. Шаблони пошуку: За допомогою регулярних виразів (регулярних шаблонів), він шукає в логах ознаки підозрілих дій, наприклад, багаторазові спроби входу або помилки автентифікації.
  3. Автоматичне блокування: Якщо виявлено ознаки атак, інструмент додає IP-адресу порушника до списку заблокованих у брандмауері.
  4. Розблокування: Через деякий час IP-адреса автоматично розблокується, якщо не було нових спроб.

Встановлення та налаштування Fail2Ban на Ubuntu/Debian

Крок 1: Встановлення Fail2Ban

Для того щоб встановити Fail2Ban на сервері з Ubuntu або Debian, відкрийте термінал і виконайте такі команди:

sudo apt update
sudo apt install fail2ban

Крок 2: Основні налаштування

Файл конфігурації Fail2Ban знаходиться за адресою /etc/fail2ban/jail.conf. Проте редагувати його безпосередньо не рекомендується, тому що цей файл може бути перезаписаний під час оновлень. Рекомендується створити копію цього файлу:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Відкрийте файл /etc/fail2ban/jail.local для редагування:

sudo nano /etc/fail2ban/jail.local

Найбільш важливі параметри:

  • ignoreip: список IP-адрес, які не будуть заблоковані. Зазвичай ви додаєте сюди IP вашого власного комп’ютера або мережі.
  • bantime: час у секундах, на який IP буде заблокований. Наприклад, 600 означає 10 хвилин.
  • findtime: проміжок часу, протягом якого Fail2Ban буде шукати підозрілі дії (в секундах).
  • maxretry: кількість невдалих спроб перед блокуванням.

Крок 3: Захист SSH

У файлі /etc/fail2ban/jail.local ви знайдете налаштування для захисту SSH. Воно виглядає так:

[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 5

Це означає, що після п’яти невдалих спроб входу по SSH IP-адреса зловмисника буде заблокована.

Крок 4: Запуск і перевірка статусу

Після налаштування запустіть або перезапустіть Fail2Ban, щоб застосувати зміни:

sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

Перевірте статус Fail2Ban за допомогою команди:

sudo fail2ban-client status

Ця команда покаже, які jails (правила для різних сервісів) активовані і скільки IP-адрес заблоковано.

Розширені налаштування Fail2Ban для поглибленого захисту

Налаштування “bantime” для Градуйованих Блокувань

За замовчуванням, Fail2Ban блокує IP-адресу на певний проміжок часу, але можна налаштувати градуйоване блокування, коли кожна наступна спроба знову підключитися буде збільшувати час блокування.

Додайте до /etc/fail2ban/jail.local наступні параметри:

bantime.increment = true
bantime.factor = 2
bantime = 10m
maxretry = 3
  • bantime.increment – включає режим збільшення часу блокування.
  • bantime.factor – множник, за яким кожного разу збільшується час блокування (у цьому випадку — вдвічі).
  • bantime – початковий час блокування (10 хвилин).
  • maxretry – максимальна кількість спроб до блокування.

Таким чином, при кожній повторній невдалій спробі доступу, тривалість блокування буде подвоюватися.

Використання “recidive” Jail

Якщо певний IP-адрес часто намагається здійснити атаку, можна налаштувати Fail2Ban для постійного блокування таких адрес. Для цього використовується jail під назвою recidive, який дозволяє блокувати IP на більш тривалий час, якщо вони порушують кілька разів за короткий проміжок.

Щоб активувати recidive jail, додайте наступні рядки до /etc/fail2ban/jail.local:

[recidive]
enabled = true
logpath = /var/log/fail2ban.log
bantime = 1w
findtime = 1d
maxretry = 5
  • logpath – шлях до лога
  • Fail2Ban.bantime – час блокування для “рецидивістів” (в даному випадку, блокування на 1 тиждень).
  • findtime – період часу для пошуку повторних порушень (1 день).
  • maxretry – кількість повторних порушень перед довготривалим блокуванням.

Налаштування інтеграції Fail2Ban з AbuseIPDB

1. Реєстрація та Отримання API-ключа

Для початку вам необхідно зареєструватися на AbuseIPDB та отримати API-ключ. Це потрібно для того, щоб Fail2Ban міг автоматично надсилати інформацію про зловмисні IP-адреси на сервіс.

  1. Перейдіть на сайт AbuseIPDB і зареєструйтеся.
  2. Після реєстрації перейдіть у ваш обліковий запис і створіть новий API-ключ.

2. Встановлення Вимог

Потрібно встановити утиліту curl (використовується для відправки запитів до API) та Python-скрипт для інтеграції з AbuseIPDB.

Для встановлення curl скористайтеся командою:

sudo apt install curl

3. Створення скрипту для повідомлення про погані IP

Далі потрібно створити скрипт, який буде надсилати IP-адреси на AbuseIPDB через API. Створимо файл /etc/fail2ban/abuseipdb.sh

sudo nano /etc/fail2ban/abuseipdb.sh

Додайте до файлу наступний код:

#!/bin/bash
API_KEY="YOUR_API" 
IP="$1" 
COMMENT="Reported by Fail2Ban" 

curl https://api.abuseipdb.com/api/v2/report \
  --data-urlencode "ip=${IP}" \
  -d categories=18,22 \
  --data-urlencode "comment=${COMMENT}" \
  -H "Key: ${API_KEY}" \
  -H "Accept: application/json"

Не забудьте замінити "YOUR_API" на ваш дійсний API-ключ з AbuseIPDB.

  • categories – категорії порушень. Категорії 18 та 22 вказують на атаки через SSH та інші форми незаконного доступу (ви можете змінити їх згідно з документацією AbuseIPDB).
  • comment – коментар до звіту.

Збережіть файл і зробіть його виконуваним:

sudo chmod +x /etc/fail2ban/abuseipdb.sh

4.Додавання скрипту до Fail2Ban

Щоб Fail2Ban використовував цей скрипт після блокування IP, потрібно додати його до налаштувань action в конфігураційний файл /etc/fail2ban/jail.local.

Відредагуйте файл конфігурації і додайте новий action для потрібного jail (наприклад, для SSH):

[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600

action = %(action_)s
          /etc/fail2ban/abuseipdb.sh <ip>

Це налаштування дозволяє Fail2Ban автоматично викликати скрипт після блокування IP-адреси та відправляти дані на AbuseIPDB.

5. Перевірка роботи інтеграції

Щоб перевірити роботу інтеграції, ви можете штучно викликати блокування IP-адреси (наприклад, використовуючи неправильні спроби входу через SSH). Після блокування перевірте лог Fail2Ban, щоб переконатися, що скрипт викликано і дані відправлено:

tail -f /var/log/fail2ban.log

Якщо все налаштовано правильно, Fail2Ban заблокує IP-адресу та надішле її на AbuseIPDB для подальшого аналізу.

Як розблокувати IP-адресу в Fail2Ban (Unban)

Іноді може знадобитися зняти блокування з IP-адреси, яке було застосовано помилково або через інші причини. Fail2Ban дозволяє розблоковувати IP-адреси вручну або автоматично після закінчення часу блокування. Нижче описані методи для зняття блокування.

1. Розблокування через командний рядок

Fail2Ban надає зручні команди для керування блокуваннями через консоль. Ви можете скористатися командою fail2ban-client, щоб переглянути та розблокувати IP-адресу з певного jail.

Перевірка, чи IP-адреса заблокована

Щоб перевірити, чи IP-адреса заблокована в конкретному jail (наприклад, для SSH):

sudo fail2ban-client status sshd

Ця команда виведе список заблокованих IP-адрес у jail sshd (захист SSH). Якщо потрібний jail відрізняється, замініть sshd на іншу назву jail.

Розблокування IP-адреси

Щоб розблокувати IP-адресу вручну, використовуйте наступну команду:

sudo fail2ban-client set <jail> unbanip <IP>

Приклад для розблокування IP у jail для SSH:

sudo fail2ban-client set sshd unbanip 192.168.1.100

Ця команда зніме блокування з IP-адреси 192.168.1.100 для jail sshd. Замість sshd ви можете вказати інший jail, якщо IP-адреса була заблокована для іншого сервісу.

2. Виведення списку всіх заблокованих IP-адрес

Якщо ви хочете побачити всі заблоковані IP-адреси для певного jail, скористайтеся командою:

sudo fail2ban-client status <jail>

Ця команда виведе всі заблоковані IP-адреси, їх кількість, а також інші деталі щодо даного jail.

3. Розблокування IP-адреси з файлу iptables

Fail2Ban блокує IP-адреси на рівні брандмауера за допомогою iptables. Щоб розблокувати IP безпосередньо через iptables, скористайтеся командою:

Подивіться на поточні правила фільтрації для Fail2Ban:

sudo iptables -L -n

Знайдіть правило для потрібного jail та видаліть IP-адресу вручну:

sudo iptables -D <CHAIN> -s <IP> -j REJECT

Наприклад:

sudo iptables -D f2b-sshd -s 192.168.1.100 -j REJECT

Цей метод менш зручний, ніж використання fail2ban-client, але дозволяє детально контролювати правила фільтрації.

Переваги використання Fail2Ban

  • Автоматичне блокування: Інструмент не потребує постійного втручання адміністратора.
  • Гнучка конфігурація: Можна налаштувати кількість спроб підключення, час блокування та багато іншого.
  • Захист різних сервісів: Fail2Ban працює з багатьма сервісами, такими як SSH, веб-сервери, FTP, поштові сервіси тощо.
  • Мінімальне навантаження: Fail2Ban споживає мінімум ресурсів сервера.


Останні публікації

  • PowerShell для роботи з файловою системою: Поради та хитрощі
    PowerShell значно спрощує управління файлами та папками завдяки інтуїтивному синтаксису та широким функціональним можливостям. Застосовуючи вищезгадані поради, ви зможете працювати з файловою системою швидше й ефективніше, автоматизуючи більшість рутинних завдань.
  • PowerShell та Active Directory: Практичні приклади автоматизації
    PowerShell є потужним інструментом для автоматизації роботи з Active Directory. Він дозволяє: Ефективно управляти обліковими записами. Швидко налаштовувати доступи та політики. Проводити аудит змін для підвищення безпеки. Постійна автоматизація процесів в AD не лише економить час, а й забезпечує надійну й структуровану роботу IT-інфраструктури.
  • PowerShell для адміністраторів: Автоматизація рутинних завдань
    PowerShell — це інструмент, який значно полегшує роботу адміністраторів. Завдяки його функціональності ви зможете автоматизувати безліч рутинних завдань, підвищити ефективність роботи та мінімізувати помилки. Інвестуючи час у вивчення PowerShell, ви відкриєте нові можливості для управління вашими системами. Почніть з базових команд і поступово переходьте до створення складних сценаріїв!

Коментарі

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *