Yo te pibliye packet filter nftables 1.0.0, inifye entèfas filtraj pake pou IPv4, IPv6, ARP ak pon rezo (ki vize pou ranplase iptables, ip6table, arptables ak ebtables). Chanjman ki nesesè pou lage nftables 1.0.0 pou travay yo enkli nan nwayo Linux 5.13 la. Yon chanjman enpòtan nan nimewo vèsyon an pa asosye ak okenn chanjman fondamantal, men se sèlman yon konsekans kontinyasyon konsistan nan nimero nan notasyon desimal (version anvan an te 0.9.9).
Pake nftables a gen ladan eleman filtre pake ki kouri nan espas itilizatè yo, pandan y ap travay nan nivo nwayo a se sou-sistèm nf_tables ki te bay, ki te fè pati nwayo Linux la depi lage 3.13. Nivo nwayo a bay sèlman yon koòdone jenerik pwotokòl endepandan ki bay fonksyon debaz pou ekstrè done ki soti nan pake, fè operasyon done, ak kontwòl koule.
Règ filtraj yo menm ak fonksyonalite espesifik pou pwotokòl la konpile an bytecode nan espas itilizatè a, apre sa yo chaje bytecode sa a nan nwayo a lè l sèvi avèk koòdone Netlink la epi yo egzekite li nan nwayo a nan yon fason espesyal. machin vityèl, ki fè panse ak BPF (Berkeley Packet Filters). Apwòch sa a pèmèt yon rediksyon enpòtan nan gwosè kòd filtraj k ap fonksyone nan nivo nwayo a epi li deplase tout analiz règ ak lojik pwotokòl nan espas itilizatè a.
Prensipal inovasyon:
- Sipò pou eleman mask "*" yo te ajoute nan lis seri, ki deklanche pou nenpòt pake ki pa tonbe anba lòt eleman defini nan seri a. table x { kat blocklist { tip ipv4_addr : vèdik drapo entèval eleman = { 192.168.0.0/16 : aksepte, 10.0.0.0/8 : aksepte, * : gout } } chèn y { kalite filtre zen prerouting priyorite 0; politik aksepte; ip saddr vmap @blocklist } }
- Li posib pou defini varyab nan liy kòmand la lè l sèvi avèk opsyon "--define". # cat test.nft tab netdev x { chèn y { type filter hook ingress devices = $dev priyorite 0; gout politik; } } # nft —defini dev="{ eth0, eth1 }" -f test.nft
- Nan lis kat jeyografik yo, yo pèmèt yo sèvi ak ekspresyon konstan (stateful): tab inet filter { map portmap { type inet_service : vèdik kontwa eleman = { 22 counter packages 0 bytes 0 : jump ssh_input, * counter packages 0 bytes 0 : drop } } chèn ssh_input { } chèn wan_input { tcp dport vmap @portmap } chèn prerouting { kalite filtre zen prerouting priyorite kri; politik aksepte; iif vmap { "lo" : so wan_input } } }
- Te ajoute kòmandman "list hooks" pou montre yon lis moun k ap okipe yon fanmi pake: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables] } hook input {-0000000100 chain ip ab [nf_tables] +0000000300 chain inet mz [nf_tables] } hook forward { -0000000225 selinux_ipv4_forward 0000000000 chain ip ac [nf_tables] -0000000225 } zen postrouting { +4 0000000225 selinux_ipv4_postroute } }
- Blòk keu pèmèt ekspresyon jhash, symhash, ak numgen yo konbine pou distribye pake nan keu nan espas itilizatè. … keu pou symhash mod 65536 … keu drapo kontoune pou numgen inc mod 65536 … keu pou jhash oif . meta mark mod 32 "keu" kapab tou konbine avèk lis kat jeyografik yo chwazi yon keu nan espas itilizatè ki baze sou kle abitrè. ... keu drapo kontoune nan kat oifname { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
- Li posib pou elaji varyab ki genyen yon lis ansanm nan plizyè kat. defini interfaces = { eth0, eth1 } tab ip x { chèn y { kalite filtre zen priyorite antre 0; politik aksepte; iifname vmap { lo : aksepte, $ interfaces : gout } } } # nft -f x.nft # nft list ruleset table ip x { chèn y { tape filter hook input priyorite 0; politik aksepte; iifname vmap { "lo" : aksepte, "eth0" : gout, "eth1" : gout } } }
- Konbine vmaps (kat vèdik) nan entèval pèmèt: # nft ajoute règ xy tcp dport . ip saddr vmap {1025-65535 . 192.168.10.2 : aksepte }
- Yo senplifye sentaks map NAT yo. Kounye a, ou ka presize entèval adrès: … snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } oubyen sa ki eksplisit. Adrès IP yo ak pò yo: ... dnat to ip saddr map { 10.141.11.4 : 192.168.2.3 . 80 } oubyen konbinezon seri adrès IP ak pò yo: ... dnat to ip saddr . tcp dport map { 192.168.1.2 . 80 : 10.141.10.2-10.141.10.5 . 8888-8999 }
Sous: opennet.ru
