Publiceringen av paketfiltren nftables 1.0.0

Det har publicerats en version av paketfilter nftables 1.0.0, som standardiserar gränssnitten för paketfiltering för IPv4, IPv6, ARP och nätverksbroar (mål för att ersätta iptables, ip6tables, arptables och ebtables). Nödvändiga ändringar för att få nftables 1.0.0 att fungera har inkluderats i Linux-kärnan 5.13. Den betydande versionsförändringen är inte kopplad till några radikala förändringar, utan är endast en följd av den kontinuerliga decimalnumreringen (den föregående versionen var 0.9.9).

Paketet nftables innehåller komponenter för paketfilter som arbetar i användarrummet, medan nf_tables-systemet på kärnnivå tillhandahåller funktionen, vilket har varit en del av Linux-kärnan sedan version 3.13. På kärnnivå tillhandahålls endast ett allmänt gränssnitt, oberoende av protokoll, som ger grundläggande funktioner för att extrahera data från paket, utföra operationer med data och styra flödet.

Själva filtreringsreglerna och protokollspecifika hanterare kompileras till bytekod i användarrummet, som sedan laddas in i kärnan via Netlink-gränssnittet och utförs i kärnan i en speciell en virtuell maskin, liknande BPF (Berkeley Packet Filters). Denna metod gör det möjligt att avsevärt minska storleken på den filterkod som körs på kärnnivå och flytta alla funktioner för tolkning av regler och logik som rör protokoll till användarrummet.

Huvudsakliga nyheter:

  • Support för maskelementet "*" har lagts till i set-listor, vilket aktiveras för alla paket som inte omfattas av andra element som definieras i uppsättningen. 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; policy accept; ip saddr vmap @blocklist } }
  • Det har blivit möjligt att definiera variabler från kommandoraden med hjälp av alternativet "—define". # cat test.nft table netdev x { chain y { type filter hook ingress devices = $dev priority 0; policy drop; } } # nft —define dev=»{ eth0, eth1 }» -f test.nft
  • Permanent (stateful) uttryck tillåts i map-listor: table inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter packets 0 bytes 0 : jump ssh_input, * counter packets 0 bytes 0 : drop } } chain ssh_input { } chain wan_input { tcp dport vmap @portmap } chain prerouting { type filter hook prerouting priority raw; policy accept; iif vmap { «lo» : jump wan_input } } }
  • Kommandot «list hooks» har lagts till för att visa en lista över hanterare för det angivna paketfamiljen: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev x y [nf_tables] +0000000300 chain inet m w [nf_tables] } hook input { -0000000100 chain ip a b [nf_tables] +0000000300 chain inet m z [nf_tables] } hook forward { -0000000225 selinux_ipv4_forward 0000000000 chain ip a c [nf_tables] } hook output { -0000000225 selinux_ipv4_output } hook postrouting { +0000000225 selinux_ipv4_postroute } }
  • I blocken "queue" är det tillåtet att kombinera uttrycken jhash, symhash och numgen för att fördela paket till köer i användarrummet. … queue to symhash mod 65536 … queue flags bypass to numgen inc mod 65536 … queue to jhash oif . meta mark mod 32 "queue" kan också kombineras med map-listor för att välja kö i användarrummet baserat på godtyckliga nycklar. … queue flags bypass to oifname map { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Det har lagts till möjlighet att avslöja variabler som inkluderar en set-lista i flera mappar. define interfaces = { eth0, eth1 } table ip x { chain y { type filter hook input priority 0; policy accept; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft list ruleset table ip x { chain y { type filter hook input priority 0; policy accept; iifname vmap { "lo" : accept, "eth0" : drop, "eth1" : drop } } }
  • Kombinering av vmap (verdict map) med intervall är tillåten: # nft add rule x y tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : accept }
  • Syntaxen för mappningar för NAT har förenklats. Det är tillåtet att ange adressintervall: … snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } eller explicita IP-adresser och portar: … dnat to ip saddr map { 10.141.11.4 : 192.168.2.3 . 80 } eller en kombination av IP-intervall och portar: … dnat to ip saddr . tcp dport map { 192.168.1.2 . 80 : 10.141.10.2-10.141.10.5 . 8888-8999 }

Källa: opennet.ru

Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar 🔥 Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster