Välja on antud pakettfilter nftables 1.0.6. See ühendab IPv4, IPv6, ARP ja võrgusildade pakettfiltreerimisliidesed (mille eesmärk on asendada iptables, ip6table, arptables ja ebtables). Nftables pakett sisaldab kasutajaruumi pakettfiltri komponente, samas kui kerneli tasemel funktsionaalsust pakub nf_tables alamsüsteem, mis on osa kernelist. Linux Alates versioonist 3.13 on kerneli tasandil pakutud ainult üldist protokollist sõltumatut liidest, mis pakub põhifunktsioone andmete pakettidest eraldamiseks, andmetoimingute tegemiseks ja voo juhtimiseks.
Filtreerimisreeglid ise ja protokollispetsiifilised käitlejad kompileeritakse kasutajaruumis baitkoodiks, misjärel laaditakse see baitkood Netlinki liidese abil kerneli ja käivitatakse kernelis spetsiaalses käsus. virtuaalmasin, mis meenutab BPF-i (Berkeley pakettfiltrid). See lähenemisviis võimaldab oluliselt vähendada kerneli tasemel töötava filtreerimiskoodi mahtu ning viia kogu reeglite parsimise ja protokolliloogika kasutajaruumi.
Peamised muudatused:
- Reeglite optimeerija, mida kutsutakse valiku "-o/--optimize" määramisel, pakkib reegleid automaatselt, kombineerides neid ja teisendades kaartide ja loenditeks. Näiteks reeglid # cat ruleset.nft table ip x { chain y { type filter hook input priority filter; policy drop; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept } } Pärast "nft -o -c -f ruleset.nft" käivitamist teisendatakse see järgmiseks: ruleset.nft:4:17-74: meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 aktsepteeri ruleset.nft:5:17-74: meta iifnimi eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 aktsepteeri ruleset.nft:6:17-77: meta iifnimi eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 aktsepteeri ruleset.nft:7:17-83: meta iifnimi eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 aktsepteeri ruleset.nft:8:17-74: meta iifnimi eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 aktsepteeri: iifnimi.ip saddr.ip daddr { eth1, eth1.1.1.1. 2.2.2.3. 1, eth1.1.1.2. 2.2.2.4/1, eth1.1.1.2. 2.2.3.0-24, eth1. 1.1.1.2 } aktsepteeri
- Optimeerija saab teisendada ka kompaktsemaks vormiks reegleid, mis juba kasutavad lihtsaid hulgaloendeid, näiteks reegleid: # cat ruleset.nft table ip filter { chain input { type filter hook input priority filter; policy drop; iifname "lo" accept ct state established,related accept comment "Meie algatatud liikluses usaldame" iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept } } pärast "nft -o -c -f ruleset.nft" käivitamist pakitakse järgmiselt: ruleset.nft:6:22-149: iifnimi "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept ruleset.nft:7:22-143: iifnimi "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept into: iifnimi . ip saddr. ip daddr. udp sport. udp dport { enp0s31f6 . 209.115.181.102. 10.0.0.149. 123. 32768-65535, enp0s31f6. 216.197.228.230. 10.0.0.149. 123. 32768-65535, enp0s31f6. 64.59.144.17. 10.0.0.149. 53. 32768-65535, enp0s31f6. 64.59.150.133. 10.0.0.149. 53. 32768-65535 } aktsepteerima
- Parandatud baitkoodide genereerimise probleem intervallide ühendamisel, mis kasutavad erineva lõpuga tüüpe, näiteks IPv4 (võrgu baitide järjestus) ja meta mark (süsteemi baitide järjestus). table ip x { map w { typeof ip saddr . meta mark : verdict flags interval counter elements = { 127.0.0.1-127.0.0.4 . 0x123434-0xb00122 : accept, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : accept, } } chain k { type filter hook input priority filter; policy drop; ip saddr . meta mark vmap @w } }
- Haruldaste protokollide vastavuse parandamine toores avaldiste kasutamisel, näiteks: meta l4proto 91 @th,400,16 0x0 accept
- Intervallidega reeglite kaasamise probleemid on lahendatud: insert rule xy tcp sport { 3478-3497, 16384-16387 } counter accept
- Täiustatud JSON API toetab avaldisi set- ja map-loendites.
- Nftables Pythoni teeki laiendused võimaldavad reeglistike laadimist töötlemiseks kontrollrežiimis ("-c") ja lisavad toe väliste muutujate definitsioonile.
- Kommentaarid on esitusloendi elementides lubatud.
- Baitide edastuskiiruse limiit lubab määrata väärtuseks nulli.
Allikas: opennet.ru
