ipset
При великій кількості IP-адрес заблокованих fail2ban і записаних в iptables важливо обрати оптимальний механізм, щоб не створити навантаження на сервер.
❗ Коротко:
iptables: при великій кількості індивідуальних правил (по 1 на кожен IP) — ТАК, це обтяжує. Вхідні пакети перевіряються по черзі, і якщо список великий — це неефективно.
ipset: призначений саме для цього — високошвидкісна перевірка по великому списку IP-адрес. Він використовує хеш-таблицю — перевірка майже миттєва.
🟢 Висновок:
iptables
(окремо на кожен IP)
< 100 IP
Нормальна
Мінімальне
iptables
(200+ правил)
> 100
Падає
Високе
ipset
+ iptables
100–10 000
Дуже висока
Низьке
Використай ipset
ipset
Створення списку:
ipset create dirtybots hash:ip
Додавання IP (можна скриптом):
ipset add dirtybots 104.23.166.102
ipset add dirtybots 104.23.166.103
# і так далі
Правило в
iptables
:
iptables -I INPUT -m set --match-set dirtybots src -j DROP
Зберегти:
ipset save > /etc/ipset.conf
iptables-save > /etc/iptables/rules.v4
Додати у автозапуск відновлення
ipset
— наприклад, через/etc/rc.local
:
#!/bin/bash
ipset restore < /etc/ipset.conf
(або юніт systemd — якщо потрібно, можу написати)
🔧 Якщо хочеш — можу згенерувати тобі bash-скрипт, який автоматично додасть усі IP у ipset
і застосує правило.
Ось повна інструкція, як працювати з ipset
постійно, зокрема — як додавати нових ботів у майбутньому.
✅ 1. Одноразове налаштування (ти вже майже зробив):
sudo ipset create dirtybots hash:ip
sudo iptables -I INPUT -m set --match-set dirtybots src -j DROP
-I
додає правило на початок списку — це важливо, бо тоді перевірка відбувається швидше.
✅ 2. Збереження після перезавантаження
Збереження ipset:
sudo ipset save > /etc/ipset.conf
Збереження iptables:
sudo iptables-save > /etc/iptables/rules.v4
Автоматичне відновлення ipset:
Варіант 1: через /etc/rc.local
(простий)
#!/bin/bash
ipset restore < /etc/ipset.conf
exit 0
І зробити файл виконуваним:
sudo chmod +x /etc/rc.local
Варіант 2: через systemd
(краще, надійніше)
Можу створити systemd юніт, якщо треба.
✅ 3. Додавання нових ботів у майбутньому
🔹 Поодинці:
sudo ipset add dirtybots 123.45.67.89
🔹 Зі скрипта / log-аналізу:
Наприклад, ти побачив у access.log
, що бот лазить по wp-login.php
, і його IP — 98.76.54.32
. Додаєш:
sudo ipset add dirtybots 98.76.54.32
🔹 Перевірити чи IP уже доданий:
sudo ipset test dirtybots 98.76.54.32
Виведе "98.76.54.32 is in set dirtybots" або "not in set".
🔹 Після додавання — не забудь оновити збереження:
sudo ipset save > /etc/ipset.conf
❌ Видалення IP зі списку (при потребі):
sudo ipset del badbots 98.76.54.32
🧠 Порада на майбутнє:
Можеш створити власний лог-аналізатор або cron-скрипт, який буде:
Читати
/var/log/apache2/access.log
Визначати IP, які лізуть на неіснуючі
wp-*.php
Автоматично додавати їх до
ipset
Якщо цікаво — можу написати приклад такого скрипта на Bash або Python.
🔒 І головне:
ipset
— не навантажує систему навіть із тисячами IP, тому можна вести довгий список забанених ботів роками, просто додаючи нові IP у той самий набір.
Хочеш? Я можу прямо зараз згенерувати скрипт:
який створює
ipset
, додає IP з твого спискудозволяє легко додавати нових
має просту команду для майбутнього використання
Написати?
Last updated