nftablesSSH-серверы в публичной сети постоянно испытывают волну брутфорс-атак. Вместо дополнительного уровня с fail2ban можно использовать встроенные возможности nftables для динамической блокировки злонамеренных IP.
1. Создаём таблицу и базовый цепочки
sudo nft add table inet filter
sudo nft 'add chain inet filter input { type filter hook input priority 0 \; }'
sudo nft 'add set inet filter blacklist { type ipv4_addr\; flags dynamic\; }'
* table inet filter: единая таблица для IPv4/IPv6.
* chain input: обрабатывает входящий трафик до локального стека.
* set blacklist: обрабатывает динамические списки IP (добавляем IP при превышении лимита).
2. Добавляем правило учёта попыток подключения
sudo nft add rule inet filter input tcp dport 22 ct state new limit rate 10/minute accept comment "Разрешаем до 10 новых зачключений SSH в минуту"
sudo nft add rule inet filter input tcp dport 22 ct state new add @blacklist { ip saddr } expire 1h comment "Если превысили скорость — вносим в чёрный список на 1 час"
* ct state new + limit: разрешаем первые 10 новых соединений в минуту.
* add
@blacklist { ip saddr }: при каждом новом подключении вне лимита IP добавляется в blacklist.3. Блокируем пакеты из чёрного списка
sudo nft insert rule inet filter input ip saddr @blacklist drop comment "Блокируем SSH для чёрного списка"
* insert: ставим правило выше остальных, чтобы сразу сбрасывать пакеты.
*
@blacklist: любой IP из сета моментально сбрасывается.4. Сохраняем конфигурацию
sudo nft list ruleset > /etc/nftables.conf
sudo systemctl enable nftables --now
* list ruleset сохраняет текущее состояние, после перезагрузки правила восстанавливаются.
Зачем и когда использовать:
* Почему: минимизируем зависимость от внешних скриптов, снимаем нагрузку при атаке (нет лишних fork/grep/iptables).
* Когда: если сервер доступен из интернета, и надо быстро выставить «самоблок» без дополнительных демонов.
🌟 Вместо фиксированного времени (
expire 1h) можно использовать «скоростной» подход с limit rate напрямую:
nft add rule inet filter input tcp dport 22 ct state new counter limit rate over 15/minute drop comment "Быстрая блокировка при 15 попытках в минуту"
- так не потребуется динамический set, а «автоблок» сработает мгновенно.
Сохрани, пригодится!
А ты так защищаешь SSH?
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin