TGViewer
Linux: Системный администратор Linux: Системный администратор @linux_odmin · 1.92K subscribers
Post #217 971
nftables без fail2ban: динамический бан брутфорса SSH (IPv4/IPv6)

Задача: быстро отстреливать источники, ломающие ssh, без демонов и лог-парсеров. Решение - динамический set с таймаутом + правило, которое само добавляет нарушителя.

Шаги

1. Создаём таблицу, набор и цепочку:


sudo nft -f - <<'EOF'
table inet fw {
set ssh_bad {
type inet_addr
flags timeout
timeout 1h # дефолт для элементов
}

chain input {
type filter hook input priority 0; policy accept;

iif lo accept
ct state established,related accept

# уже занесённых — вон:
ip saddr @ssh_bad drop

# детект частых новых соединений на 22/tcp и бан + дроп:
tcp dport 22 ct state new limit rate over 10/minute \
add @ssh_bad { ip saddr timeout 2h } counter drop
}
}
EOF


2. Ручное управление бан-листом (админ-бан/разбан):


sudo nft add element inet fw ssh_bad { 203.0.113.5 timeout 24h comment "manual" }
sudo nft delete element inet fw ssh_bad { 203.0.113.5 }


3. Наблюдение за изменениями сета (для отладки):


sudo nft monitor set


4. Персистентность (Debian/Ubuntu/RHEL/Alma):


# Проверь синтаксис и атомарно загрузись
sudo nft -c -f /etc/nftables.conf && sudo nft -f /etc/nftables.conf
sudo systemctl enable --now nftables


совет: вынеси блок в /etc/nftables.d/ssh-ban.nft и подключи include в /etc/nftables.conf.


Зачем и когда

- Базовая защита от брутфорса без сторонних сервисов.
- Подходит для edge/VM/контейнер-хостов, где не нужен полный fail2ban.
- Работает в family inet → одна логика и для IPv4, и для IPv6.

Трюки / best practices

- limit rate over срабатывает только при превышении порога - нормальные пользователи не пострадают.
- Не делай flush table inet fw в бою: обнулятся текущие баны (timeouts). Обновляй правила точечно (nft -a list ruleset, затем delete rule handle … / add rule …) или проверяй конфиг -c перед загрузкой.
- Для нестандартных портов поменяй tcp dport 22 на свой.

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

👉 @linux_odmin
  • 👍 4
  • ❤ 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 →