Na úrovni jádra je k dispozici pouze generické rozhraní nezávislé na protokolu, které poskytuje základní funkce pro extrakci dat z paketů, provádění operací s daty a řízení toku. Samotná pravidla filtrování a obslužné rutiny specifické pro protokol jsou zkompilovány do bajtkódu uživatelského prostoru, načež je tento bajtkód načten do jádra pomocí rozhraní Netlink a spuštěn v jádře ve speciálním virtuálním stroji připomínajícím BPF (Berkeley Packet Filters). Tento přístup umožňuje výrazně zmenšit velikost filtrovacího kódu běžícího na úrovni jádra a přesunout všechny funkce parsovacích pravidel a logiku práce s protokoly do uživatelského prostoru.
Hlavní inovace:
- Do sad byla přidána podpora čítačů paketů a provozu spojených s prvky sady. Počítadla se aktivují pomocí klíčového slova „počítadlo“:
tabulka ip x {
nastavit y {
typ ip saddr
proti
prvky = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}řetěz z {
typ filtru háček výstupní prioritní filtr; přijmout politiku;
ip daddr @y
}
} - Chcete-li nastavit počáteční hodnoty čítačů, například pro obnovení předchozích čítačů po restartu, můžete použít příkaz „nft -f“:
# cat ruleset.nft
tabulka ip x {
nastavit y {
typ ip saddr
proti
prvky = { 192.168.10.35 čítačové pakety 1 bajty 84, 192.168.10.101 \
čítač p 192.168.10.135 pakety čítače 0 bajtů 0 }
}řetěz z {
typ filtru háček výstupní prioritní filtr; přijmout politiku;
ip daddr @y
}
}
# nft -f ruleset.nft
#nft sada pravidel seznamu
tabulka ip x {
nastavit y {
typ ip saddr
proti
prvky = { 192.168.10.35 čítačové pakety 1 bajty 84, 192.168.10.101 \
čítač p 192.168.10.135 pakety čítače 0 bajtů 0 }
}řetěz z {
typ filtru háček výstupní prioritní filtr; přijmout politiku;
ip daddr @y
}
} - Do flowtable byla také přidána podpora čítačů:
tabulka ip foo {
flowtable bar {
priorita vstupu háku -100
zařízení = { eth0, eth1 }
proti
}řetěz vpřed {
typ filtrového háku dopředný prioritní filtr;
flow add @bar counter
}
}Seznam čítačů můžete zobrazit pomocí příkazu „conntrack -L“:
tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 pakety=9 bajtů=608 \
src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 pakety=8 bajtů=428 [OFFLOAD] značka=0 \
secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
packets=1005763 bytes=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
packets=967505 bytes=50310268 [OFFLOAD] mark=0 secctx=null use=2 - V sadách zřetězení (zřetězení, určité svazky adres a portů, které zjednodušují srovnání) je možné použít direktivu „typeof“, která určuje datový typ prvků pro jednotlivé části prvků množiny:
tabulka ip foo {
nastavit seznam povolených {
typ ip saddr. tcp dport
prvky = { 192.168.10.35. 80, 192.168.10.101. 80}
}řetězová lišta {
typ filter hook prerouting priority filter; pokles politiky;
ip tatínek. tcp dport @whitelist přijmout
}
} - Direktiva typeof se nyní vztahuje také na spojení v seznamech map:
tabulka ip foo {
mapa addr2mark {
typ ip saddr. tcp dport: značka meta
prvky = { 192.168.10.35. 80 : 0x00000001,
192.168.10.135. 80 : 0x00000002}
}řetězová lišta {
typ filter hook prerouting priority filter; pokles politiky;
meta mark set ip daddr . tcp dport map @addr2mark přijmout
}
} - Přidána podpora pro spojení rozsahů v anonymních (nepojmenovaných) sadách:
# nft add rule inet filter input ip daddr . tcp dport\
{ 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } přijmout - Možnost zahodit pakety s příznaky 802.1q (VLAN) při zpracování síťových mostů je poskytována:
# nft add rule bridge foo bar ether type vlan odmítnutí s tcp resetem
- Přidána podpora pro párování podle identifikátoru relace TCP (conntrack ID). Chcete-li zjistit ID conntrack, můžete použít možnost „--output id“:
# conntrack -L —ID výstupu
udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 paketů=2 \
bajtů=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 pakety=2 bajty=320 \
[ZAJIŠTĚNO] známka=0 použití=1 id=2779986232# nft přidat pravidlo foo bar ct id 2779986232 counter
Zdroj: opennet.ru