ipset common
При великій кількості 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