nftables pakkefilter 0.9.1 udgivelse

Efter et års udvikling præsenteret frigivelse af pakkefilter nftables 0.9.1, der udvikler sig som en erstatning for iptables, ip6table, arptables og ebtables ved at forene pakkefiltreringsgrænseflader til IPv4, IPv6, ARP og netværksbroer. nftables-pakken inkluderer pakkefilterkomponenter, der kører i brugerrum, mens arbejdet på kerneniveau leveres af nf_tables-undersystemet, som har været en del af Linux-kernen siden release 3.13.

Kerneniveauet giver kun en generisk protokol-uafhængig grænseflade, der giver grundlæggende funktioner til at udtrække data fra pakker, udføre dataoperationer og flowkontrol.
Selve filtreringslogikken og protokolspecifikke handlere kompileres til bytekode i brugerrummet, hvorefter denne bytekode indlæses i kernen ved hjælp af Netlink-grænsefladen og eksekveres i en speciel virtuel maskine, der minder om BPF (Berkeley Packet Filters). Denne tilgang giver dig mulighed for betydeligt at reducere størrelsen af ​​den filtreringskode, der kører på kerneniveau, og flytte alle funktionerne i parsingregler og logik til at arbejde med protokoller ind i brugerrummet.

Vigtigste innovationer:

  • IPsec-understøttelse, der muliggør matchning af tunneladresser baseret på pakke, IPsec-anmodnings-id og SPI (Security Parameter Index) tag. For eksempel,

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

    Det er også muligt at kontrollere, om en rute går gennem en IPsec-tunnel. For eksempel for at blokere trafik ikke via IPSec:

    … filter output rt ipsec mangler fald

  • Support til IGMP (Internet Group Management Protocol). For eksempel kan du bruge en regel til at afvise indgående anmodninger om IGMP-gruppemedlemskab

    nft tilføje regel netdev foo bar igmp type medlemskab-forespørgsel counter drop

  • Mulighed for at bruge variable til at definere overgangskæder (hop/goto). For eksempel:

    definere dest = ber
    tilføje regel ip foo bar jump $dest

  • Understøttelse af masker til at identificere operativsystemer (OS Fingerprint) baseret på TTL-værdier i overskriften. For eksempel, for at markere pakker baseret på afsender OS, kan du bruge kommandoen:

    ... meta mark set osf ttl skip name map { "Linux" : 0x1,
    "Windows": 0x2,
    "MacOS": 0x3,
    "ukendt" : 0x0 }
    ... osf ttl spring version "Linux:4.20" over

  • Evne til at matche afsenderens ARP-adresse og målsystemets IPv4-adresse. For for eksempel at øge tælleren for ARP-pakker sendt fra adressen 192.168.2.1, kan du bruge følgende regel:

    tabel arp x {
    kæde y {
    type filter krog input prioritet filter; politik acceptere;
    arp saddr ip 192.168.2.1 tællerpakker 1 bytes 46
    }
    }

  • Understøttelse af gennemsigtig videresendelse af anmodninger gennem en proxy (tproxy). For eksempel, for at omdirigere opkald til port 80 til proxy-port 8080:

    tabel ip x {
    kæde y {
    type filter krog prerouting prioritet -150; politik acceptere;
    tcp dport 80 tproxy til :8080
    }
    }

  • Understøttelse af mærkning af sockets med mulighed for yderligere at opnå sætmærket via setsockopt() i SO_MARK-tilstand. For eksempel:

    tabel inet x {
    kæde y {
    type filter krog prerouting prioritet -150; politik acceptere;
    tcp dport 8080 mærke sæt socket mærke
    }
    }

  • Understøttelse af angivelse af prioriterede tekstnavne til kæder. For eksempel:

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

  • Understøttelse af SELinux-tags (Secmark). For eksempel, for at definere "sshtag"-tagget i en SELinux-kontekst, kan du køre:

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

    Og brug derefter denne etiket i reglerne:

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

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

  • Mulighed for at specificere porte tildelt til protokoller i tekstform, som de er defineret i filen /etc/services. For eksempel:

    nft tilføje regel xy tcp dport "ssh"
    nft liste regelsæt -l
    tabel x {
    kæde y {
    ...
    tcp dport "ssh"
    }
    }

  • Mulighed for at kontrollere typen af ​​netværksgrænseflade. For eksempel:

    tilføje regel inet rå prerouting meta iifkind "vrf" acceptere

  • Forbedret understøttelse af dynamisk opdatering af indholdet af sæt ved eksplicit at angive det "dynamiske" flag. For eksempel for at opdatere sæt "s" for at tilføje kildeadressen og nulstille posten, hvis der ikke er pakker i 30 sekunder:

    tilføj tabel x
    tilføje sæt xs { type ipv4_addr; størrelse 128; timeout 30s; flag dynamisk; }
    add chain xy { type filter hook input prioritet 0; }
    tilføj regel xy opdatering @s { ip saddr }

  • Mulighed for at indstille en separat timeout-tilstand. For at tilsidesætte standard timeout for pakker, der ankommer på port 8888, kan du f.eks. angive:

    tabel ip filter {
    ct timeout aggressive-tcp {
    protokol tcp;
    l3proto ip;
    politik = {etableret: 100, close_wait: 4, tæt: 4}
    }
    kædeudgang {
    ...
    tcp dport 8888 ct timeout sæt "aggressive-tcp"
    }
    }

  • NAT-støtte til inet-familien:

    tabel inet nat {
    ...
    ip6 daddr død::2::1 dnat til død:2::99
    }

  • Forbedret indtastningsfejlrapportering:

    nft add kæde filter test

    Fejl: Ingen sådan fil eller mappe; mente du tabel "filter" i familie ip?
    tilføj kædefiltertest
    ^^^^^^

  • Mulighed for at angive grænsefladenavne i sæt:

    sæt sc {
    skriv inet_service . hvisnavn
    elementer = { "ssh" . "eth0" }
    }

  • Opdateret syntaks for flowtabelregler:

    nft tilføje tabel x
    nft add flowtable x ft { hook ingress priority 0; enheder = { eth0, wlan0 }; }
    ...
    nft add rule x forward ip protokol { tcp, udp } flow add @ft

  • Forbedret JSON-understøttelse.

Kilde: opennet.ru

Tilføj en kommentar