🛠 Шаги настройки
1. Создаём таблицу и set для заблокированных IP:
sudo nft add table inet filter
sudo nft add set inet filter banned_ips { type ipv4_addr\; timeout 1h\; }
sudo nft add chain inet filter input { type filter hook input priority 0\; }
sudo nft add rule inet filter input ip saddr @banned_ips drop
2. Конфигурируем fail2ban для работы с nftables sets:
Создайте файл
/etc/fail2ban/action.d/nftables-set.conf:
[Definition]
actionstart =
actionstop =
actioncheck =
actionban = nft add element inet filter banned_ips { <ip> }
actionunban = nft delete element inet filter banned_ips { <ip> }
И укажите его в вашем jail:
[sshd]
enabled = true
filter = sshd
action = nftables-set[name=SSH, port=ssh, protocol=tcp]
logpath = /var/log/auth.log
maxretry = 5
3. Перезапускаем сервисы:
sudo systemctl reload nftables
sudo systemctl restart fail2ban
🔹Обычно используется для:
- Высокая частота банов (бот-атаки, сканирование)
- Централизованное управление — все IP в одном set’e
- Минимальная задержка: проверка set ≪ цепочки из отдельных правил
⚡ Полезный трюк
Можно задать TTL для записей в set, чтобы баны автоматически снимались по истечении:
nft add element inet filter banned_ips { 203.0.113.5 timeout 3600s }
Или использовать
timeout при создании set’а (как в шаге 1) для массовых записей.👉 @linuxchmod