Příručka pro nftables
Krátká příručka na použítí příkazu nft pro nastavení packetového filteru v
linuxovém jádře. Formou zápisu může připomínat známý příkaz ip. Tento článek
vůbec nemá za cíl vysvětlit, jak se firewall nastavuje. Jen má být příručkou
pro často používané příkazy.
Výpis pravidel
nft list ruleset
Výpis pravidel včetně čísla (handle) pravidla:
nft -a list ruleset
Uložení pravidel
nft list ruleset > /etc/nft.rules
Příkaz nft vykonává změny v pravidlech atomicky, je tedy vhodné do souboru
pro načtení pravidel na počátek připsat flush ruleset, který způsobí vymazání pravidel.
Upravené uložení pravidel potom může vypadat:
echo "flush ruleset" > /etc/nft.rules
nft list ruleset >> /etc/nft.rules
V Debianu se o načítání pravidel stará systémová unita nftables.service, která
očekává pravidla v souboru /etc/nftables.conf. Tento soubor již obsahuje zrušení
předchozích pravidel flush ruleset a také správný interpretr #!/usr/sbin/nft -f.
Je spustitelný, což umožňuje, po jeho změně, zavedení pravidel pomocí prostého spuštění:
/etc/nftables.conf
Celkem snadno bychom si mohli napsat skript pro uložení pravidel a jeho volání před každým ukončením nftables unity (nebo jiné vytvořené pro tento účel). Snadno tak dosáhneme například persistentních counterů, pokud je v pravidlech používáme a chceme zachovat jejich hodnoty i například po rebootu.
Načtení uložených pravidel
nft -f /etc/nft.rules
Vložení nového pravidla
nft add rule inet filter input tcp dport 5432 accept
Vložení pravidla s poznámkou a počítadlem
Poznámka je skutečně součástí pravidla (NFTA_RULE_USERDATA) a je vypisována při vypsání pravidel. Nejedná se tedy pouze o popis pravidla v konfiguračním souboru, ale je svázáno s pravidlem. Toto velmi usnadňuje čtení rozsáhlejších firewallů, kdy se nemusíme spoléhat na konfigurační soubory, ale poznámky vidíme přímo ve výpisu pravidel z jádra.
nft add rule inet filter input tcp dport 3306 counter drop comment "mysql"
Vložení pravidla na pozici
Vloží pravidlo za pravidlo definované parametrem position:
nft add rule inet filter input position 7 ip saddr @blist4 counter drop
nft add rule inet filter input position 7 ip6 saddr @blist6 counter drop
Handles neoznačují pořadí pravidla, ale skutečně ono pravidlo. Je tedy, na
rozdíl od výpisu iptables -L -n -v --line-numbers možné používat přidávání
pravidel na určené pozice opakovaně a nebude se nám chaoticky měnit jejich pořadí.
Smazání pravidla dle čísla
nft delete rule inet filter input handle 7
nft delete rule inet filter output handle 17
Vytvořeni setu ip (seznam ip)
Pokud chceme například filtrovat na základě zdrojové adresy, kterých bude vícero, je výhodné si vytvořit set a adresy přidávat do něj.
Flag interval je nutný, pokud chceme do seznamu přidávat i celé sítě, nikoliv konkrétní adresu:
nft add set inet filter blist4 '{ type ipv4_addr; flags interval; }'
nft add set inet filter blist6 '{ type ipv6_addr; flags interval; }'
Přidání položky (adresy) do setu
nft add element inet filter blist4 { 198.51.100.0/24 }
Smazání setu
nft del set inet filter blist