fail2ban: ufw - NO, iptables - YES
https://zomro.com/rus/blog/faq/365-how-to-install-and-configure-fail2ban-in-ubuntu-2004
Хочеш, поясню як UFW взаємодіє з fail2ban, або якісь конкретні приклади для веб-серверів?
На Ubuntu Server 24.04 рекомендовано дозволити fail2ban працювати напряму з iptables, а не через ufw. Ось чому:
❗ Причини обрати iptables напряму:
iptables напряму:Надійність:
fail2banпрацює черезiptablesбез посередників, що забезпечує прямий, швидкий і контрольований доступ до блокування IP-адрес.Робота через
ufwтехнічно можлива, але це додає проміжний шар, що може призвести до конфліктів, особливо при складних правилах або власнихufw-профілях.
Гнучкість:
Через
iptablesти можеш детальніше налаштовувати ланцюжки (chains) і вести роздільну статистику поfail2ban.ufwне дає повного доступу до низькорівневих деталейiptables, тому деякі функціїfail2banможуть працювати менш ефективно.
Офіційна документація
fail2banза замовчуванням передбачає використанняiptables.
Як воно працює з iptables:
При спрацюванні фільтру
fail2banдодаєDROP/REJECTправила до спеціального ланцюгаf2b-*вiptables.Ці правила автоматично видаляються після закінчення
bantime.
А що з ufw?
ufw?ufw сам по собі — фронтенд до iptables, тож теоретично можна створити jail типу ufw, який викликає ufw deny для IP. Але:
Це повільніше, бо
ufwщоразу перевизначає весь набір правил.Іноді після перезавантаження
ufw— блокування відfail2banвтрачаються.Не всі дистрибутиви підтримують
action = ufwстабільно.
Підсумок:
iptables напряму
✅ Так
Швидше, стабільніше, офіційно підтримується
через ufw
⚠ Не рекомендовано
Повільніше, можуть бути конфлікти
Чи правильно я зрозумів? Якщо fail2ban щось запише у iptables, а я потім, через ufw відкрию якійсь порт, то це може скинути попередні налаштування в iptables від fail2ban?
Так, ти правильно зрозумів. І ось детальніше пояснення:
❗ Потенційна проблема: ufw перезаписує правила iptables
ufw перезаписує правила iptablesКоли ти виконуєш команду ufw enable, ufw reload або змінюєш правила (наприклад, ufw allow 80), ufw перегенеровує всю свою таблицю iptables. Внаслідок цього:
Правила, які
fail2banзаписав уiptables, можуть бути втрачені (видалені).Це особливо стосується, якщо
fail2banдодав правила післяufw enable, а ти потім змінивufw.
Чому так відбувається?
ufw не знає про правила, які створили інші сервіси (fail2ban, Docker, iptables вручну). Він просто:
Скидає всі наявні правила.
Встановлює ті, що описані у своїй конфігурації (
/lib/ufw/user.rules,/etc/ufw/тощо).
fail2ban, у свою чергу, динамічно додає свої правила після запуску, і їх там нема — тож ufw їх не відновить.
Як уникнути цієї проблеми:
Не використовуй
ufw, якщо активно користуєшсяfail2ban— краще писати правила напряму черезiptablesабо скриптами.АБО запускай
fail2banпісляufw, і більше не чіпайufw(не викликайufw reload,ufw allow, тощо).Якщо дуже хочеш використовувати
ufw, то:Додай
fail2banдо systemd післяufw:І встав:
Альтернатива:
Налаштуй
iptablesнапряму (абоnftables, якщо сучасніший підхід).А
ufwвзагалі відключи:
якщо я відключу ufw, то правила, які ввів через нього в iptables все одно будуть діяти?
Ні, правила, які ти додав через ufw, перестануть діяти після ufw disable, і ось чому:
Що робить ufw disable?
ufw disable?Коли ти виконуєш:
відбувається таке:
ufwскидає всі свої iptables-правила.Всі дозволи/заборони, які були додані через
ufw, вилучаються.Залишається лише "чиста" таблиця
iptables(або те, що інші сервіси встигли туди додати післяufw).
Перевірка:
Перед і після виконання ufw disable ти можеш подивитися правила:
Після ufw disable ланцюги типу ufw-user-input, ufw-before-input — зникнуть.
Якщо ти хочеш залишити правила назавжди:
Не використовуй
ufw, а пиши правила напряму вiptablesабоnftables.Або експортуй поточні iptables-правила і імпортуй після перезапуску:
Висновок:
ufw disable
Всі правила ufw видаляються з iptables
ufw enable
ufw знову застосовує свої правила
Правила fail2ban
Залишаються (якщо fail2ban ще активний)
Якщо хочеш, я можу показати, як відтворити ufw-аналогічне правило вручну через iptables, без ufw.
покажи на прикладі: спочатку, через ufw я закрив усі порти, потім відкрив порти з tcp для http, https і ssh (2202). Можливо, в майбутньому буду ще використовувати пошту.
Ось готовий Bash-скрипт для налаштування iptables згідно з твоїми вимогами: закрити всі порти, дозволити HTTP, HTTPS, SSH (порт 2202) і з підготовкою до можливого використання поштових сервісів (закоментовано). Коментарі всередині — українською.
✅ Як використовувати:
Збережи у файл, наприклад:
setup-firewall.shЗроби виконуваним:
Запусти з правами
root:
Хочеш, я можу додати опцію збереження правил через iptables-persistent, якщо ти плануєш автоматичне завантаження після перезавантаження системи.
інакше ці всі налаштування після перезавантаження перестануть діяти?
Так, без збереження — всі ці налаштування, зроблені через iptables, будуть втрачені після перезавантаження.
iptables за замовчуванням працює лише в оперативній пам’яті. Після рестарту система просто завантажить "чисту" конфігурацію (або ту, що задає ufw, якщо він увімкнений).
🔒 Як зберегти налаштування назавжди:
Варіант 1 — через iptables-persistent (рекомендовано)
iptables-persistent (рекомендовано)Встановити пакет:
Після цього збережи правила:
Перевір, що вони завантажуються після перезавантаження:
📁 Правила будуть збережені в:
/etc/iptables/rules.v4(для IPv4)/etc/iptables/rules.v6(для IPv6, якщо потрібно)
Варіант 2 — вручну через скрипт на старті
Можеш просто вкинути свій setup-firewall.sh у автозавантаження:
Це виконає скрипт щоразу, коли мережа піднімається (перед eth0/enp*).
🔧 Порада:
Якщо в тебе IPv6 увімкнено — не забудь або:
закрити його,
або налаштувати паралельно
ip6tables.
Якщо треба, покажу приклад для IPv6 або rules.v6.
Тобі зручно, якщо я одразу модифікую той скрипт і додам команду збереження правил через netfilter-persistent?
якщо це просто додається в скрипт, то дай лише ці рядки
Звісно. Просто додай оці два рядки в кінець свого скрипта після усіх iptables -A ...:
А якщо хочеш переконатися, що сервіс увімкнено:
Примітка:
netfilter-persistentзберігає правила в/etc/iptables/rules.v4автоматично.
Якщо треба — можу дати перевірку на наявність пакету та встановлення його в скрипті, але ці рядки — все, що потрібно для збереження.
де fail2ban зберігає свої налаштування і які опції його опції є найвживаніші?
📂 Де fail2ban зберігає свої налаштування
fail2ban зберігає свої налаштування1. Основний конфіг-файл:
Не редагуй його напряму! Він може бути перезаписаний при оновленні пакету.
2. Правильний спосіб:
Або, ще краще, окремі файли в:
Усі
*.localіjail.d/*.confперевизначають відповідні налаштування зjail.conf.
3. Фільтри (regex, що шукають атаки в логах):
Там, наприклад, sshd.conf, apache-auth.conf, тощо.
4. Дії (як саме блокувати IP):
Там визначено, як використовувати iptables, ufw, sendmail, route, тощо.
⚙️ Найвживаніші опції в fail2ban
fail2banГлобальні параметри (в [DEFAULT]):
bantime
600 (10 хв)
Як довго тримати IP в бані (можна задати 1h, 1d, -1 для перманентного)
findtime
600
Проміжок часу (в сек), протягом якого шукаються спроби атаки
maxretry
5
Скільки разів можна помилитися до блокування
backend
auto
Чим читати лог-файли: systemd, polling, auto
usedns
warn
Чи виконувати DNS lookup
ignoreip
127.0.0.1/8 ::1
IP-адреси, які ніколи не банити (додай свій IP тут!)
Для кожного "jail" (наприклад [sshd]):
enabled
true
Увімкнути правило
port
ssh або 2202
Порт, який моніторити
filter
sshd
Який фільтр використовувати з /etc/fail2ban/filter.d/
logpath
/var/log/auth.log
Який лог читати
action
iptables-multiport або ufw
Яку дію виконувати для бану
📌 Приклад /etc/fail2ban/jail.local: під SSH на порті 2202
/etc/fail2ban/jail.local: під SSH на порті 2202Хочеш — можу одразу згенерувати jail.local конкретно під твій нестандартний SSH-порт (2202), з оптимальними налаштуваннями.
Ось готовий файл jail.local, налаштований під SSH на порті 2202, з типовими, але вже посиленими параметрами захисту.
📄 /etc/fail2ban/jail.local
/etc/fail2ban/jail.local📌 Що ще можна зробити після створення jail.local
jail.localПерезапусти
fail2ban:Перевір активність
jail:Перевір конкретний
jail:Додай свій IP до
ignoreip, щоб не забанити себе.
🔐 Якщо хочеш, я можу показати, як переглядати заблоковані IP або як вручну розблокувати адресу, якщо вона потрапила під бан.
Добре. Ось основні команди для перегляду, розблокування і роботи з IP, які потрапили під бан у fail2ban.
📋 Перевірка статусу
Загальний статус:
Виведе список активних jail (правил). Наприклад:
Статус конкретного jail, наприклад sshd:
jail, наприклад sshd:Бачиш щось таке:
🚫 Ручне розблокування IP
Розблокувати IP:
Заміни
192.0.2.123на фактичну IP-адресу.
🚷 Примусово забанити IP вручну
Іноді треба "вручну покарати":
🔁 Перезавантаження / перевірка конфігурації
Перезапустити fail2ban:
Перевірити, чи конфіг коректний:
🧩 Корисне: лог-файл fail2ban
fail2banЛог можна переглянути тут:
Приклад:
Готова ще й bash-функція, яка покаже заблоковані IP, або зробити просте TUI-меню — дай знати.
Last updated