TGViewer
Linux: Системный администратор Linux: Системный администратор @linux_odmin · 1.92K subscribers
Post #218 920
nftables: автобан SSH без fail2ban (динамические set’ы + rate-limit)

Коротко: кладём “шумные” источники в чёрный список прямо из datapath - с авто-истечением и без внешних демонов. Подходит для брутфорса SSH и не только. Основано на limit rate over и динамических set с timeout.

Шаги

1. Таблица/цепь (если ещё нет):


nft add table inet filter
nft add chain inet filter input '{ type filter hook input priority 0; policy accept; }'


2. Два уровня списков: кратковременный “flood” и часовой “blackhole” (v4/v6):


# IPv4
nft add set inet filter ssh_flood4 '{ type ipv4_addr; flags dynamic; timeout 10s; size 131072; }'
nft add set inet filter ssh_blackhole4 '{ type ipv4_addr; flags dynamic; timeout 1h; size 65536; }'

# IPv6
nft add set inet filter ssh_flood6 '{ type ipv6_addr; flags dynamic; timeout 10s; size 131072; }'
nft add set inet filter ssh_blackhole6 '{ type ipv6_addr; flags dynamic; timeout 1h; size 65536; }'


flags dynamic + timeout обязательны для пополнения set’ов из правил; size - защита от OOM. Пример такой схемы есть в man nft.


3. Сначала рубим тех, кто уже в бане:


nft add rule inet filter input ip saddr @ssh_blackhole4 drop
nft add rule inet filter input ip6 saddr @ssh_blackhole6 drop


4. Автобан SSH: >10 новых соединений/сек с одного источника ⇒ бан на 1 час:
(используем добавление в set прямо из правила; limit rate over матчится на превышение порога)


# IPv4
nft add rule inet filter input tcp dport 22 ct state new \
add @ssh_flood4 { ip saddr limit rate over 10/second } \
add @ssh_blackhole4 { ip saddr timeout 1h } drop

# IPv6
nft add rule inet filter input tcp dport 22 ct state new \
add @ssh_flood6 { ip6 saddr limit rate over 10/second } \
add @ssh_blackhole6 { ip6 saddr timeout 1h } drop


Зачем и когда

- Нативная альтернатива fail2ban на L3/L4: реакция в ядре, без лог-парсинга.
- Хорошо для SSH/SMTP/HTTP-auth, анти-скан/скрэпинг, временное “blackhole”.
- Порог/timeout легко подкручивать под трафик.

Полезные трюки / предупреждения

🔎 Диагностика:
nft list set inet filter ssh_blackhole4 и nft monitor ruleset - видно пополнение set’ов.
🎚️ Тюнинг детектора: добавьте burst 3 к limit, чтобы сгладить джиттер (по умолчанию 5 пакетов).
🧹 Снятие бана:
nft delete element inet filter ssh_blackhole4 { 1.2.3.4 } или nft flush set inet filter ssh_blackhole4.
📐 Порядок правил: держите drop по @ssh_blackhole вверху input, раньше любых accept.
🧪 Если хочется “не более N коннектов одновременно”, используйте ct count over N (connlimit).

Сохрани, пригодится. А ты так настраиваешь?

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
  • 👍 2
  • ❤ 1
More from @linux_odmin
  1. Sep 11, 2026🔥 Когда tcpdump врёт: ловим только то, что проходит через iptables Иногда вы запускаете t…
  2. Sep 8, 2026Хотите быстро проверить, через какой интерфейс и IP ваш Linux-сервер выйдет к определённом…
  3. Sep 1, 2026Как быстро сбросить сетевой интерфейс без перезапуска системы Иногда после правки конфигур…
  4. Aug 26, 2026🔐 Fail2Ban для защиты SSH: настройка за 2 минуты SSH — первая цель сканеров и брутфорсеро…
  5. Aug 23, 2026Диагностика “висящих” TCP-соединений: как быстро найти виновника Когда приложение “подвиса…
  6. Aug 12, 2026🔥 WireGuard через systemd: автоподключение при старте + автоматический рестарт WireGuard…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →