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