nftables pakkefilter 1.0.0 utgivelse

Utgivelsen av pakkefilter nftables 1.0.0 har blitt publisert, og samler pakkefiltreringsgrensesnitt for IPv4, IPv6, ARP og nettverksbroer (rettet mot å erstatte iptables, ip6table, arptables og ebtables). Endringene som kreves for at nftables 1.0.0-utgivelsen skal fungere er inkludert i Linux 5.13-kjernen. En betydelig endring i versjonsnummeret er ikke forbundet med noen grunnleggende endringer, men er kun en konsekvens av den konsekvente fortsettelsen av nummerering i desimalnotasjon (den forrige utgivelsen var 0.9.9).

nftables-pakken inkluderer pakkefilterkomponenter som kjører i brukerrom, mens kjernenivået leveres av nf_tables-undersystemet, som har vært en del av Linux-kjernen siden utgivelse 3.13. På kjernenivå er det bare et generisk protokolluavhengig grensesnitt som gir grunnleggende funksjoner for å trekke ut data fra pakker, utføre operasjoner på data og kontrollere flyten.

Selve filtreringsreglene og protokollspesifikke behandlere kompileres til brukerromsbytekode, hvoretter denne bytekoden lastes inn i kjernen ved hjelp av Netlink-grensesnittet og kjøres i kjernen i en spesiell virtuell maskin som ligner BPF (Berkeley Packet Filters). Denne tilnærmingen gjør det mulig å redusere størrelsen på filtreringskoden som kjører på kjernenivå betydelig og flytte alle funksjonene til parsingsregler og logikken for å jobbe med protokoller inn i brukerområdet.

Hovedinnovasjoner:

  • Støtte for "*" maskeelementet er lagt til settlister, som utløses for alle pakker som ikke faller inn under andre elementer definert i settet. table x { map blocklist { type ipv4_addr : verdict flags interval elements = { 192.168.0.0/16 : accept, 10.0.0.0/8 : accept, * : drop } } chain y { type filter hook prerouting priority 0; politikk akseptere; ip saddr vmap @blokkeringsliste } }
  • Det er mulig å definere variabler fra kommandolinjen ved å bruke "--define" alternativet. # cat test.nft table netdev x { chain y { type filter hook ingress devices = $dev prioritet 0; politikk fall; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • I kartlister er bruk av konstante (stateful) uttrykk tillatt: tabell inet filter { map portmap { type inet_service : verdict counter elements = { 22 tellerpakker 0 bytes 0 : jump ssh_input, * tellerpakker 0 bytes 0 : drop } } kjede ssh_input { } kjede wan_input { tcp dport vmap @portmap } kjede prerouting { type filter hook prerouting priority raw; politikk akseptere; iif vmap { "lo" : jump wan_input } }
  • Lagt til kommandoen "list hooks" for å vise en liste over behandlere for en gitt 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 kjede ip ab [nf_tables] +0000000300 kjede inet mz [nf_tables]} krok fremover {-0000000225 selinux_ipv4_forward {-0000000000 {{{{hook output. 0000000225_postroUte}}
  • Køblokker lar jhash-, symhash- og numgen-uttrykk kombineres for å distribuere pakker til køer i brukerområdet. … kø til symhash mod 65536 … køflagg omgå til numgen inc mod 65536 … kø til jhash oif . meta mark mod 32 "kø" kan også kombineres med kartlister for å velge en kø i brukerrommet basert på vilkårlige nøkler. ... køflagg omgå til oifname map { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Det er mulig å utvide variabler som inkluderer en settliste til flere kart. definer grensesnitt = { eth0, eth1 } tabell ip x { kjede y { type filter krok inngangsprioritet 0; politikk akseptere; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft liste regelsett tabell ip x { chain y { type filter hook input priority 0; politikk akseptere; iifname vmap { "lo": godta, "eth0": drop, "eth1": drop } }
  • Det er tillatt å kombinere vmaps (verdict map) med intervaller: # nft add rule xy tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : godta }
  • Forenklet syntaks for NAT-tilordninger. Tillatt å spesifisere adresseområder: ... snat til ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } eller eksplisitte IP-adresser og porter: ... dnat til ip saddr map { 10.141.11.4: 192.168.2.3. . 80 } eller kombinasjoner av IP-områder og porter: ... 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

Legg til en kommentar