Izdaja paketnega filtra nftables 0.9.1

Po letu razvoja predstavljeno sprostitev paketnega filtra nftables 0.9.1, ki se razvija kot zamenjava za iptables, ip6table, arptables in ebtables s poenotenjem vmesnikov za filtriranje paketov za IPv4, IPv6, ARP in omrežne mostove. Paket nftables vključuje komponente paketnega filtra, ki se izvajajo v uporabniškem prostoru, medtem ko delo na ravni jedra zagotavlja podsistem nf_tables, ki je del jedra Linuxa od izdaje 3.13.

Raven jedra zagotavlja le generični vmesnik, neodvisen od protokola, ki zagotavlja osnovne funkcije za pridobivanje podatkov iz paketov, izvajanje podatkovnih operacij in nadzor pretoka.
Sama logika filtriranja in obdelovalci, specifični za protokol, so v uporabniškem prostoru prevedeni v bajtno kodo, nakar se ta bajtna koda naloži v jedro s pomočjo vmesnika Netlink in izvede v posebnem virtualnem stroju, ki spominja na BPF (Berkeley Packet Filters). Ta pristop vam omogoča, da znatno zmanjšate velikost filtrirne kode, ki se izvaja na ravni jedra, in premaknete vse funkcije pravil razčlenjevanja in logike za delo s protokoli v uporabniški prostor.

Glavne novosti:

  • Podpora IPsec, ki omogoča ujemanje naslovov tunela na podlagi paketa, ID-ja zahteve IPsec in oznake SPI (indeks varnostnih parametrov). na primer

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

    Prav tako je mogoče preveriti, ali pot poteka skozi tunel IPsec. Če želite na primer blokirati promet, ki ni prek IPSec:

    … izhod filtra rt ipsec manjka padec

  • Podpora za IGMP (Internet Group Management Protocol). S pravilom lahko na primer zavržete dohodne zahteve za članstvo v skupini IGMP

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

  • Možnost uporabe spremenljivk za definiranje prehodnih verig (jump / goto). Na primer:

    definiraj dest = ber
    dodaj pravilo ip foo bar jump $dest

  • Podpora za maske za identifikacijo operacijskih sistemov (OS Fingerprint) na podlagi vrednosti TTL v glavi. Če želite na primer označiti pakete glede na OS pošiljatelja, lahko uporabite ukaz:

    ... meta oznaka set osf ttl skip name map { "Linux" : 0x1,
    "Windows": 0x2,
    "MacOS": 0x3,
    "neznano": 0x0}
    ... osf ttl preskoči različico "Linux:4.20"

  • Zmožnost ujemanja naslova ARP pošiljatelja in naslova IPv4 ciljnega sistema. Če želite na primer povečati števec paketov ARP, poslanih z naslova 192.168.2.1, lahko uporabite naslednje pravilo:

    tabela arp x {
    veriga y {
    vrsta filtra kavelj vhodni prednostni filter; politika sprejeti;
    arp saddr ip 192.168.2.1 števec paketov 1 bajtov 46
    }
    }

  • Podpora za pregledno posredovanje zahtevkov preko posrednika (tproxy). Če želite na primer preusmeriti klice na vrata 80 na posredniška vrata 8080:

    tabela ip x {
    veriga y {
    tip filtra prioriteta predhodnega usmerjanja -150; politika sprejeti;
    tcp dport 80 tproxy do :8080
    }
    }

  • Podpora za označevanje vtičnic z možnostjo nadaljnjega pridobivanja nastavljene oznake prek setsockopt() v načinu SO_MARK. Na primer:

    tabela inet x {
    veriga y {
    tip filtra prioriteta predhodnega usmerjanja -150; politika sprejeti;
    tcp dport 8080 oznaka nastavi oznako vtičnice
    }
    }

  • Podpora za določanje prednostnih besedilnih imen za verige. Na primer:

    nft add chain ip x raw { type filter hook prerouting priority raw; }
    nft dodaj verigo ip x filter { vrsta filtra kavelj predusmerjevalni prednostni filter; }
    nft dodaj verigo ip x filter_later { vrsta kavelj filtra predusmerjevalni prednostni filter + 10; }

  • Podpora za oznake SELinux (Secmark). Če želite na primer definirati oznako "sshtag" v kontekstu SELinux, lahko zaženete:

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

    In nato uporabite to oznako v pravilih:

    nft add rule inet filter input tcp dport 22 meta secmark set “sshtag”

    nft dodaj zemljevid inet filter secmapping { type inet_service : secmark; }
    nft dodaj element inet filter secmapping { 22 : "sshtag" }
    nft add rule inet filter input meta secmark set tcp dport map @secmapping

  • Možnost podajanja vrat, dodeljenih protokolom v besedilni obliki, kot so definirana v datoteki /etc/services. Na primer:

    nft dodaj pravilo xy tcp dport "ssh"
    nabor pravil seznama nft -l
    tabela x {
    veriga y {
    ...
    tcp dport "ssh"
    }
    }

  • Možnost preverjanja vrste omrežnega vmesnika. Na primer:

    dodaj pravilo inet raw prerouting meta iifkind "vrf" accept

  • Izboljšana podpora za dinamično posodabljanje vsebine nizov z izrecno določitvijo zastavice »dinamično«. Če želite na primer posodobiti niz "s", da dodate izvorni naslov in ponastavite vnos, če 30 sekund ni paketov:

    dodajte tabelo x
    add set xs { type ipv4_addr; velikost 128; časovna omejitev 30 s; zastave dinamične; }
    dodaj verigo xy { tip kavelj filtra prioriteta vnosa 0; }
    dodaj pravilo xy posodobi @s { ip saddr }

  • Možnost nastavitve ločenega pogoja časovne omejitve. Na primer, če želite preglasiti privzeto časovno omejitev za pakete, ki prispejo na vrata 8888, lahko določite:

    filter ip tabele {
    ct timeout aggressive-tcp {
    protokol tcp;
    l3proto ip;
    pravilnik = {ustanovljeno: 100, close_wait: 4, close: 4}
    }
    verižni izhod {
    ...
    tcp dport 8888 ct časovna omejitev nastavljena "aggressive-tcp"
    }
    }

  • Podpora NAT za družino inet:

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

  • Izboljšano poročanje o tipkarskih napakah:

    nft add test verižnega filtra

    Napaka: Ni takšne datoteke ali imenika; ste mislili "filter" tabele v ip-ju družine?
    dodajte test verižnega filtra
    ^^^^^^

  • Možnost določanja imen vmesnikov v nizih:

    nastavi sc {
    vnesite inet_service. ifname
    elementi = { "ssh" . "eth0"}
    }

  • Posodobljena sintaksa pravil tabele poteka:

    nft dodaj tabelo x
    nft add flowtable x ft { hook ingress priority 0; naprave = {eth0, wlan0}; }
    ...
    nft add rule x forward ip protokol { tcp, udp } flow add @ft

  • Izboljšana podpora za JSON.

Vir: opennet.ru

Dodaj komentar