nftables: минимальный stateful-фильтр для сервера на Ubuntu 24.04

2 июля 2026Linux

В Ubuntu 24.04 iptables работает поверх nftables (iptables-nft), но собственный набор правил удобнее писать сразу на nft: одна таблица inet покрывает IPv4 и IPv6, а наборы заменяют десятки однотипных правил.

Базовый набор

table inet filter {
  chain input {
    type filter hook input priority 0; policy drop;
    ct state established,related accept
    ct state invalid drop
    iif lo accept
    meta l4proto { icmp, ipv6-icmp } accept
    tcp dport 22 ct state new limit rate 10/minute accept
    tcp dport { 80, 443 } accept
  }
  chain forward { type filter hook forward priority 0; policy drop; }
  chain output  { type filter hook output priority 0; policy accept; }
}
  • ICMPv6 закрывать нельзя: на нём работает Neighbor Discovery, без него IPv6 просто перестанет работать.
  • Лимит на новые SSH-сессии заметно снижает шум от переборщиков паролей, не мешая обычной работе.

Как применять безопасно

nft -c -f /etc/nftables.conf      # только проверка синтаксиса
systemd-run --on-active=5min nft flush ruleset   # страховка
nft -f /etc/nftables.conf
systemctl enable nftables

Таймер-страховка сбросит правила через пять минут, если вы потеряете доступ. Убедившись, что всё работает, остановите его через systemctl list-timers и systemctl stop.

Не смешивайте ufw и собственный nft-набор на одном хосте: оба пишут в netfilter, и порядок цепочек быстро становится неочевидным.

← Все заметки