nftables pakkefilter 1.0.0 udgivelse

Frigivelsen af ​​pakkefilter nftables 1.0.0 er blevet offentliggjort, som forener pakkefiltreringsgrænseflader til IPv4, IPv6, ARP og netværksbroer (med henblik på at erstatte iptables, ip6table, arptables og ebtables). De ændringer, der kræves for at nftables 1.0.0-udgivelsen kan fungere, er inkluderet i Linux 5.13-kernen. En væsentlig ændring i versionsnummeret er ikke forbundet med nogen grundlæggende ændringer, men er kun en konsekvens af den konsekvente fortsættelse af nummerering i decimalnotation (den tidligere udgivelse var 0.9.9).

nftables-pakken inkluderer pakkefilterkomponenter, der kører i brugerrum, mens kerneniveauet leveres af nf_tables-undersystemet, som har været en del af Linux-kernen siden udgivelse 3.13. På kerneniveau er der kun en generisk protokol-uafhængig grænseflade, der giver grundlæggende funktioner til at udtrække data fra pakker, udføre operationer på data og kontrollere flow.

Selve filtreringsreglerne og protokol-specifikke handlere kompileres til brugerrumsbytekode, hvorefter denne bytekode indlæses i kernen ved hjælp af Netlink-grænsefladen og eksekveres i kernen i en speciel virtuel maskine, der ligner BPF (Berkeley Packet Filters). Denne tilgang gør det muligt betydeligt at reducere størrelsen af ​​den filtreringskode, der kører på kerneniveau, og flytte alle funktionerne i parsingsregler og logikken i at arbejde med protokoller ind i brugerrummet.

Vigtigste innovationer:

  • Understøttelse af maskeelementet "*" er blevet tilføjet til sætlister, som udløses for alle pakker, der ikke falder ind under andre elementer, der er defineret i sættet. table x { map blocklist { type ipv4_addr : verdict flags interval elements = { 192.168.0.0/16 : accept, 10.0.0.0/8 : accept, * : drop } } kæde y { type filter hook prerouting priority 0; politik acceptere; ip saddr vmap @blokliste } }
  • Det er muligt at definere variabler fra kommandolinjen ved at bruge "--define" muligheden. # kat test.nft tabel netdev x { kæde y { type filter hook ingress devices = $dev prioritet 0; politik fald; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • I kortlister er brugen af ​​konstante (stateful) udtryk tilladt: tabel inet filter { map portmap { type inet_service : verdict counter elements = { 22 tællerpakker 0 bytes 0 : jump ssh_input, * tællerpakker 0 bytes 0 : drop } } kæde ssh_input { } kæde wan_input { tcp dport vmap @ portmap } chain prerouting { type filter hook prerouting priority raw; politik acceptere; iif vmap { "lo": jump wan_input } }
  • Tilføjet "list hooks"-kommando for at vise en liste over handlere for en given pakkefamilie: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw input [nf_tables] } {-0000000100 kæde ip ab [nf_tables] +0000000300 kæde inet mz [nf_tables]} hook fremad {-0000000225 selinux_ipv4_forward 0000000000 kæde ip ac [nf_tables]} hook output {-0000000225 SELInux_IPv4_output} postrotrouting {+0000000225uxx4 vXNUMX_postroute}}
  • Køblokke tillader jhash-, symhash- og numgen-udtryk at blive kombineret for at distribuere pakker til køer i brugerrummet. … kø til symhash mod 65536 … køflag forbigå til numgen inc mod 65536 … kø til jhash oif . meta mark mod 32 "kø" kan også kombineres med kortlister for at vælge en kø i brugerrummet baseret på vilkårlige nøgler. ... køflag omgås til oifname map { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Det er muligt at udvide variabler, der inkluderer en sætliste, til flere kort. definer grænseflader = { eth0, eth1 } tabel ip x { kæde y { type filter hook input prioritet 0; politik acceptere; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft liste regelsæt tabel ip x { chain y { type filter hook input prioritet 0; politik acceptere; iifname vmap { "lo": accept, "eth0": drop, "eth1": drop } }
  • Det er tilladt at kombinere vmaps (verdict map) med intervaller: # nft add rule xy tcp dport . ip saddr vmap {1025-65535. 192.168.10.2 : accepter }
  • Forenklet syntaks til NAT-kortlægninger. Tilladt at specificere adresseområder: ... snat til ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } eller eksplicitte IP-adresser og porte: ... dnat til ip saddr map { 10.141.11.4: 192.168.2.3 . 80 } eller kombinationer af IP-områder og porte: ... dnat til ip saddr . tcp dport map {192.168.1.2. 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Kilde: opennet.ru

Tilføj en kommentar