nftables pakešu filtra izlaišana 0.9.1

Pēc gada attīstības uzrādīts pakešu filtra atbrīvošana nftables 0.9.1, kas tiek izstrādāts kā iptables, ip6table, arptables un ebtables aizstājējs, apvienojot pakešu filtrēšanas saskarnes IPv4, IPv6, ARP un tīkla tiltiem. Pakotnē nftables ir iekļauti pakešu filtru komponenti, kas darbojas lietotāja telpā, savukārt kodola līmeņa darbu nodrošina apakšsistēma nf_tables, kas ir daļa no Linux kodola kopš 3.13. izlaiduma.

Kodola līmenis nodrošina tikai vispārīgu no protokola neatkarīgu saskarni, kas nodrošina pamatfunkcijas datu iegūšanai no paketēm, datu operāciju veikšanai un plūsmas kontrolei.
Pati filtrēšanas loģika un protokolam raksturīgie apstrādātāji tiek apkopoti baitkodā lietotāja telpā, pēc kura šis baitkods tiek ielādēts kodolā, izmantojot Netlink interfeisu, un tiek izpildīts īpašā virtuālajā mašīnā, kas atgādina BPF (Berkeley Packet Filters). Šī pieeja ļauj ievērojami samazināt kodola līmenī strādājošā filtrēšanas koda lielumu un pārvietot visas parsēšanas noteikumu un loģikas funkcijas darbam ar protokoliem lietotāja telpā.

Galvenie jauninājumi:

  • IPsec atbalsts, kas ļauj saskaņot tuneļa adreses, pamatojoties uz paketi, IPsec pieprasījuma ID un SPI (drošības parametru indeksa) tagu. Piemēram,

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

    Ir arī iespējams pārbaudīt, vai maršruts iet caur IPsec tuneli. Piemēram, lai bloķētu trafiku, nevis izmantojot IPSec:

    … filtra izvades rt ipsec trūkst krituma

  • Atbalsts IGMP (Internet Group Management Protocol). Piemēram, varat izmantot kārtulu, lai atmestu ienākošos IGMP grupas dalības pieprasījumus

    nft pievienošanas kārtula netdev foo bar igmp tipa dalības vaicājuma skaitītāja kritums

  • Iespēja izmantot mainīgos, lai definētu pārejas ķēdes (lēkt / goto). Piemēram:

    definēt dest = ber
    pievienot noteikumu ip foo bar lēciens $dest

  • Atbalsts maskām, lai identificētu operētājsistēmas (OS Fingerprint), pamatojoties uz TTL vērtībām galvenē. Piemēram, lai atzīmētu paketes, pamatojoties uz sūtītāja OS, varat izmantot komandu:

    ... meta atzīmes kopa osf ttl izlaist nosaukumu karti { "Linux" : 0x1,
    "Windows": 0x2,
    "MacOS": 0x3,
    "nezināms": 0x0}
    ... osf ttl izlaist versiju "Linux:4.20"

  • Spēja saskaņot sūtītāja ARP adresi un mērķa sistēmas IPv4 adresi. Piemēram, lai palielinātu no adreses 192.168.2.1 nosūtīto ARP pakešu skaitītāju, varat izmantot šādu noteikumu:

    tabula arp x {
    ķēde y {
    tipa filtra āķis ievades prioritātes filtrs; pieņemt politiku;
    arp saddr ip 192.168.2.1 counter paketes 1 baits 46
    }
    }

  • Atbalsts pārredzamai pieprasījumu pārsūtīšanai, izmantojot starpniekserveri (tproxy). Piemēram, lai novirzītu zvanus uz portu 80 uz starpniekservera portu 8080:

    tabula ip x {
    ķēde y {
    tipa filtra āķa pirmsmaršrutēšanas prioritāte -150; pieņemt politiku;
    tcp dport 80 tproxy uz :8080
    }
    }

  • Atbalsts ligzdu marķēšanai ar iespēju tālāk iegūt iestatīto atzīmi, izmantojot setsockopt() režīmā SO_MARK. Piemēram:

    tabula inet x {
    ķēde y {
    tipa filtra āķa pirmsmaršrutēšanas prioritāte -150; pieņemt politiku;
    tcp dport 8080 mark kopas ligzdas marķējums
    }
    }

  • Atbalsts prioritāro teksta nosaukumu norādīšanai ķēdēm. Piemēram:

    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 pievienot ķēdi ip x filter_later { type filter hook prerouting priority filter + 10; }

  • SELinux tagu atbalsts (Secmark). Piemēram, lai definētu tagu "sshtag" SELinux kontekstā, varat palaist:

    nft pievienot secmark inet filtru sshtag "system_u:object_r:ssh_server_packet_t:s0"

    Un pēc tam izmantojiet šo etiķeti noteikumos:

    nft pievienošanas kārtula inet filtra ievade tcp dport 22 meta secmark kopa “sshtag”

    nft pievienot karti inet filtrs secmapping { tips inet_service : secmark; }
    nft add element inet filter secmapping { 22 : "sshtag"}
    nft pievienošanas kārtula inet filtra ievade meta secmark iestatīt tcp dport karte @secmapping

  • Iespēja norādīt protokoliem piešķirtos portus teksta formā, kā tie ir definēti /etc/services failā. Piemēram:

    nft pievienot noteikumu xy tcp dport "ssh"
    nft saraksta noteikumu kopa -l
    tabula x {
    ķēde y {
    ...
    tcp dport "ssh"
    }
    }

  • Iespēja pārbaudīt tīkla saskarnes veidu. Piemēram:

    pievienot noteikumu inet raw prerouting meta iifkind "vrf" pieņemt

  • Uzlabots atbalsts kopu satura dinamiskai atjaunināšanai, skaidri norādot “dinamisko” karogu. Piemēram, lai atjauninātu kopu "s", lai pievienotu avota adresi un atiestatītu ierakstu, ja 30 sekundes nav pakešu:

    pievienot tabulu x
    pievienot kopu xs { tipa ipv4_addr; izmērs 128; taimauts 30s; karodziņi dinamiski; }
    pievienot ķēdi xy { tipa filtra āķa ievades prioritāte 0; }
    pievienot noteikumu xy atjauninājumu @s { ip saddr }

  • Iespēja iestatīt atsevišķu taimauta nosacījumu. Piemēram, lai ignorētu noklusējuma taimautu paketēm, kas pienāk portā 8888, varat norādīt:

    tabulas ip filtrs {
    ct taimauts aggressive-tcp {
    protokols tcp;
    l3proto ip;
    politika = {izveidots: 100, aizvēršanas_gaidīšana: 4, aizvēršana: 4}
    }
    ķēdes izvade {
    ...
    tcp dport 8888 ct taimauts iestatīts "agressive-tcp"
    }
    }

  • NAT atbalsts inet ģimenei:

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

  • Uzlabota drukas kļūdu ziņošana:

    nft pievienot ķēdes filtra testu

    Kļūda: nav šāda faila vai direktorija; vai jūs domājāt tabulas "filtru" ģimenes ip?
    pievienot ķēdes filtra testu
    ^^^^^^

  • Iespēja norādīt interfeisa nosaukumus komplektos:

    set sc {
    ierakstiet inet_service . ifname
    elementi = { "ssh" . "eth0" }
    }

  • Atjaunināta plūsmas tabulas noteikumu sintakse:

    nft pievienot tabulu x
    nft pievienot plūsmas tabulu x ft { āķa ieejas prioritāte 0; ierīces = {eth0, wlan0}; }
    ...
    nft pievienot noteikumu x pārsūtīt ip protokolu { tcp, udp } plūsma add @ft

  • Uzlabots JSON atbalsts.

Avots: opennet.ru

Pievieno komentāru