Välja on välja antud nftables 1.1.0 pakifiltri versioon, mis ühtlustab paketifiltrimise liideseid IPv4, IPv6, ARP ja võrgu sillade jaoks (suunatud iptables, ip6tables, arptables ja ebtables asendamisele). Versiooninumbri märkimisväärne muutus ei ole seotud radikaalsete muudatustega, vaid on lihtsalt järjepideva kümnendailmimise jätkumise tulem. Eelmise väljaanne oli 1.0.9. Samuti on välja antud seotud raamatukogude versioon libnftnl 1.2.7, mis pakub madala taseme API-d nf_tables süsteemiga suhtlemiseks.
Nftables'i paketis on kasutusruumi paketifiltreerimise komponendid, samas kui tuuma tasemel tagab töö nf_tables alamsüsteem, mis on Linuxi tuumas saadaval alates versioonist 3.13. Tuuma tasemel on olemas vaid üldine liides, mis ei sõltu konkreetsetest protokollidest ja pakub põhiülesandeid paketidest andmete ekstraheerimiseks, andmete töötlemiseks ja voogude haldamiseks.
Filtreerimisreeglid ja protokollispetsiifilised töötlejad kompileeritakse kasutusruumis byte-koodiks, seejärel laaditakse see byte-kood tuuma Netlinki liidese abil ja käivitatakse tuumas eraldi virtuaalmasinas, mis tahes BPF (Berkeley Packet Filters). Sarnane lähenemine võimaldab oluliselt vähendada filterkoodi suurust, mis töötab tuuma tasemel, ning viia kõik reeglite parsing'u funktsioonid ja protokollide töötlemise loogika kasutajaruumi.
Peamised muudatused:
- Map-väljenditesse on lisatud muutujate tugi: define dst_map = { ::1234 : 5678 } table ip6 nat { map dst_map { typeof ip6 daddr : tcp dport; elements = $dst_map } chain prerouting { ip6 nexthdr tcp redirect to ip6 daddr map @dst_map } }
- VLAN-i tugi on lisatud: ip saddr 10.1.1.1 icmp type echo-request vlan id set 321 # payload ether type 8021ad vlan id 10 vlan type 8021q vlan id 100 vlan type ip accept
- Väljendite «log» jaoks on kasutusele võetud uus stringi eelprotsessor muutujate toega: define message=»test» log prefix «my $message»
- Väljendi «meta hour» väärtuse arvutamisel on teostatud negatiivse nihke töötlemine ajavööndis, mis on määratud keskkonnamuutujaga TZ: TZ=UTC-4 nft add rule x y meta hour «22:00»
- Tagatud on baitide järjestuse konverteerimine, kui kasutatakse väljendeid ct ja meta, samuti liitmisoperatsioonide ja vahemike määratlemisel set-kogudes. map mapv6 { typeof ip6 dscp : meta mark; } meta mark set ip6 dscp map @map1 saadakse baitkood: [ payload load 2b @ network header + 0 => reg 1 ] [ bitwise reg 1 = ( reg 1 & 0x0000c00f ) ^ 0x00000000 ] [ byteorder reg 1 = ntoh(reg 1, 2, 2) ] [ bitwise reg 1 = ( reg 1 > 0x00000006 ) ] [ lookup reg 1 set mapv6 dreg 1 ] [ meta set mark with reg 1 ]
- Käsku «replace rule» on taas toetatud. replace rule ip t1 c1 handle 3 ‘jhash ip protocol . ip saddr mod 170 vmap { 0-94 : goto wan1, 95-169 : goto wan2, 170-269 }’
- On taastatud võimalus lisada võrguseadmeid olemasolevatesse flowtable'idesse: create flowtable inet filter f1 { hook ingress priority 0; counter } add flowtable inet filter f1 { devices = { dummy1 } ; }
- On lahendatud probleemid, mis tekkisid käsu «create set» kasutamisel: define ip-block-4 = { 1.1.1.1 } create set netdev filter ip-block-4-test { type ipv4_addr flags interval auto-merge elements = $ip-block-4 }
- On lahendatud probleemid TCP valikute arvulise esituse kasutamisel: tcp option 254
- Meta ja ct väljendite probleemid on lahendatud map komplektidega: meta mark set vlan id map { 1 : 0x00000001, 4095 : 0x00004095 }
- Payload ja concat väljendites on keelatud kasutada andmeid, mille suurus ületab 512 baidi.
- Käskluse «nft describe» täitmise käigus rakendatakse väärtuste arvesse võtmist failidest group, rt_mark ja rt_realms, mis asuvad kataloogides /etc/iproute2/ ja /use/share/iproute2/. # nft describe meta rtclassid meta väljend, andmetüüp realm (routing realm) (basetype integer), 32 bitti eeldefineeritud sümboolsed konstantid failist /etc/iproute2/rt_realms (dekaalses): cosmos 0 Reject statement with range meta mark set 0-100
- Tabelite nimekirja väljastamise operatsioon on kiirem. Realiseeritud on -t/—terse valiku tugi, et kiirendada käske «list table» ja «list set».
- Meter väljendite konverteerimine dünaamiliste set komplektideks on tagatud: add rule t c tcp dport 80 meter m size 128 { ip saddr timeout 2s limit rate 10/second } muudetakse: set m { type ipv4_addr size 128 flags dynamic,timeout } tcp dport 80 uuendatakse @m { ip saddr timeout 2s limit rate 10/second burst 5 packets }
- JSON formaadis esitluses on lisatud tugi synproxy objektide ja map komplektide jaoks, mis sisaldavad ühendatud andmeid.
- JSON formaadis määratletud set komplektides on rakendatud auto-merge lipu tugi.
- JSON forma kasutamisel on lubatud näidata mitmeid seadmeid plokis „chain”.
- Valikute -f/—filename kasutamisel toimub teede töötlemine suhteliselt praeguse faili katalooge.
- Valikute -I/—include puhul toimub tee sirvimine vaikeväärtusena nüüd nimekirja lõpu suunas.
- Opttsioonide -o/—optimize töö on kohandatud, et käsitleda avaldisi, mis sisaldavad väärtuste arve: # nft -c -o -f ruleset.nft Ühendamine: ruleset.nft:5:17-45: ct state invalid counter drop ruleset.nft :6:17-59: ct state established,related counter accept sisse: ct state vmap { invalid counter : drop, established counter : accept, related counter : accept } Ühendamine: ruleset.nft:7:17-43: tcp dport 80 counter accept ruleset.nft:8:17-44: tcp dport 123 counter accept sisse: tcp dport { 80, 123 } counter accept Ühendamine: ruleset.nft:9:17-64: ip saddr 1.1.1.1 ip daddr 2.2.2.2 counter accept ruleset.nft:10:17-62: ip saddr 1.1.1.2 ip daddr 3.3.3.3 counter drop sisse: ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 counter : accept, 1.1.1.2 . 3.3.3.3 counter : drop }
- Taastatud ühilduvus set elemendi dumpidega, mis on loodud nftables enne versiooni 0.9.8.
Allikas: opennet.ru
