Fail2Ban — це інструмент для підвищення безпеки серверів, який допомагає автоматично блокувати підозрілі активності, зокрема brute force атаки, спроби зловмисного підключення або доступу до сервісів. Це чудовий спосіб підсилити захист вашого сервера, особливо коли йдеться про адміністрування веб-додатків, таких як WordPress.
Що таке Fail2Ban?
Fail2Ban працює шляхом моніторингу лог-файлів вашого сервера (наприклад, SSH, Apache, Nginx, та інших), виявляючи певні шаблони підозрілої активності. Якщо зловмисник, наприклад, робить кілька невдалих спроб підключитися, Fail2Ban автоматично блокує його IP-адресу через брандмауер (наприклад, iptables) на певний час.
Як Fail2Ban працює?
- Моніторинг логів: Fail2Ban читає лог-файли сервісів, таких як SSH, веб-сервери, FTP тощо.
- Шаблони пошуку: За допомогою регулярних виразів (регулярних шаблонів), він шукає в логах ознаки підозрілих дій, наприклад, багаторазові спроби входу або помилки автентифікації.
- Автоматичне блокування: Якщо виявлено ознаки атак, інструмент додає IP-адресу порушника до списку заблокованих у брандмауері.
- Розблокування: Через деякий час 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-адреси на сервіс.
- Перейдіть на сайт AbuseIPDB і зареєструйтеся.
- Після реєстрації перейдіть у ваш обліковий запис і створіть новий 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 споживає мінімум ресурсів сервера.
Залишити відповідь