Die vrystelling van pakkiefilter nftables 1.0.0 is gepubliseer, wat pakkiefiltreringskoppelvlakke vir IPv4, IPv6, ARP en netwerkbrûe verenig (wat daarop gemik is om iptables, ip6table, arptables en ebtables te vervang). Die veranderinge wat nodig is vir die nftables 1.0.0-vrystelling om te werk, is ingesluit in die Linux 5.13-kern. 'n Beduidende verandering in die weergawenommer word nie met enige fundamentele veranderinge geassosieer nie, maar is slegs 'n gevolg van die konsekwente voortsetting van nommering in desimale notasie (die vorige weergawe was 0.9.9).
Die nftables-pakket bevat pakkiefilterkomponente wat in gebruikersruimte loop, terwyl die kernvlak verskaf word deur die nf_tables-substelsel, wat sedert vrystelling 3.13 deel van die Linux-kern is. Op die kernvlak word slegs 'n generiese protokol-onafhanklike koppelvlak verskaf wat basiese funksies verskaf om data uit pakkies te onttrek, bewerkings op data uit te voer en vloei te beheer.
Die filterreëls self en protokolspesifieke hanteerders word in gebruikersruimte in bytekode saamgestel, waarna hierdie bytekode met behulp van die Netlink-koppelvlak in die kern gelaai word en in 'n spesiale modus in die kern uitgevoer word. virtuele masjien, wat herinner aan BPF (Berkeley Packet Filters). Hierdie benadering maak voorsiening vir 'n beduidende vermindering in die grootte van die filterkode wat op kernvlak loop en skuif alle reëlontleding en protokollogika na gebruikersruimte.
Belangrikste innovasies:
- Ondersteuning vir die "*"-maskerelement is by stellyste gevoeg, wat geaktiveer word vir enige pakkette wat nie onder ander elemente val wat in die stel gedefinieer is nie. tabel x { kaart bloklys { tipe ipv4_addr : uitspraak vlae interval elemente = { 192.168.0.0/16 : aanvaar, 10.0.0.0/8 : aanvaar, * : drop } } ketting y { tipe filter haak prerouting prioriteit 0; beleid aanvaar; ip saddr vmap @bloklys } }
- Dit is moontlik om veranderlikes vanaf die opdragreël te definieer deur die "--definieer" opsie te gebruik. # kat toets.nft tabel netdev x { ketting y { tipe filter haak intrede toestelle = $ dev prioriteit 0; polisdaling; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
- In kaartlyste word die gebruik van konstante (staatvolle) uitdrukkings toegelaat: tabel inet filter { kaart portmap { tipe inet_service : uitspraak teller elemente = { 22 teller pakkies 0 grepe 0 : spring ssh_input, * teller pakkies 0 grepe 0 : drop } } ketting ssh_input { } ketting wan_input { tcp dport vmap @ portmap } ketting prerouting { tipe filter haak prerouting prioriteit rou; beleid aanvaar; iif vmap { "lo": spring wan_input } }
- Bygevoeg "lys hake" opdrag om 'n lys hanteerders vir 'n gegewe pakkie familie te vertoon: # nft lys hake ip toestel eth0 familie ip { haak ingang { +0000000010 ketting netdev xy [nf_tables] +0000000300 ketting inet mw [nf_hooktabelle] } { -0000000100 ketting ip ab [nf_tables] +0000000300 ketting inet mz [nf_tables] } haak vorentoe { -0000000225 selinux_ipv4_forward 0000000000 ketting inet mz [nf_tables] } haak vorentoe { -0000000225 selinux_ipv4_forward 0000000225 ketting inet mz [nf_tables] } haak vorentoe { -4 selinux_ipvXNUMX_forward XNUMX ketting inet mz [nf_tables] } XNUMX ipvXNUMX_output } haak postrouting { +XNUMX XNUMX selinux_ipvXNUMX_postroute } }
- Toublokke laat jhash-, symhash- en numgen-uitdrukkings toe om gekombineer te word om pakkies na toue in gebruikersruimte te versprei. … tou na symhash mod 65536 … tou vlae omseil na numgen inc mod 65536 … tou na jhash oif . meta mark mod 32 "queue" kan ook gekombineer word met kaartlyste om 'n tou in gebruikersruimte te kies gebaseer op arbitrêre sleutels. ... tou-vlae omseil na oifnaamkaart { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
- Dit is moontlik om veranderlikes wat 'n stellys insluit na verskeie kaarte uit te brei. definieer koppelvlakke = { eth0, eth1 } tabel ip x { ketting y { tipe filter haak invoer prioriteit 0; beleid aanvaar; iifname vmap { lo : aanvaar, $interfaces : drop } } } # nft -f x.nft # nft lys reëlstel tabel ip x { ketting y { tipe filter haak invoer prioriteit 0; beleid aanvaar; iifname vmap { "lo": aanvaar, "eth0": drop, "eth1": drop } }
- Die kombinasie van vmaps (uitspraakkaart) met tussenposes word toegelaat: # nft voeg reël xy tcp dport . ip saddr vmap {1025-65535. 192.168.10.2 : aanvaar }
- Die sintaksis van NAT-karterings is vereenvoudig. Die spesifisering van adresreekse is nou toegelaat: … snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } of eksplisiete adresse. IP-adresse en poorte: … dnat na ip saddr kaart { 10.141.11.4 : 192.168.2.3 . 80 } of kombinasies van IP-reekse en poorte: … dnat na ip saddr . tcp dport kaart { 192.168.1.2 . 80 : 10.141.10.2-10.141.10.5 . 8888-8999 }
Bron: opennet.ru
