nftables paka filtrilo 0.9.1 eldono

Post jaro da evoluo prezentita paka filtrilo liberigo nftables 0.9.1, evoluante kiel anstataŭaĵo por iptables, ip6table, arptables kaj ebtables unuigante pakaĵetfiltrilinterfacojn por IPv4, IPv6, ARP kaj retaj pontoj. La pako nftables inkluzivas pakatajn filtrilkomponentojn kiuj funkcias en uzantspaco, dum la kernnivela laboro estas disponigita de la subsistemo nf_tables, kiu estis parto de la Linukso-kerno ekde eldono 3.13.

La kernnivelo disponigas nur senmarkan protokol-sendependan interfacon kiu disponigas bazajn funkciojn por eltiri datenojn de pakaĵetoj, elfarante datumoperaciojn, kaj flukontrolon.
La filtra logiko mem kaj protokol-specifaj prizorgantoj estas kompilitaj en bajtokodon en uzantspaco, post kiu tiu bajtokodo estas ŝarĝita en la kernon uzante la Netlink-interfacon kaj efektivigita en speciala virtuala maŝino rememoriga pri BPF (Berkeley Packet Filters). Ĉi tiu aliro permesas vin signife redukti la grandecon de la filtra kodo funkcianta ĉe la kernnivelo kaj movi ĉiujn funkciojn de analizaj reguloj kaj logiko por labori kun protokoloj en uzantspacon.

Ĉefaj novigoj:

  • IPsec-subteno, permesante kongruon de tunelaj adresoj bazitaj sur pakaĵeto, IPsec-peto ID, kaj SPI (Security Parameter Index) etikedo. Ekzemple,

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

    Eblas ankaŭ kontroli ĉu itinero pasas tra IPsec-tunelo. Ekzemple, por bloki trafikon ne per IPSec:

    … filtrila eligo rt ipsec mankas guto

  • Subteno por IGMP (Interreta Group Management Protocol). Ekzemple, vi povas uzi regulon por forĵeti alvenantajn IGMP-grupajn petojn

    nft aldoni regulon netdev foo bar igmp tipo membreco-demando nombrilo drop

  • Eblo uzi variablojn por difini transirajn ĉenojn (salti / goto). Ekzemple:

    define dest = ber
    aldoni regulon ip foo bar jump $dest

  • Subteno por maskoj por identigi operaciumojn (OS Fingerprint) surbaze de TTL-valoroj en la kaplinio. Ekzemple, por marki pakaĵojn bazitajn sur la sendinto OS, vi povas uzi la komandon:

    ... meta mark set osf ttl skip name map { "Linukso" : 0x1,
    "Vindozo": 0x2,
    "MacOS": 0x3,
    "nekonata" : 0x0}
    ... osf ttl preterpasi version "Linukso:4.20"

  • Kapablo kongrui kun la ARP-adreso de la sendinto kaj la IPv4-adreso de la cela sistemo. Ekzemple, por pliigi la nombrilon de ARP-pakoj senditaj de la adreso 192.168.2.1, vi povas uzi la jenan regulon:

    tablo arp x {
    ĉeno y {
    tipo filtrilo hoko enigo prioritata filtrilo; politiko akcepti;
    arp saddr ip 192.168.2.1 nombrilo pakoj 1 bajtoj 46
    }
    }

  • Subteno por travidebla plusendado de petoj per prokurilo (tproxy). Ekzemple, por redirekti vokojn al haveno 80 al prokura haveno 8080:

    tablo ip x {
    ĉeno y {
    tipo filtrila hoko prerouting prioritato -150; politiko akcepti;
    tcp dport 80 tproxy al :8080
    }
    }

  • Subteno por markado de ingoj kun la kapablo plu akiri la fiksitan markon per setsockopt () en SO_MARK-reĝimo. Ekzemple:

    tablo inet x {
    ĉeno y {
    tipo filtrila hoko prerouting prioritato -150; politiko akcepti;
    tcp dport 8080 marko starigis socketmarkon
    }
    }

  • Subteno por specifi prioritatajn tekstajn nomojn por ĉenoj. Ekzemple:

    nft add chain ip x raw { type filter hook prerouting prioritato kruda; }
    nft add chain ip x filter { type filter hook prerouting prioritata filtrilo; }
    nft add chain ip x filter_later { type filter hook prerouting prioritata filtrilo + 10; }

  • Subteno por SELinux-etikedoj (Secmark). Ekzemple, por difini la etikedon "sshtag" en kunteksto de SELinux, vi povas ruli:

    nft aldonu secmark inet filtrilon sshtag "system_u:object_r:ssh_server_packet_t:s0"

    Kaj poste uzu ĉi tiun etikedon en la reguloj:

    nft aldonu regulon inet filtrilo enigo tcp dport 22 meta sekmark aro "sshtag"

    nft aldoni mapon inet filtrilo sekmapping { type inet_service : sekmarko; }
    nft aldonu elementon inet filtrilon secmapping { 22 : "sshtag" }
    nft aldoni regulon inet filtrilo enigo meta sekmarko agordi tcp dport mapo @secmapping

  • Kapablo specifi pordojn asignitajn al protokoloj en tekstformo, kiel ili estas difinitaj en la /etc/services-dosiero. Ekzemple:

    nft aldonu regulon xy tcp dport "ssh"
    nft listo reguloj -l
    tablo x {
    ĉeno y {
    ...
    tcp dport "ssh"
    }
    }

  • Kapablo kontroli la tipon de reto-interfaco. Ekzemple:

    aldoni regulon inet raw prerouting meta iifkind "vrf" akcepti

  • Plibonigita subteno por dinamike ĝisdatigi la enhavon de aroj eksplicite specifante la "dinamikan" flagon. Ekzemple, por ĝisdatigi agordi "s" por aldoni la fontadreson kaj restarigi la eniron se ne estas pakaĵetoj dum 30 sekundoj:

    aldoni tabelon x
    aldoni aron xs { tajpu ipv4_addr; grandeco 128; timeout 30s; flagoj dinamikaj; }
    add chain xy { type filter hook enigo prioritato 0; }
    aldonu regulon xy ĝisdatigi @s { ip saddr }

  • Kapablo agordi apartan tempoforkondiĉon. Ekzemple, por anstataŭi la defaŭltan tempon por pakaĵoj alvenantaj sur la haveno 8888, vi povas specifi:

    tabel ip filtrilo {
    ct timeout agresema-tcp {
    protokolo tcp;
    l3proto ip;
    politiko = {establita: 100, close_wait: 4, fermi: 4}
    }
    ĉena eligo {
    ...
    tcp dport 8888 ct timeout aro "agresema-tcp"
    }
    }

  • NAT-subteno por inet-familio:

    tablo inet nat {
    ...
    ip6 daddr dead::2::1 dnat to dead:2::99
    }

  • Plibonigita erarraportado de tajperaroj:

    nft aldoni ĉenan filtrilteston

    Eraro: Ne tia dosiero aŭ dosierujo; ĉu vi volis diri tabelon "filtrilo" en familia ip?
    aldonu ĉenfiltrilteston
    ^^^^^^

  • Kapablo specifi interfacajn nomojn en aroj:

    agordi sc {
    tajpu inet_service . ifnomo
    elementoj = { "ssh" . "eth0"}
    }

  • Ĝisdatigita sintakso de reguloj de flutabelo:

    nft aldoni tabelon x
    nft add flowtable x ft { hook ingress prioritato 0; aparatoj = { eth0, wlan0 }; }
    ...
    nft aldoni regulon x antaŭen ipprotokolo { tcp, udp } flow add @ft

  • Plibonigita JSON-subteno.

fonto: opennet.ru

Aldoni komenton