nftables csomagszűrő kiadás 1.0.3

Megjelent a csomagszűrő nftables 1.0.3 kiadása, amely egyesíti az IPv4, IPv6, ARP és hálózati hidak csomagszűrő interfészeit (az iptables, ip6table, arptables és ebtables helyettesítésére). Az nftables 1.0.3-as kiadás működéséhez szükséges változtatásokat a Linux 5.18-as kernel tartalmazza.

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 halmazlisták most már támogatják a hálózati interfésznevek egy maszkkal történő egyeztetését, például a „*” szimbólummal megadva: table inet testifsets { set simple_wild { type ifname flags interval elements = { “abcdef*”, “othername”, “ppp0” } } chain v4icmp { type filter hook input priority 0; szabályzat elfogadása; iifname @simple_wild számlálócsomagok 0 bájt 0 iifname { “abcdef*”, “eth0” } számlálócsomagok 0 bájt 0 } }
  • Megvalósította az egymást metsző halmazlista elemek automatikus összevonását működés közben. Korábban, amikor az „auto-merge” opciót beállították, az összevonás a szabályok deklarálásának szakaszában történt, de ma már akkor is működik, ha a működés során fokozatosan új elemeket adnak hozzá. Például a deklarációs szakaszban a listakészlet y { flags interval auto-merge elements = { 1.2.3.0, 1.2.3.255, 1.2.3.0/24, 3.3.3.3, 4.4.4.4, 4.4.4.4-4.4.4.8 , 3.3.3.4 , 3.3.3.5 } } elemei lesznek = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 }, majd ha új elemeket ad hozzá # nft add elem ip xy { 1.2.3.0 -1.2.4.255, 3.3.3.6 } elemként fog kinézni = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    Ha eltávolítja a listából az egyes elemeket, amelyek a meglévő tartományelemek közé tartoznak, a tartomány lerövidül vagy felosztódik.

  • A több címfordítási (NAT) szabályok leképezési listába való kombinálásának támogatása hozzáadásra került a szabályoptimalizálóhoz, amelyet akkor hívnak meg, ha az „-o/—optimize” opció meg van adva. Például a # cat ruleset.nft tábla ip x { chain y { type nat hook postrouting priority srcnat; politika csökkenése; ip saddr 1.1.1.1 tcp dport 8000 snat 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat 5.5.5.5:90 } }

    Az „nft -o -c -f ruleset.nft” végrehajtása a különálló „ip saddr” szabályokat térképlistává alakítja: snat to ip saddr . tcp dport térkép { 1.1.1.1 . 8000: 4.4.4.4. 80, 2.2.2.2. 8001: 5.5.5.5. 90}

    Hasonlóképpen a nyers kifejezések térképlistákká konvertálhatók: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp long 47-63 @th,160,128 0x0e373135363130333131303735353203 goth-62udnat_dths ,78 160,128x0e0e goto nat_dns_this_31393032383939353831343037320 udp hossz 5301-62 @th,78 160,128x0e0e goto nat_dns_saturn_31363436323733373931323934300 udp hossz 5301-62 @th,78 160,128 0 0 32393535373539353636383732310e goto nat_dns_saturn_5302 udp hossz 62-78 @th,160,128 0x0e38353439353637323038363633390e goto nat_dns_saturn} drop_5303_XNUMX}

    optimalizálás után kapunk egy térképlistát: udp length . @th,160,128 vmap { 47-63 . 0x0e373135363130333131303735353203 : goto nat_dns_dnstc, 62-78 . 0x0e31393032383939353831343037320e : goto nat_dns_this_5301, 62-78 . 0x0e31363436323733373931323934300e : goto nat_dns_saturn_5301, 62-78 . 0x0e32393535373539353636383732310e : goto nat_dns_saturn_5302, 62-78 . 0x0e38353439353637323038363633390e : goto nat_dns_saturn_5303 }

  • A nyers kifejezések használata az összefűzési műveletekben megengedett. Például: #nft add szabály xy ip saddr. @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } vagy táblázat x { set y { typeof ip saddr . @ih,32,32 elemek = { 1.1.1.1 . 0x14 } } }
  • Támogatás hozzáadva az egész fejlécmezők megadásához az összefűzési műveletekben: table inet t { map m1 { typeof udp length . @ih,32,32 : verdict flags interval elements = { 20-80 . 0x14 : elfogad, 1-10 . 0xa : drop } } chain c { type filter hook input priority 0; politika csökkenése; udp hossza. @ih,32,32 vmap @m1 } }
  • Hozzáadott támogatás a TCP beállítások visszaállításához (csak Linux kernel 5.18+ esetén működik): tcp flags syn reset tcp option sack-perm
  • A lánckimeneti parancsok („nft list chain xy”) végrehajtása felgyorsult.

Forrás: opennet.ru

Hozzászólás