nftables csomagszűrő kiadás 1.0.0

Megjelent a csomagszűrő nftables 1.0.0 kiadása, amely egyesíti az IPv4, IPv6, ARP és hálózati hidak csomagszűrő felületeit (az iptables, ip6table, arptables és ebtables helyettesítésére). Az nftables 1.0.0 kiadás működéséhez szükséges változtatásokat a Linux 5.13 kernel tartalmazza. A verziószám jelentős változása nem jár alapvető változással, csak a decimális jelöléssel történő számozás következetes folytatásának a következménye (az előző kiadás 0.9.9 volt).

Az nftables csomag felhasználói térben futó csomagszűrő komponenseket tartalmaz, míg a kernel szintű munkát az nf_tables alrendszer biztosítja, amely a 3.13-as kiadás óta a Linux kernel része. A kernelszint csak egy általános, protokoll-független interfészt biztosít, amely alapvető funkciókat biztosít az adatok csomagokból történő kinyeréséhez, adatműveletek végrehajtásához és az áramlásvezérléshez.

Magukat a szűrési szabályokat és a protokoll-specifikus kezelőket felhasználói térbeli bájtkódba fordítják, majd ezt a bájtkódot a Netlink interfész segítségével betöltik a kernelbe, és egy speciális, BPF-hez (Berkeley Packet Filters) hasonlító virtuális gépben hajtják végre a kernelben. Ez a megközelítés lehetővé teszi a kernel szinten futó szűrőkód méretének jelentős csökkentését, valamint az elemzési szabályok összes funkciójának és a protokollokkal való munka logikájának a felhasználói térbe való áthelyezését.

Főbb újítások:

  • A „*” maszk elem támogatása hozzáadásra került a készletlistákhoz, amely minden olyan csomag esetében aktiválódik, amely nem esik a készletben meghatározott más elemek alá. 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; szabályzat elfogadása; ip saddr vmap @blocklist } }
  • Lehetőség van változók definiálására a parancssorból a „--define” opció használatával. # cat test.nft tábla netdev x { lánc y { type filter hook ingress devices = $dev priority 0; politika csökkenése; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • A térképlistákban az állandó (állapotadó) kifejezések használata megengedett: table inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter packets 0 bytes 0 : jump ssh_input, * counter packets 0 byte 0 : drop } } lánc ssh_input { } chain wan_input { tcp dport vmap @portmap } chain prerouting { type filter hook prerouting priority raw; szabályzat elfogadása; iif vmap { "lo" : wan_input ugrás } } }
  • Hozzáadott "list hooks" parancs egy adott csomagcsaládhoz tartozó kezelők listájának megjelenítéséhez: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables input] } hook { -0000000100 chain ip ab [nf_tables] +0000000300 chain inet mz [nf_tables] } hook forward { -0000000225 selinux_ipv4_forward 0000000000 chain ip ac [nf_0000000225 kimenet 4_output } hook postrouting { +0000000225 4 selinux_ipvXNUMX_postroute } }
  • A sorblokkok lehetővé teszik a jhash, symhash és numgen kifejezések kombinálását a csomagok elosztása érdekében a felhasználói térben lévő sorok között. … sor a symhash modhoz 65536 … sorjelzők bypass to numgen inc mod 65536 … sor a jhash oif-hoz. A meta mark mod 32 "queue" a térképlistákkal is kombinálható, hogy tetszőleges kulcsok alapján válasszon ki egy sort a felhasználói térben. ... a sorjelzők megkerülik az oifname mapot { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Lehetőség van egy halmazlistát tartalmazó változók több térképre bővítésére. define interfaces = { eth0, eth1 } table ip x { chain y { type filter hook input priority 0; szabályzat elfogadása; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft list ruleset table ip x { chain y { type filter hook input priority 0; szabályzat elfogadása; iifname vmap { "lo" : elfogadja, "eth0" : drop, "eth1" : drop } } }
  • A vmaps (verdict map) időközönkénti kombinálása megengedett: # nft add szabály xy tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : elfogad }
  • Egyszerűsített szintaxis a NAT-leképezésekhez. Címtartományok megadása megengedett: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } vagy explicit IP-címek és portok: ... dnat - ip saddr map { 10.141.11.4 .192.168.2.3:80. . 192.168.1.2 } vagy IP-tartományok és portok kombinációi: ... dnat to ip saddr . tcp dport térkép { 80 . 10.141.10.2: 10.141.10.5-8888. 8999-XNUMX }

Forrás: opennet.ru

Hozzászólás