Vydanie paketového filtra nftables 0.9.1

Po roku vývoja predložené uvoľnenie paketového filtra nftables 0.9.1, vyvíja sa ako náhrada za iptables, ip6table, arptables a ebtables zjednotením rozhraní filtrovania paketov pre IPv4, IPv6, ARP a sieťové mosty. Balík nftables obsahuje komponenty paketového filtra, ktoré bežia v užívateľskom priestore, zatiaľ čo prácu na úrovni jadra zabezpečuje subsystém nf_tables, ktorý je súčasťou linuxového jadra od vydania 3.13.

Úroveň jadra poskytuje iba všeobecné rozhranie nezávislé od protokolu, ktoré poskytuje základné funkcie na extrahovanie údajov z paketov, vykonávanie operácií s údajmi a riadenie toku.
Samotná logika filtrovania a obslužné programy špecifické pre protokol sú v užívateľskom priestore skompilované do bajtkódu, po čom sa tento bajtový kód nahrá do jadra pomocou rozhrania Netlink a spustí sa v špeciálnom virtuálnom stroji, ktorý pripomína BPF (Berkeley Packet Filters). Tento prístup umožňuje výrazne znížiť veľkosť filtrovacieho kódu spusteného na úrovni jadra a presunúť všetky funkcie pravidiel parsovania a logiky pre prácu s protokolmi do užívateľského priestoru.

Hlavné inovácie:

  • Podpora IPsec, ktorá umožňuje porovnávanie adries tunelov na základe paketu, ID požiadavky IPsec a tagu SPI (Security Parameter Index). Napríklad,

    ... ipsec v ip saddr 192.168.1.0/24
    ... ipsec v spi 1-65536

    Je tiež možné skontrolovať, či trasa prechádza cez tunel IPsec. Ak chcete napríklad blokovať prenos mimo protokolu IPSec:

    … výstup filtra rt ipsec chýba kvapka

  • Podpora protokolu IGMP (Internet Group Management Protocol). Môžete napríklad použiť pravidlo na zrušenie prichádzajúcich žiadostí o členstvo v skupine IGMP

    nft pridať pravidlo netdev foo bar igmp typ členstvo-dotaz counter drop

  • Možnosť použitia premenných na definovanie prechodových reťazcov (skok / goto). Napríklad:

    definovať dest = ber
    pridať pravidlo ip foo bar skok $dest

  • Podpora masiek na identifikáciu operačných systémov (OS Fingerprint) na základe hodnôt TTL v hlavičke. Napríklad na označenie paketov na základe operačného systému odosielateľa môžete použiť príkaz:

    ... meta mark set osf ttl skip name map { "Linux" : 0x1,
    "Windows": 0x2,
    "MacOS": 0x3,
    "neznámy" : 0x0 }
    ... osf ttl preskočiť verziu "Linux:4.20"

  • Schopnosť zladiť ARP adresu odosielateľa a IPv4 adresu cieľového systému. Ak chcete napríklad zvýšiť počítadlo paketov ARP odoslaných z adresy 192.168.2.1, môžete použiť pravidlo:

    tabuľka arp x {
    reťaz y {
    typ filter háčik vstupný prioritný filter; prijať politiku;
    arp saddr ip 192.168.2.1 počítadlo paketov 1 bajtov 46
    }
    }

  • Podpora transparentného preposielania požiadaviek cez proxy (tproxy). Ak chcete napríklad presmerovať hovory na port 80 na port proxy 8080:

    tabuľka ip x {
    reťaz y {
    priorita predbežného smerovania háku filtra -150; prijať politiku;
    tcp dport 80 tproxy na: 8080
    }
    }

  • Podpora označovania zásuviek s možnosťou ďalšieho získania značky nastavenia cez setsockopt() v režime SO_MARK. Napríklad:

    tabuľka inet x {
    reťaz y {
    priorita predbežného smerovania háku filtra -150; prijať politiku;
    tcp dport 8080 mark nastaviť značku zásuvky
    }
    }

  • Podpora pre špecifikovanie prioritných textových názvov pre reťazce. Napríklad:

    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; }

  • Podpora pre značky SELinux (Secmark). Ak chcete napríklad definovať značku "sshtag" v kontexte SELinux, môžete spustiť:

    nft pridať secmark inet filter sshtag "system_u:object_r:ssh_server_packet_t:s0"

    A potom použite toto označenie v pravidlách:

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

  • Schopnosť špecifikovať porty priradené protokolom v textovej forme, ako sú definované v súbore /etc/services. Napríklad:

    nft pridať pravidlo xy tcp dport "ssh"
    nft zoznam pravidiel -l
    tabuľka x {
    reťaz y {
    ...
    tcp dport "ssh"
    }
    }

  • Schopnosť skontrolovať typ sieťového rozhrania. Napríklad:

    pridať pravidlo inet surové predbežné smerovanie meta iifkind "vrf" prijať

  • Vylepšená podpora dynamickej aktualizácie obsahu sád explicitným špecifikovaním príznaku „dynamický“. Ak chcete napríklad aktualizovať sadu „s“, aby ste pridali zdrojovú adresu a resetovali položku, ak počas 30 sekúnd neexistujú žiadne pakety:

    pridať tabuľku x
    add set xs { type ipv4_addr; veľkosť 128; časový limit 30 s; dynamické príznaky; }
    add chain xy { type filter hook input priority 0; }
    pridať pravidlo xy aktualizovať @s { ip saddr }

  • Možnosť nastaviť samostatnú podmienku časového limitu. Ak chcete napríklad prepísať predvolený časový limit pre pakety prichádzajúce na port 8888, môžete zadať:

    filter ip tabuľky {
    ct timeout agresivní-tcp {
    protokol tcp;
    l3proto ip;
    politika = {established: 100, close_wait: 4, close: 4}
    }
    reťazový výstup {
    ...
    tcp dport 8888 ct timeout nastavený na "aggressive-tcp"
    }
    }

  • Podpora NAT pre inet rodinu:

    tabuľka inet nat {
    ...
    ip6 daddr dead::2::1 dnat to dead:2::99
    }

  • Vylepšené hlásenie chýb preklepov:

    nft pridať test reťazového filtra

    Chyba: Žiadny takýto súbor alebo adresár; mali ste na mysli slovo "filter" v rodine ip?
    pridať test reťazového filtra
    ^^^^^^

  • Schopnosť špecifikovať názvy rozhraní v sadách:

    set sc {
    zadajte inet_service . ifname
    elementy = { "ssh" . "eth0" }
    }

  • Aktualizovaná syntax pravidiel toku:

    nft pridať tabuľku x
    nft add flowtable x ft { hook ingress priority 0; zariadenia = { eth0, wlan0 }; }
    ...
    nft add rule x forward ip protocol { tcp, udp } flow add @ft

  • Vylepšená podpora JSON.

Zdroj: opennet.ru

Pridať komentár