nftables csomagszűrő kiadás 0.9.1

Egy év fejlesztés után bemutatott csomagszűrő kiadás nftables 0.9.1, az iptables, ip6table, arptables és ebtables helyettesítésére fejlesztették ki az IPv4, IPv6, ARP és hálózati hidak csomagszűrő felületeinek egységesítésével. 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.
Magát a szűrési logikát és a protokoll-specifikus kezelőket a felhasználói térben 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-re (Berkeley Packet Filters) emlékeztető virtuális gépen hajtják végre. Ez a megközelítés lehetővé teszi a kernel szintjén futó szűrőkód méretének jelentős csökkentését, és a protokollokkal való munkavégzéshez szükséges elemzési szabályok és logikák összes funkciójának áthelyezését a felhasználói térbe.

Főbb újítások:

  • IPsec-támogatás, amely lehetővé teszi az alagútcímek párosítását csomag, IPsec-kérésazonosító és SPI (Security Parameter Index) címke alapján. Például,

    ... ipsec az ip saddr 192.168.1.0/24-ben
    ... ipsec in spi 1-65536

    Azt is ellenőrizheti, hogy egy útvonal áthalad-e egy IPsec-alagúton. Például a forgalom blokkolásához nem IPSec-en keresztül:

    … filter output rt ipsec hiányzó csepp

  • Az IGMP (Internet Group Management Protocol) támogatása. Használhat például egy szabályt a bejövő IGMP-csoporttagsági kérelmek elvetésére

    nft add szabály netdev foo bar igmp type Member-query counter drop

  • Lehetőség változók használatára átmeneti láncok meghatározásához (ugrás / goto). Például:

    define dest = ber
    szabály hozzáadása ip foo bar ugrás $dest

  • Az operációs rendszerek azonosítására szolgáló maszkok támogatása (OS ujjlenyomat) a fejlécben található TTL-értékek alapján. Például a csomagok küldő operációs rendszere alapján történő megjelöléséhez használhatja a következő parancsot:

    ... meta mark set osf ttl skip name map { "Linux" : 0x1,
    "Windows": 0x2,
    "MacOS": 0x3,
    "ismeretlen": 0x0 }
    ... osf ttl "Linux:4.20" verzió kihagyása

  • Lehetőség a küldő ARP-címének és a célrendszer IPv4-címének egyeztetésére. Például a 192.168.2.1 címről küldött ARP-csomagok számlálójának növeléséhez használhatja a következő szabályt:

    táblázat arp x {
    lánc y {
    típusú szűrő horog bemeneti prioritás szűrő; szabályzat elfogadása;
    arp saddr ip 192.168.2.1 számláló csomagok 1 bájt 46
    }
    }

  • A kérések átlátható továbbításának támogatása proxyn (tproxy) keresztül. Például a 80-as port hívásainak a 8080-as proxyportra történő átirányításához:

    táblázat ip x {
    lánc y {
    típusú szűrő horog előrevezetési prioritás -150; szabályzat elfogadása;
    tcp dport 80 tproxy a :8080-ra
    }
    }

  • A socketek jelölésének támogatása a setsockopt() segítségével a set mark további megszerzésének lehetőségével SO_MARK módban. Például:

    táblázat inet x {
    lánc y {
    típusú szűrő horog előrevezetési prioritás -150; szabályzat elfogadása;
    tcp dport 8080 mark set socket mark
    }
    }

  • Támogatja a láncok elsőbbségi szövegneveinek megadását. Például:

    nft add chain ip x raw { type filter hook prerouting priority raw; }
    nft add chain ip x filter { type filter hook prerouting priority filter; }
    nft add chain ip x filter_later { type filter hook prerouting priority filter + 10; }

  • SELinux címkék támogatása (Secmark). Például az "sshtag" címke SELinux kontextusban történő meghatározásához futtassa a következőket:

    nft add secmark inet szűrő sshtag "system_u:object_r:ssh_server_packet_t:s0"

    Ezután használja ezt a címkét a szabályokban:

    nft add szabály inet szűrő bemenet tcp dport 22 meta secmark set "sshtag"

    nft add map inet filter secmapping { type inet_service : secmark; }
    nft add element inet filter secmapping { 22 : "sshtag" }
    nft add szabály inet szűrő bemenet meta secmark set tcp dport map @secmapping

  • Lehetőség a protokollokhoz rendelt portok szöveges formában történő megadására, az /etc/services fájlban meghatározottak szerint. Például:

    nft add szabály xy tcp dport "ssh"
    nft lista szabálykészlet -l
    táblázat x {
    lánc y {
    ...
    tcp dport "ssh"
    }
    }

  • Lehetőség a hálózati interfész típusának ellenőrzésére. Például:

    add szabály inet raw prerouting meta iifkind "vrf" elfogadja

  • Továbbfejlesztett támogatás a készletek tartalmának dinamikus frissítéséhez a „dinamikus” jelző kifejezett megadásával. Például az "s" készlet frissítéséhez a forráscím hozzáadásához és a bejegyzés alaphelyzetbe állításához, ha 30 másodpercig nincs csomag:

    x táblázat hozzáadása
    add set xs { type ipv4_addr; 128-as méret; timeout 30s; dinamikus zászlók; }
    add chain xy { type filter hook input priority 0; }
    xy szabály hozzáadása frissítés @s { ip saddr }

  • Külön időtúllépési feltétel beállításának lehetősége. Például a 8888-as porton érkező csomagok alapértelmezett időtúllépésének felülbírálásához a következőket adhatja meg:

    táblázat ip filter {
    ct timeout aggressive-tcp {
    tcp protokoll;
    l3proto ip;
    policy = {létrehozott: 100, bezárás_várakozás: 4, bezárás: 4}
    }
    lánc kimenet {
    ...
    tcp dport 8888 ct időtúllépés beállítása "agresszív-tcp"
    }
    }

  • NAT támogatás az inet családhoz:

    táblázat inet nat {
    ...
    ip6 daddr dead::2::1 dnat to dead:2::99
    }

  • Továbbfejlesztett elírási hibajelentés:

    nft add láncszűrő teszt

    Hiba: Nincs ilyen fájl vagy könyvtár; családi ip-n a táblázat „szűrő”-re gondoltál?
    láncszűrő teszt hozzáadása
    ^^^^^^

  • Lehetőség interfésznevek megadására készletekben:

    set sc {
    írja be az inet_service parancsot. ifname
    elements = { "ssh" . "eth0" }
    }

  • Frissített folyamatábra-szabályok szintaxisa:

    nft x táblázat hozzáadása
    nft add flowtable x ft { hook ingress priority 0; eszközök = { eth0, wlan0 }; }
    ...
    nft add rule x forward ip protokoll { tcp, udp } flow add @ft

  • Továbbfejlesztett JSON-támogatás.

Forrás: opennet.ru

Hozzászólás