ipset

При великій кількості IP-адрес заблокованих fail2ban і записаних в iptables важливо обрати оптимальний механізм, щоб не створити навантаження на сервер.

❗ Коротко:

  • iptables: при великій кількості індивідуальних правил (по 1 на кожен IP) — ТАК, це обтяжує. Вхідні пакети перевіряються по черзі, і якщо список великий — це неефективно.

  • ipset: призначений саме для цього — високошвидкісна перевірка по великому списку IP-адрес. Він використовує хеш-таблицю — перевірка майже миттєва.


🟢 Висновок:

Метод
Кількість IP
Швидкодія
Навантаження

iptables (окремо на кожен IP)

< 100 IP

Нормальна

Мінімальне

iptables (200+ правил)

> 100

Падає

Високе

ipset + iptables

100–10 000

Дуже висока

Низьке


Використай ipset

  1. Створення списку:

ipset create dirtybots hash:ip
  1. Додавання IP (можна скриптом):

ipset add dirtybots 104.23.166.102
ipset add dirtybots 104.23.166.103
# і так далі
  1. Правило в iptables:

iptables -I INPUT -m set --match-set dirtybots src -j DROP
  1. Зберегти:

ipset save > /etc/ipset.conf
iptables-save > /etc/iptables/rules.v4
  1. Додати у автозапуск відновлення 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-скрипт, який буде:

  1. Читати /var/log/apache2/access.log

  2. Визначати IP, які лізуть на неіснуючі wp-*.php

  3. Автоматично додавати їх до ipset

Якщо цікаво — можу написати приклад такого скрипта на Bash або Python.


🔒 І головне:

ipset — не навантажує систему навіть із тисячами IP, тому можна вести довгий список забанених ботів роками, просто додаючи нові IP у той самий набір.


Хочеш? Я можу прямо зараз згенерувати скрипт:

  • який створює ipset, додає IP з твого списку

  • дозволяє легко додавати нових

  • має просту команду для майбутнього використання

Написати?

Last updated