Avaldatud on nftables 1.1.0 pakettfilteri vĂ€ljaanne, mis ĂŒhtlustab pakettide filtreerimise liideseid IPv4, IPv6, ARP ja vĂ”rgu sildade jaoks (sihiks on asendada iptables, ip6tables, arptables ja ebtables). Oluline versioonimuudatus ei ole seotud radikaalsete muudatustega, vaid on lihtsalt jĂ€rjestikuse kordade numbreerimise tagajĂ€rg (eelmine vĂ€ljaanne oli 1.0.9). Samuti on vĂ€lja antud kaasnev raamatukogu libnftnl 1.2.7, mis pakub madala taseme API-d suhtlemiseks nf_tables sĂŒsteemiga.
Nftables'i paketti kuuluvad kasutajaruumi töötavad pakettfilteri komponendid, samas kui tuuma tasemel tagab töö nf_tables sĂŒsteem, mis on osa Linuxi tuumast alates versioonist 3.13. Tuuma tasemel pakutakse vaid ĂŒldist liidest, mis ei sĂ”ltu konkreetsest protokollist ja pakub pĂ”hifunktsioone andmete vĂ€ljavĂ”tmiseks pakettidest, andmetega töötamiseks ja voogude haldamiseks.
Filtreerimise reeglid ja protokollile spetsiifilised töötlejad kompileeritakse kasutajaruumi baidikoodiks, seejÀrel laaditakse see baidikood tuuma Netlink liidese abil ja tÀidetakse tuumas spetsiaalses virtuaalses masinas, mis meenutab BPF-i (Berkeley Packet Filters). Selline lÀhenemine vÔimaldab oluliselt vÀhendada tuuma tasemel töötava filtreerimiskoodi suurust ja viia kÔik reeglite tÔlgendamise ja protokollidega töötamise funktsioonid kasutajaruumi.
Peamised muudatused:
- Map-vÀljendites 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 } }
- Lisatud on VLAN-i tugi: 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
- Log-vÀljendite jaoks on kasutusele vÔetud uus stringi eelprotsessor, mis toetab muutujaid: define message=»test» log prefix «my $message»
- VÀljendi «meta hour» vÀÀrtuse arvutamisel on realiseeritud negatiivse kompensatsiooni 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 muutmine ct ja meta vĂ€ljendite kasutamisel, samuti ĂŒhinemisoperatsioonide ja vahemike mÀÀramisel set-kogumites. map mapv6 { typeof ip6 dscp : meta mark; } meta mark set ip6 dscp map @map1 saadud on 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 ]
- TaaskĂ€ivitati kĂ€su âreplace ruleâ tugi. 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 }â
- TaaskÀivitati vÔime lisada vÔrgu seadmeid olemasolevatesse flowtable'itesse: create flowtable inet filter f1 { hook ingress priority 0; counter } add flowtable inet filter f1 { devices = { dummy1 } ; }
- Probleemid kĂ€su âcreate setâ kasutamisega on lahendatud: 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 }
- Probleemid TCP valikute digitaalse esitlusega on lahendatud: tcp option 254
- Probleemid meta ja ct vÀljendite kasutamisega map-kogumitega on lahendatud: meta mark set vlan id map { 1 : 0x00000001, 4095 : 0x00004095 }
- VÀljendites payload ja concat on andmete mÀÀramine, mille suurus on suurem kui 512 baiti, keelatud.
- KĂ€su ânft describeâ tĂ€itmisel on realiseeritud ridade arvestamine failides group, rt_mark ja rt_realms, mis asuvad kataloogides /etc/iproute2/ ja /use/share/iproute2/. # nft describe meta rtclassid meta expression, datatype realm (routing realm) (basetype integer), 32 bits eeldefineeritud sĂŒmboolsed konstantid failist /etc/iproute2/rt_realms (10-kohalistes numbrites): cosmos 0 Reject statement with range meta mark set 0-100
- Tabelite loendi vĂ€ljastamise operatsioon on kiirendatud. On rakendatud toetust valikule -t/âterse kĂ€skude âlist tableâ ja âlist setâ kiirendamiseks.
- VĂ€ljendite meter muutmine dĂŒnaamilisteks set-kogumiteks 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 update @m { ip saddr timeout 2s limit rate 10/second burst 5 packets }
- JSON formaadis esituses on lisatud toetus objektidele synproxy ja map-kogumitele koos ĂŒhendatud andmetega.
- Set-kogumites, mis on mÀÀratud JSON formaadis, on rakendatud auto-merge lipu toetus.
- JSON formaadis esituse kasutamisel on lubatud mÀÀrata mitu seadet plokis âchainâ.
- Valikute -f/âfilename kasutamisel on tagatud teede töötlemine, mis on suhtelised jooksva faili kataloogiga.
- Valikute -I/âinclude kasutamisel toimub vaikimisi teede lĂ€bimine nĂŒĂŒd nimekirja lĂ”pust.
- Optimeerimise -o/âoptimize töö on seadistatud vĂ€ljenditega, mis sisaldavad vÀÀrtuste loendureid: # 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 elementi dumpidega, mis on loodud nftables enne versiooni 0.9.8.
Allikas: opennet.ru
