Как настроить iptables на O(1) без боли?

Аннотация

В этой статье я хочу рассказать о том, как настроить iptables на O(1) без боли, а также сделаем, так, чтобы после перезагрузки наши изменения автоматически восстанавливались. Сделаем мы это без systemd-юнитов, cron и прочих других сложностей. Спойлер: вся установка пройдёт в 4 однострочных команды. Поехали!

Шаг 1: Установка (4 команды)

Я буду показывать это на Debian 13. Это гарантировано сработает на современных версиях Debian (>= 12), а также возможно на их производных (хотя там каких-то пакетов может не быть, смотрите репозиторий Вашего дистрибутива если это не Debian)

Шаг 1.1: установка всех нужных пакетов

Эта команда установит все необходимые пакеты:

$ sudo apt install iptables ipset netfilter-persistent iptables-persistent ipset-persistent

Шаг 1.2: создание чёрного списка

Создадим чёрный список, в котором будем хранить IP-адреса заблокированных машин (лимит = 5 миллионов, вы можете отредактировать под себя):

$ sudo ipset create blacklist hash:ip hashsize 65536 maxelem 5000000

Шаг 1.3: привяжем чёрный список к iptables

Скажем iptables: весь трафик от тех, кто находится в чёрном списке - блокировать

$ sudo iptables -I INPUT -m set --match-set blacklist src -j DROP

Шаг 1.4: сохранение изменений

И наконец, зафиксируем все изменения одной командой:

$ sudo netfilter-persistent save
Шаг 2: Ежедневные команды (инструкция)

Готово, мы установили и настроили всё необходимое. В этом разделе я расскажу вам о самых важных командах при работе с ipset. А именно: заблокировать IP, разблокировать IP, посмотреть информацию и как сохранить изменения, чтобы они пережили перезагрузку

Команда 1: блокировка IP

Эта команда заблокирует определённый IP:

$ sudo ipset add blacklist ip

Команда 2: разблокировка IP

Эта команда разблокирует определённый IP:

$ sudo ipset del blacklist ip

Команда 3: информация о чёрном спике

Данная команда покажет всю информацию о чёрном списке: название, размер, потребляемая память, заблокированные IP и многое другое!

$ sudo ipset list blacklist

Команда 4: сохранение изменений

Эту команду нужно вводить после каждой блокировки/разблокировки/любого другого изменения чёрного списка, чтобы изменения зафиксировались и не удалились после перезагрузки:

$ sudo netfilter-persistent save