nftables pakettfiltri 0.9.1 väljalase

Pärast aastast arengut esitatakse pakettfiltri vabastamine nftables 0.9.1, mis töötatakse välja iptableside, ip6table, arptablete ja ebtable'ide asendajana, ühendades IPv4, IPv6, ARP ja võrgusildade pakettide filtreerimise liidesed. Pakett nftables sisaldab pakettfiltri komponente, mis töötavad kasutajaruumis, samas kui kerneli tasemel töö tagab alamsüsteem nf_tables, mis on Linuxi kerneli osa olnud alates versioonist 3.13.

Kerneli tase pakub ainult üldist protokollist sõltumatut liidest, mis pakub põhifunktsioone pakettidest andmete eraldamiseks, andmetoimingute tegemiseks ja voo juhtimiseks.
Filtreerimisloogika ise ja protokollispetsiifilised töötlejad kompileeritakse kasutajaruumis baitkoodiks, misjärel laaditakse see baitkood Netlink liidese abil kernelisse ja käivitatakse spetsiaalses BPF-i meenutavas virtuaalmasinas (Berkeley Packet Filters). Selline lähenemine võimaldab oluliselt vähendada kerneli tasemel töötava filtreerimiskoodi suurust ning teisaldada kasutajaruumi kõik sõelumisreeglite ja protokollidega töötamise loogika funktsioonid.

Peamised uuendused:

  • IPseci tugi, mis võimaldab sobitada tunneli aadresse paketi, IPseci päringu ID ja SPI (turvaparameetriindeksi) sildi alusel. Näiteks,

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

    Samuti on võimalik kontrollida, kas marsruut läbib IPsec-tunnelit. Näiteks liikluse blokeerimiseks mitte IPSeci kaudu:

    … filtri väljund rt ipsec puudub langus

  • IGMP (Internet Group Management Protocol) tugi. Näiteks saate kasutada reeglit sissetulevate IGMP-rühma liikmelisuse taotluste tühistamiseks

    nft lisamise reegli netdev foo bar igmp tüüpi liikmesuse päringu loenduri langus

  • Võimalus kasutada muutujaid üleminekuahelate määratlemiseks (hüppa / goto). Näiteks:

    define dest = ber
    lisa reegel ip foo bar hüpata $dest

  • Maskide tugi operatsioonisüsteemide tuvastamiseks (OS-i sõrmejälg), mis põhinevad päises olevatel TTL väärtustel. Näiteks saate pakettide märgistamiseks saatja OS-i alusel kasutada käsku:

    ... metamark set osf ttl jäta nimekaart vahele { "Linux" : 0x1,
    "Windows": 0x2,
    "MacOS": 0x3,
    "teadmata": 0x0}
    ... osf ttl jäta vahele versioon "Linux:4.20"

  • Võimalus sobitada saatja ARP-aadressi ja sihtsüsteemi IPv4-aadressi. Näiteks aadressilt 192.168.2.1 saadetud ARP-pakettide loenduri suurendamiseks võite kasutada järgmist reeglit:

    tabel arp x {
    kett y {
    tüüp filter konks sisendprioriteediga filter; poliitika aktsepteerima;
    arp saddr ip 192.168.2.1 loendur paketid 1 bait 46
    }
    }

  • Taotluste läbipaistva edastamise tugi puhverserveri (tproxy) kaudu. Näiteks pordi 80 kõnede ümbersuunamiseks puhverserveri porti 8080:

    tabeli ip x {
    kett y {
    tüüpi filtri konksu eelmarsruutimise prioriteet -150; poliitika aktsepteerima;
    tcp dport 80 tpuhverserver aadressile :8080
    }
    }

  • Toetus pistikupesade märgistamiseks koos võimalusega setsockopt() abil SO_MARK-režiimis täiendavalt saada määratud märgist. Näiteks:

    tabel inet x {
    kett y {
    tüüpi filtri konksu eelmarsruutimise prioriteet -150; poliitika aktsepteerima;
    tcp dport 8080 mark komplekti pistikupesa märk
    }
    }

  • Tugi kettide prioriteetsete tekstinimede määramiseks. Näiteks:

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

  • SELinuxi siltide tugi (Secmark). Näiteks märgendi "sshtag" määratlemiseks SELinuxi kontekstis saate käivitada:

    nft lisage secmark inet-filter sshtag "system_u:object_r:ssh_server_packet_t:s0"

    Ja seejärel kasutage seda silti reeglites:

    nft lisamise reegli inet-filtri sisend tcp dport 22 meta secmark komplekt "sshtag"

    nft add map inet filter secmapping { type inet_service : secmark; }
    nft add element inet filter secmapping { 22 : "sshtag" }
    nft lisa reegel inet filter sisend meta secmark set tcp dport map @secmapping

  • Võimalus määrata protokollidele määratud pordid teksti kujul, nagu need on määratletud failis /etc/services. Näiteks:

    nft lisa reegel xy tcp dport "ssh"
    nft loendi reeglistik -l
    tabel x {
    kett y {
    ...
    tcp dport "ssh"
    }
    }

  • Võimalus kontrollida võrguliidese tüüpi. Näiteks:

    lisa reegel inet raw prerouting meta iifkind "vrf" aktsepteeri

  • Täiustatud tugi komplektide sisu dünaamiliseks värskendamiseks, määrates selgesõnaliselt dünaamilise lipu. Näiteks komplekti "s" värskendamiseks lähteaadressi lisamiseks ja kirje lähtestamiseks, kui 30 sekundi jooksul pakette pole:

    lisa tabel x
    lisa komplekt xs { type ipv4_addr; suurus 128; timeout 30s; lipud dünaamilised; }
    add chain xy { type filter hook input priority 0; }
    lisa reegel xy värskendus @s { ip saddr }

  • Võimalus määrata eraldi ajalõpu tingimus. Näiteks pordi 8888 kaudu saabuvate pakettide vaikimisi ajalõpu alistamiseks saate määrata:

    tabeli ip filter {
    ct timeout agressive-tcp {
    protokoll tcp;
    l3proto ip;
    poliitika = {asutatud: 100, sulgemise_ootus: 4, sulgemine: 4}
    }
    ahelväljund {
    ...
    tcp dport 8888 ct ajalõpp seadis "agressive-tcp"
    }
    }

  • NAT-i tugi ineti perekonnale:

    tabel inet nat {
    ...
    ip6 isa surnud::2::1 dnat surnuks:2::99
    }

  • Täiustatud kirjavigade teatamine:

    nft lisa ketifiltri test

    Viga: sellist faili või kataloogi pole; kas mõtlesite perekonna IP-s tabeli "filtrit"?
    lisa ketifiltri test
    ^ ^ ^ ^ ^ ^

  • Võimalus määrata liideste nimesid komplektides:

    set sc {
    tippige inet_service . ifname
    elemendid = { "ssh" . "eth0" }
    }

  • Värskendatud vootabeli reeglite süntaks:

    nft lisage tabel x
    nft add flowtable x ft { konksu sissepääsu prioriteet 0; seadmed = { eth0, wlan0 }; }
    ...
    nft add reegel x edasta ip-protokoll { tcp, udp } voog add @ft

  • Täiustatud JSON-tugi.

Allikas: opennet.ru

Lisa kommentaar