Die Veröffentlichung des Paketfilters nftables 1.0.0

Die Version 1.0.0 des Paketfilters nftables wurde veröffentlicht, welche die Schnittstellen für die Paketfilterung für IPv4, IPv6, ARP und Netzbrücken vereinheitlicht (zielt darauf ab, iptables, ip6tables, arptables und ebtables zu ersetzen). Die erforderlichen Änderungen für die Version nftables 1.0.0 sind in den Linux-Kernel 5.13 integriert. Die signifikante Versionsnummer ist nicht mit grundlegenden Änderungen verbunden, sondern ist lediglich das Ergebnis einer fortgesetzten Zählweise im Dezimalsystem (die vorherige Version war 0.9.9).

Das Paket nftables umfasst Komponenten des Paketfilters, die im Benutzermodus arbeiten, während die Funktion auf Kernel-Ebene von dem seit Version 3.13 im Linux-Kernel integrierten nf_tables-Subsystem bereitgestellt wird. Auf Kernel-Ebene wird lediglich eine allgemeine Schnittstelle bereitgestellt, die unabhängig vom spezifischen Protokoll ist und grundlegende Funktionen zum Extrahieren von Daten aus Paketen, zur Durchführung von Operationen mit Daten und zur Steuerung des Datenflusses bietet.

Die Filterregeln und protokollspezifischen Handler werden im Benutzermodus in Bytecode kompiliert, der anschließend über die Netlink-Schnittstelle in den Kernel geladen und dort in einem speziellen Kontext ausgeführt wird. virtuellen Maschine, die BPF (Berkeley Packet Filter) ähnelt. Dieser Ansatz ermöglicht eine signifikante Reduzierung der Größe des Filtercodes, der auf Kernel-Ebene arbeitet, und verlagert alle Funktionen zur Regelparserung und Logikbearbeitung von Protokollen in den Benutzermodus.

Hauptneuheiten:

  • Die Unterstützung des Platzhalters »*« wurde zu den Set-Listen hinzugefügt, der für alle Pakete ausgelöst wird, die nicht von anderen im Set definierten Elementen betroffen sind. 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 } }
  • Es wurde die Möglichkeit geschaffen, Variablen über die Kommandozeile mit der Option «—define» zu definieren. # 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
  • In Map-Listen ist die Verwendung von zustandsbehafteten Ausdrücken (stateful) erlaubt: 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 } } }
  • Der Befehl „list hooks“ wurde hinzugefügt, um eine Liste der Handler für die angegebene Paketfamilie auszugeben: # 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 } }
  • In den „queue“-Blöcken ist es erlaubt, die Ausdrücke jhash, symhash und numgen zu kombinieren, um Pakete im Benutzerspeicher auf Warteschlangen zu verteilen. … queue to symhash mod 65536 … queue flags bypass to numgen inc mod 65536 … queue to jhash oif . meta mark mod 32 „queue“ kann auch mit Map-Listen kombiniert werden, um die Warteschlange im Benutzerspeicher basierend auf beliebigen Schlüsseln auszuwählen. … queue flags bypass to oifname map { „eth0“ : 0, „ppp0“ : 2, „eth1“ : 2 }
  • Es wurde die Möglichkeit geschaffen, Variablen, die eine Set-Liste enthalten, in mehrere Maps zu erweitern. 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 } } }
  • Die Kombination von vmaps (Verdict Map) mit Intervallen ist erlaubt: # nft add rule x y tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : accept }
  • Die Syntax für NAT-Zuordnungen wurde vereinfacht. Es ist erlaubt, Adressbereiche anzugeben: … snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } oder explizite IP-Adressen und Ports: … dnat to ip saddr map { 10.141.11.4 : 192.168.2.3 . 80 } oder Kombinationen von IP-Bereichen und Ports: … dnat to ip saddr . tcp dport map { 192.168.1.2 . 80 : 10.141.10.2-10.141.10.5 . 8888-8999 }

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster