A csomagszűrő nftables 0.9.1 kiadása

Egy év fejlesztés után bemutatva a csomagszűrő kiadása nftables 0.9.1, amely az iptables, ip6tables, arptables és ebtables helyettesítéseként fejlődik, a csomagszűrési interfészek egységesítésével IPv4, IPv6, ARP és hálózati hidak számára. Az nftables csomag részeként a felhasználói térben működő csomagszűrő komponensek találhatók, míg a kernel szintjén a nf_tables alrendszer biztosítja a funkciókat, amely a Linux kernel 3.13-as kiadásától kezdve érhető el.

A kernel szintjén csak egy általános interfész áll rendelkezésre, amely nem függ a konkrét protokolltól, és alapvető funkciókat biztosít az adatok csomagokból való kiemelésére, az adatokkal végzett műveletek elvégzésére és a folyamat irányítására.
A szűrési logika és a protokollspecikus kezelők közvetlenül byte-kódra vannak fordítva a felhasználói térben, ezután a byte-kódot a Netlink interfészen keresztül tölti be a kernelbe, és egy speciális virtuális gépen fut, amely hasonlít a BPF (Berkeley Packet Filters) -hez. Ez a megközelítés jelentősen csökkenti a kernel szinten működő szűrések kódjának méretét, és az összes szabályelemzési és protokoll logikát a felhasználói térbe helyezi.

Főbb újítások:

  • IPsec támogatása, amely lehetővé teszi a csomagokkal összefüggő alagút címek, IPsec kérésazonosítók és SPI (Security Parameter Index) címkék párosítását. Például,

    … ipsec in ip saddr 192.168.1.0/24
    … ipsec in spi 1-65536

    Ezenkívül lehetséges az IPsec alagúton keresztül történő útvonal-ellenőrzés. Például, a nem IPsec-en keresztüli forgalom blokkolásához:

    … filter output rt ipsec missing drop

  • IGMP (Internet Group Management Protocol) protokoll támogatása. Például a bejövő IGMP tagsági kérések elutasítására a következő szabályt használhatjuk:

    nft add rule netdev foo bar igmp type membership-query counter drop

  • Változók használatának lehetősége az ugrásláncok (jump / goto) meghatározásához. Például:

    define dest = ber
    add rule ip foo bar jump $dest

  • Maszkok támogatása operációs rendszerek azonosításához (OS Fingerprint) a TTL értékek alapján a fejlében. Például a csomagok címkézésére az elküldő OS szerint a következő parancsot használhatjuk:

    … meta mark set osf ttl skip name map { "Linux" : 0x1,
    "Windows" : 0x2,
    "MacOS" : 0x3,
    "unknown" : 0x0 }
    … osf ttl skip version "Linux:4.20"

  • A forrás ARP-címének és a célrendszer IPv4-címének párosításának lehetősége. Például az ARP-csomagok számának növeléséhez, amelyeket a 192.168.2.1 címről küldenek, használható a következő szabály:

    table arp x {
    chain y {
    type filter hook input priority filter; policy accept;
    arp saddr ip 192.168.2.1 counter packets 1 bytes 46
    }
    }

  • Képesség a kérések átlátszó proxy-n keresztüli továbbítására (tproxy). Például a 80-as port hívásainak 8080-as proxyport felé történő átirányításához:

    table ip x {
    chain y {
    type filter hook prerouting priority -150; policy accept;
    tcp dport 80 tproxy to :8080
    }
    }

  • A socketek megjelölésének támogatása, amely lehetővé teszi a megadott címke későbbi megszerzését a setsockopt() segítségével SO_MARK módban. Például:

    table inet x {
    chain y {
    type filter hook prerouting priority -150; policy accept;
    tcp dport 8080 mark set socket mark
    }
    }

  • A láncok prioritásának szöveges megnevezésének támogatása. 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 a "sshtag" címke SELinux kontextushoz való hozzárendelésének meghatározásához indítsa el a következő parancsot:

    nft add secmark inet filter sshtag "system_u:object_r:ssh_server_packet_t:s0"

    Aztán ezt a címkét használhatja a szabályokban:

    nft add rule inet filter input 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 rule inet filter input meta secmark set tcp dport map @secmapping

  • A protokollokhoz rögzített portok szöveges megadásának lehetősége, ahogy azt a /etc/services fájl tartalmazza. Például:

    nft add rule x y tcp dport "ssh"
    nft list ruleset -l
    table x {
    chain y {
    …
    tcp dport "ssh"
    }
    }

  • A hálózati interfész típusának ellenőrzésének lehetősége. Például:

    add rule inet raw prerouting meta iifkind "vrf" accept

  • Javított támogatás a készletek (sets) dinamikus frissítésére az "dynamic" jelző explicit megadásával. Például a "s" készlet frissítéséhez, amely hozzáadja a forráscímet és törli a bejegyzést, ha 30 másodpercig nem érkezett csomag:

    add table x
    add set x s { type ipv4_addr; size 128; timeout 30s; flags dynamic; }
    add chain x y { type filter hook input priority 0; }
    add rule x y update @s { ip saddr }

  • A timeout különálló feltételének megadásának lehetősége. Például a 8888-as portra érkező csomagok alapértelmezett timeout-jának felülírására az alábbiak szerint lehet megadni:

    table ip filter {
    ct timeout agressive-tcp {
    protocol tcp;
    l3proto ip;
    policy = {established: 100, close_wait: 4, close: 4}
    }
    chain output {
    …
    tcp dport 8888 ct timeout set "agressive-tcp"
    }
    }

  • NAT támogatás az inet család számára:

    table inet nat {
    …
    ip6 daddr dead::2::1 dnat to dead:2::99
    }

  • Javított hibaüzenet-kibővítési eszközök elgépelések miatt:

    nft add chain filtre test

    Hiba: Nincs ilyen fájl vagy könyvtár; akartad a «filter» táblát az ip családban?
    lánc hozzáadása szűrő teszt
    ^^^^^^

  • Lehetőség interfészek neveinek megadására halmazokban (sets):

    halmaz sc {
    típus inet_service . ifname
    elemek = { «ssh» . «eth0» }
    }

  • Frissült a flowtable szabályok szintaxisa:

    nft add table x
    nft add flowtable x ft { hook ingress priority 0; eszközök = { eth0, wlan0 }; }
    …
    nft add rule x forward ip protocol { tcp, udp } flow add @ft

  • Javították a JSON támogatást.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster