nftables: минимальный stateful-фильтр для сервера на Ubuntu 24.04
В 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, и порядок цепочек быстро становится неочевидным.