nftables paketfilter 1.0.0 release

Utgivningen av paketfilter nftables 1.0.0 har publicerats, som förenar paketfiltreringsgränssnitt för IPv4, IPv6, ARP och nätverksbryggor (som syftar till att ersätta iptables, ip6table, arptables och ebtables). De ändringar som krävs för att nftables 1.0.0-versionen ska fungera ingår i Linux 5.13-kärnan. En betydande förändring av versionsnumret är inte associerad med några grundläggande ändringar, utan är bara en konsekvens av den konsekventa fortsättningen av numrering i decimalnotation (förra utgåvan var 0.9.9).

Paketet nftables inkluderar paketfilterkomponenter som körs i användarutrymme, medan arbetet på kärnnivå tillhandahålls av nf_tables-undersystemet, som har varit en del av Linux-kärnan sedan release 3.13. Kärnnivån tillhandahåller endast ett generiskt protokolloberoende gränssnitt som tillhandahåller grundläggande funktioner för att extrahera data från paket, utföra dataoperationer och flödeskontroll.

Filtreringsreglerna och protokollspecifika hanterare kompileras till bytekod i användarutrymmet, varefter denna bytekod laddas in i kärnan med hjälp av Netlink-gränssnittet och exekveras i kärnan i en speciell virtuell maskin som påminner om BPF (Berkeley Packet Filters). Detta tillvägagångssätt tillåter dig att avsevärt minska storleken på filtreringskoden som körs på kärnnivå och flytta alla funktioner för att analysera regler och logik för att arbeta med protokoll till användarutrymmet.

Huvudsakliga innovationer:

  • Stöd för maskelementet "*" har lagts till i uppsättningslistor, vilket utlöses för alla paket som inte faller under andra element som definieras i uppsättningen. tabell x { map blocklist { typ ipv4_addr : domsflaggor intervallelement = { 192.168.0.0/16 : accept, 10.0.0.0/8 : accept, * : drop } } kedja y { typ filter krok prerouting priority 0; policy acceptera; ip saddr vmap @blocklist } }
  • Det är möjligt att definiera variabler från kommandoraden med alternativet "--define". # cat test.nft tabell netdev x { kedja y { typ filter hook ingress devices = $dev prioritet 0; minskning av politiken; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • I kartlistor är användningen av konstanta (stateful) uttryck tillåten: tabell inet filter { map portmap { typ inet_service : verdict counter elements = { 22 räknarpaket 0 bytes 0 : jump ssh_input, * räknarpaket 0 bytes 0 : drop } } kedja ssh_input { } kedja wan_input { tcp dport vmap @portmap } chain prerouting { typ filter hook prerouting priority raw; policy acceptera; iif vmap { "lo": hoppa wan_input } }
  • Lade till kommandot "list hooks" för att visa en lista över hanterare för en given paketfamilj: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables] } {-0000000100 -kedja ip ab [nf_tables] +0000000300 kedja inet mz [nf_tables]} hook framåt {-0000000225 selinux_ipv4_forward 0000000000 kedja ip ac [nf_tables]} hook output {-0000000225 selinux_ipv4_output} hook} hook) postroute}}
  • Köblock tillåter jhash-, symhash- och numgen-uttryck att kombineras för att distribuera paket till köer i användarutrymmet. … kö till symhash mod 65536 … köflaggor bypass till numgen inc mod 65536 … kö till jhash oif . meta mark mod 32 "kö" kan också kombineras med kartlistor för att välja en kö i användarutrymmet baserat på godtyckliga nycklar. ... köflaggor går förbi till oifname map { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Det är möjligt att utöka variabler som inkluderar en uppsättningslista till flera kartor. definiera gränssnitt = { eth0, eth1 } tabell ip x { kedja y { typ filter krok ingångsprioritet 0; policy acceptera; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft list regeluppsättningstabell ip x { chain y { typ filter hook input priority 0; policy acceptera; iifname vmap { "lo": acceptera, "eth0": drop, "eth1": drop } }
  • Det är tillåtet att kombinera vmaps (verdict map) med intervaller: # nft add rule xy tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : acceptera }
  • Förenklad syntax för NAT-mappningar. Tillåtet att ange adressintervall: ... snat till ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } eller explicita IP-adresser och portar: ... dnat till ip saddr map { 10.141.11.4: 192.168.2.3. . 80 } eller kombinationer av IP-intervall och portar: ... dnat till ip saddr . tcp dport map { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Källa: opennet.ru

Lägg en kommentar