nftables: zložitejšie pravidlá
Keď už ufw nestačí: štruktúra tabuliek a reťazcov nftables, hotový funkčný config, množiny adries, obmedzenie rýchlosti a presmerovanie portov.
Aktualizované 23. augusta 2026
nftables je presne ten mechanizmus jadra, na ktorom beží ufw. Použi ho priamo vtedy, keď potrebuješ pomenované množiny adries, obmedzovanie rýchlosti, rôzne politiky pre jednotlivé rozhrania alebo presmerovanie portov — teda keď sa tvoje pravidlá už nezmestia do „povoliť port“.
Nemusíš používať oba nástroje naraz: pred prepnutím vypni ufw príkazom ufw disable, inak sa pravidlá budú prekrývať a pri ladení ťa to len pomýli.
Štruktúra
Pravidlá žijú v tabuľkách, tabuľky obsahujú reťazce a reťazce obsahujú pravidlá. Reťazec je naviazaný na fázu spracovania paketov (input, forward, output) a má predvolenú politiku.
apt install -y nftables
systemctl enable --now nftables
nft list ruleset
Funkčná konfigurácia
Súbor /etc/nftables.conf:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
set admins {
type ipv4_addr
elements = { 203.0.113.5, 198.51.100.7 }
}
chain input {
type filter hook input priority 0; policy drop;
iif lo accept
ct state established,related accept
ct state invalid drop
ip protocol icmp icmp type echo-request limit rate 5/second accept
tcp dport 22 ip saddr @admins accept
tcp dport 22 ct state new limit rate 6/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;
}
}
Aplikuj a ulož:
nft -c -f /etc/nftables.conf
nft -f /etc/nftables.conf
systemctl restart nftables
Prepínač -c iba skontroluje syntax bez aplikovania pravidiel. Používaj ho vždy: politika drop s preklepom ti odreže prístup a budeš sa musieť dostať späť cez konzolu v paneli /hosting/vds/m/<id>.
Množiny adries a obmedzovanie rýchlosti
Pomenovaná množina sa upravuje za behu, bez načítania pravidiel:
nft add element inet filter admins { 192.0.2.10 }
nft delete element inet filter admins { 198.51.100.7 }
nft list set inet filter admins
Dynamická množina s časovým limitom sa hodí na vlastné blokovania:
set blocked {
type ipv4_addr
flags timeout
timeout 1h
}
Presmerovanie a nahradzovanie adries
Potrebné, ak vnútri beží kontajner alebo tunel:
table ip nat {
chain prerouting {
type nat hook prerouting priority -100;
tcp dport 8443 dnat to 10.10.0.2:443
}
chain postrouting {
type nat hook postrouting priority 100;
oifname "eth0" masquerade
}
}
Časté chyby
| Chyba | Následok | Riešenie |
|---|---|---|
Chýba pravidlo ct state established | Odpovede na odchádzajúce požiadavky sa odrežú | Pridaj ho ako prvé pravidlo |
Zabudnuté iif lo accept | Lokálne služby a databázy prestanú fungovať | Povol rozhranie loopback |
| Pravidlá aplikované, ale neuložené | Po reštarte je všetko otvorené | Zapíš ich do /etc/nftables.conf |
| ufw a nftables spolu | Nepredvídateľný výsledok | Ponechaj si len jeden nástroj |
Vyskúšaj novú sadu pravidiel v samostatnej relácii bez zatvorenia tej pracovnej. Jednoduchá poistka:
sleep 300 && nft flush rulesetna pozadí — ak sa zamkneš von, prístup sa sám vráti.
Ak tieto detaily nepotrebuješ, vráť sa k ufw: pokryje väčšinu úloh.