Megjelent az nftables 1.0.7-es verziója, amely egységesíti a csomagszűrési interfészeket IPv4, IPv6, ARP és hálózati hídak számára (célja az iptables, ip6tables, arptables és ebtables helyettesítése). Az nftables csomag tartalmazza a felhasználói térben működő csomagszűrő összetevőket, míg a kernel szintjén a nf_tables alrendszer biztosítja a funkciókat, amely a Linux 3.13-as verziójától kezdődően érhető el. A kernel szintjén csak egy általános interfész áll rendelkezésre, amely független a konkrét protokolloktól és alapvető funkciókat biztosít a csomagok adatainak kinyerésére, adatműveletek végrehajtására és az adatfolyam kezelésére.
Közvetlenül a szűrési szabályok és a protokollspecifikus kezelők felhasználói térben bájt kódba vannak fordítva, majd ezt a bájt kódot a Netlink interfész segítségével betöltik a kernelbe, ahol speciális környezetben végrehajtásra kerül. virtuális gépben, amely a BPF (Berkeley Packet Filters) eljárásra emlékeztet. Ez a megközelítés jelentősen csökkenti a kernel szinten működő szűrési kód méretét, miközben az összes szabályok parszolásával és a protokollokkal kapcsolatos logikával kapcsolatos funkciót a felhasználói térbe helyezi.
Főbb változások:
- A Linux 6.2+ kernelű rendszerekhez hozzáadva a vxlan, geneve, gre és gretap protokollok leképezésének támogatása, amely lehetővé teszi az egyszerű kifejezések használatát a kapszulázott csomagok fejlécének ellenőrzésére. Például az ellenőrzéshez IP address a VxLAN-ba ágyazott csomag fejlécében mostantól olyan szabályokat használhatunk, amelyek nem igénylik a VxLAN fejléc előzetes de-kapszulázását és a szűrő interfészhez való hozzárendelését: … udp dport 4789 vxlan ip protocol udp … udp dport 4789 vxlan ip saddr 1.2.3.0/24 … udp dport 4789 vxlan ip saddr . vxlan ip daddr { 1.2.3.4 . 4.3.2.1 }
- Támogatást kaptak a maradékok automatikus egyesítése részleges elemeltávolítás után a set-listából, amely lehetővé teszi egy elem vagy egy tartomány részének eltávolítását a meglévő tartományból (korábban a tartományt csak teljesen lehetett eltávolítani). Például, miután eltávolítottuk a 25-ös elemet a set-listából, amely tartományokat tartalmazott 24-30 és 40-50, a listában az alábbiak maradnak: 24, 26-30 és 40-50. Az automatikus egyesítés működéséhez szükséges javításokat a stabil 5.10-es vagy újabb kernel ágon fogják megjeleníteni. # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24-30, 40-50 } } } # nft delete element ip x y { 25 } # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24, 26-30, 40-50 } } }
- Engedélyezve van a kapcsolat és a tartományok használata az címátfordítási leképezésnél (NAT). table ip nat { chain prerouting { type nat hook prerouting priority dstnat; policy accept; dnat to ip daddr . tcp dport map { 10.1.1.136 . 80 : 1.1.2.69 . 1024, 10.1.1.10-10.1.1.20 . 8888-8889 : 1.1.2.69 . 2048-2049 } persistent } }
- Hozzáadva a «last» kifejezés támogatása, amely lehetővé teszi a szabályelem vagy a készletlista utolsó használatának idejének megismerését. A funkció a Linux 5.14 kernel verziótól kezdve érhető el. table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h } chain z { type filter hook output priority filter; policy accept; update @y { ip daddr . tcp dport } } } # nft list set ip x y table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h elements = { 172.217.17.14 . 443 utolsó használat 1s591ms timeout 1h lejár 59m58s409ms, 172.67.69.19 . 443 utolsó használat 4s636ms timeout 1h lejár 59m55s364ms, 142.250.201.72 . 443 utolsó használat 4s748ms timeout 1h lejár 59m55s252ms, 172.67.70.134 . 443 utolsó használat 4s688ms timeout 1h lejár 59m55s312ms, 35.241.9.150 . 443 utolsó használat 5s204ms timeout 1h lejár 59m54s796ms, 138.201.122.174 . 443 utolsó használat 4s537ms timeout 1h lejár 59m55s463ms, 34.160.144.191 . 443 utolsó használat 5s205ms timeout 1h lejár 59m54s795ms, 130.211.23.194 . 443 utolsó használat 4s436ms timeout 1h lejár 59m55s564ms } } }
- Hozzáadva a kvóták meghatározásának lehetősége a set-listákban. Például, ha a forgalom kvótáját szeretnénk meghatározni minden egyes cél IP-cím számára, a következőképpen adhatjuk meg: table netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device «eth0» priority filter; policy accept; ip daddr @y drop } } # nft add element inet x y { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list ruleset table netdev x { set y { type ipv4_addr size 65535 quota over 10000 mbytes elements = { 8.8.8.8 kvóta over 10000 mbytes felhasznált 196 byte } } chain y { type filter hook egress device «eth0» priority filter; policy accept; ip daddr @y drop } }
- Megengedett a konstansok használata a set-listákban. Például, ha a célcím és a VLAN azonosító a lista kulcsaként működik, közvetlenül megadhatjuk a VLAN számot (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id size 2048 flags dynamic,timeout timeout 1m } chain c { type filter hook ingress device eth0 priority 0; policy accept; ether type != 8021q update @s { ether daddr . 123 } counter } }
- Hozzáadva az új «destroy» parancs, amely képes az objektumok végleges eltávolítására (ellentétben a delete paranccsal, nem generál ENOENT-ot, ha nem létező objektumot próbálunk eltávolítani). A működéshez legalább Linux 6.3-rc kernel szükséges. destroy table ip filter
Forrás: opennet.ru
