csomagszűrő kiadása , amely az iptables, ip6tables, arptables és ebtables pótlásaként fejlődik, az IPv4, IPv6, ARP és hálózati hidak csomagszűrési interfészeinek egységesítésével. Az nftables csomag tartalmazza a felhasználói térben működő csomagszűrő komponenseket, míg a kernel szintjén a nf_tables alrendszer, amely a Linux 3.13-as kiadás óta része a kernelnek, biztosítja a működést. Az nftables 0.9.5 kiadásához szükséges módosítások a kernel részét képezik. .
A kernel szintjén csupán egy általános interfész érhető el, amely független a konkrét protokoltól, és alapvető funkciókat nyújt az adatok csomagokból való kinyerésére, adatokkal való műveletek végrehajtására és az áramlás kezelésére. A szűrési szabályok és a protokoll-specifikus feldolgozók közvetlenül felhasználói térben byte-kódra vannak lefordítva, amelyet ezután a Netlink interfész segítségével töltenek be a kernelbe, és egy speciális virtuális gépben hajtanak végre a kernelben, amely hasonlít a BPF (Berkeley Packet Filter) működésére. Ez a megközelítés jelentősen csökkenti a kernel szintjén működő szűrési kód méretét, valamint a szabályok parsingját és a protokollokkal való logikai munkát a felhasználói térbe helyezi.
Főbb újítások:
- A készletekhez hozzáadódott a becslők (counter) támogatása, amely a készletelemekhez van kötve. A becslők a "counter" kulcsszóval kapcsolhatók be:
table ip x {
set y {
typeof ip saddr
counter
elemek = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}lánc z {
type filter hook output priority filter; policy accept;
ip daddr @y
}
} - A inicializáló értékek beállításához, például a múltbeli becslők helyreállításához újraindítás után, a "nft -f" parancsot használhatjuk:
# cat ruleset.nft
table ip x {
set y {
typeof ip saddr
counter
elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
counter p 192.168.10.135 counter packets 0 bytes 0 }
}lánc z {
type filter hook output priority filter; policy accept;
ip daddr @y
}
}
# nft -f ruleset.nft
# nft list ruleset
table ip x {
set y {
typeof ip saddr
counter
elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
counter p 192.168.10.135 counter packets 0 bytes 0 }
}lánc z {
type filter hook output priority filter; policy accept;
ip daddr @y
}
} - A becslők támogatása a flowtable-hez is hozzáadódott:
tábla ip foo {
flowtable bar {
hook ingress priority -100
devices = { eth0, eth1 }
counter
}chain forward {
type filter hook forward priority filter;
flow add @bar counter
}
}A becslők listáját a "conntrack -L" parancs segítségével lehet megtekinteni:
tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 packets=9 bytes=608 \
src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 packets=8 bytes=428 [OFFLOAD] mark=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 - A kapcsolódási készletekhez (concatenation, címek és portok meghatározott kombinációi, amelyek leegyszerűsítik a párosítást) hozzáadódott a "typeof" direktíva lehetősége, amely meghatározza az elemek adatainak típusát a készlet komponens elemeihez:
tábla ip foo {
halmaz whitelist {
typeof ip saddr . tcp dport
elements = { 192.168.10.35 . 80, 192.168.10.101 . 80 }
}lánc bar {
típus szűrő hook prerouting priority filter; politikai drop;
ip daddr . tcp dport @whitelist accept
}
} - A typeof direktíva most már a map-listákban is alkalmazható:
tábla ip foo {
map addr2mark {
typeof ip saddr . tcp dport : meta mark
elements = { 192.168.10.35 . 80 : 0x00000001,
192.168.10.135 . 80 : 0x00000002 }
}lánc bar {
típus szűrő hook prerouting priority filter; politikai drop;
meta mark set ip daddr . tcp dport map @addr2mark accept
}
} - Hozzáadódott a tartományok támogatása a névtelen (nem elnevezett) készletekhez:
# 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 } accept - Lehetővé vált a VLAN (802.1q) zászlókkal rendelkező csomagok eldobása a hálózati hidak feldolgozása során:
# nft add rule bridge foo bar ether type vlan reject with tcp reset
- Hozzáadódott a TCP kapcsolat azonosítóval (conntrack ID) való párosítás támogatása. A conntrack ID meghatározásához használható az "—output id" opció:
# conntrack -L —output id
udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 packets=2 \
bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 packets=2 bytes=320 \
[ASSURED] mark=0 use=1 id=2779986232# nft add rule foo bar ct id 2779986232 counter
Forrás: opennet.ru
