fail2ban + ipset

Добре 👍 Давай зведемо все в одну чітку інструкцію для Ubuntu Server 24.04, щоб у тебе був порядок із iptables, ip6tables, fail2ban та ipset.


✅ Інтеграція fail2ban + ipset + netfilter-persistent

1. Пакети

Переконайся, що все потрібне встановлено:

apt install ipset iptables-persistent netfilter-persistent

2. Створення ipset-наборів

Створюємо їх вручну або в скрипті ініціалізації (важливо, щоб вони існували ДО завантаження правил iptables):

ipset create banned_inet4 hash:ip family inet hashsize 1024 maxelem 65536
ipset create banned_inet6 hash:ip family inet6 hashsize 1024 maxelem 65536

"banned_" можна змінювати, а "inet4" і "inet6" краще залишити, це дозволить створити спільний для різних IP-set наборів файл ipset-multi.conf (див. нижче).

Також, створимо набір для ручного запису групи адрес (є такі боти, які чередують IP як 81.30.107.*)

ipset create manual_block hash:net family inet -exist

Додавати туди так:

ipset add manual_block 81.30.107.0/24

Одноразово включаємо цей набір в iptables:

І зберігаємо:

Дивимось:


3. Підтримка IPv6

Якщо сервер підтримує IPv6, то пропиши "allowipv6 = yes" у /etc/fail2ban/fail2ban.conf:

Інакше буде вилазити попередження: "WARNING 'allowipv6' not defined in 'Definition'. Using default one: 'auto'"

Щоб fail2ban автоматично додавав IP у набори ipset (banned_inet4 / banned_inet6) створимо спільний для них action: /etc/fail2ban/action.d/ipset-multi.conf

і цей action треба буде прописати у конфіг /etc/fail2ban/jail.local:


4. netfilter-persistent + ipset

За замовчуванням netfilter-persistent обробляє тільки iptables і ip6tables. Щоб інтегрувати ipset, створюємо плагін:

/usr/share/netfilter-persistent/plugins.d/10-ipset:

Зробити виконуваним:

Тепер netfilter-persistent save буде зберігати і ipset.


5. Автозбереження ipset щогодини о :40

Створюємо сервіс /etc/systemd/system/ipset-save.service:

Створюємо таймер /etc/systemd/system/ipset-save.timer:

Увімкнути:

Перевірка:


6. Перевірка після перезавантаження

  1. Перезавантажуєш сервер.

  2. Дивишся, чи піднялись ipset-набори:

  3. Дивишся, чи піднялись iptables-правила:

  4. Переконуєшся, що netfilter-persistent активний:


📌 Підсумок

  • fail2ban банить у ipset.

  • netfilter-persistent зберігає/відновлює ipset разом з iptables.

  • Таймер ipset-save.timer раз на годину о :40 хв. додатково зберігає ipset у файл /etc/iptables/ipsets.

  • Після перезавантаження всі правила і бан-листи повертаються автоматично.


DELETE DELETE DELETE DELETE DELETE DELETE

Створюємо сервіс для відновлення ipset при старті системи.

Спочатку збережемо активні набори у файл (наприклад /etc/ipset.conf):

(якщо працюємо через sudo: sudo sh -c 'ipset save > /etc/ipset.conf' )

Активуємо сервіс

Тепер при кожному старті системи ipset автоматично відновлюватиметься ще до запуску iptables/netfilter-persistent.

Створюю три файли:

  • сервіс (який виконує команду збереження) - ipset-save.service,

  • таймер (який запускає цей сервіс раз на 30 хв) - ipset-save.timer і

  • сервіс, який буде перед вимкненням/перезавантаженням зберігати актуальний стан ipset у /etc/ipset.conf. Це дає гарантію, що навіть при форсованому ребуті список не загубиться..

nano /etc/systemd/system/ipset-save.service

/etc/systemd/system/ipset-save.timer

nano /etc/systemd/system/ipset-restore.service

nano /etc/systemd/system/ipset-save-shutdown.service

Last updated