Udgivelse af den pakke-filtres nftables 0.9.5

Publiceret udgivelse af pakkefilter nftables 0.9.5, der udvikler sig som en erstatning for iptables, ip6tables, arptables og ebtables ved at forene filtreringsgrænsefladerne for IPv4, IPv6, ARP og netværksbroer. Paketet nftables inkluderer komponenter af pakkefilteret, der opererer i brugerens rum, mens kernens subsystem nf_tables, som er en del af Linux-kernen siden version 3.13, håndterer arbejdet. De nødvendige ændringer for nftables 0.9.5 er inkluderet i kernen Linux 5.7.

På kerne-niveau tilbydes der kun en generel grænseflade, der ikke afhænger af et specifikt protokol og tilbyder grundlæggende funktioner til at udtrække data fra pakker, udføre operationer med data og styre strømmen. De faktiske filtreringsregler og protokolspecifikke håndterere kompileres til bytekode i brugermiljøet, hvorefter denne bytekode indlæses i kernen via Netlink-grænsefladen og udføres i kernen i en speciel virtuel maskine, der ligner BPF (Berkeley Packet Filters). Denne tilgang muliggør en betydelig reduktion af den kode, der kører på kerne-niveau, og flytter alle funktioner til regelparsing og logikken vedrørende protokoller ind i brugermiljøet.

Hovednyhederne:

  • Sætterne har fået støtte til tællere af pakker og trafik tilknyttet sætmedlemmer. Tællerne aktiveres ved hjælp af nøgleordet «counter»:

    table ip x {
    set y {
    typeof ip saddr
    counter
    elementer = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    chain z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }

  • For at indstille startværdier for tællerne, f.eks. for at gendanne gamle tællere efter en genstart, kan kommandoen «nft -f» anvendes:

    # cat ruleset.nft
    table ip x {
    set y {
    typeof ip saddr
    counter
    elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
    counter p 192.168.10.135 counter packets 0 bytes 0 }
    }

    chain z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }
    # nft -f ruleset.nft
    # nft list ruleset
    table ip x {
    set y {
    typeof ip saddr
    counter
    elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
    counter p 192.168.10.135 counter packets 0 bytes 0 }
    }

    chain z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }

  • Støtte til tællere er også tilføjet til flowtable:

    tabel ip foo {
    flowtable bar {
    hook ingress priority -100
    devices = { eth0, eth1 }
    counter
    }

    chain forward {
    type filter hook forward priority filter;
    flow add @bar counter
    }
    }

    Listen over tællere kan ses med kommandoen «conntrack -L»:

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 packets=9 bytes=608 \
    src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 packets=8 bytes=428 [OFFLOAD] mark=0 \
    secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
    packets=1005763 bytes=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
    packets=967505 bytes=50310268 [OFFLOAD] mark=0 secctx=null use=2

  • I sæt til sammenkædning (concatenation, bestemte kombinationer af adresser og porte, der letter sammenligningen) er der mulighed for at anvende direktivet «typeof», som definerer datatypen for elementer i sættelementerne:

    tabel ip foo {
    sæt whitelist {
    typeof ip saddr . tcp dport
    elements = { 192.168.10.35 . 80, 192.168.10.101 . 80 }
    }

    kæde bar {
    type filter hook prerouting prioritet filter; politik drop;
    ip daddr . tcp dport @whitelist accept
    }
    }

  • Direktivet typeof kan nu også anvendes til sammenkædninger i map-lister:

    tabel ip foo {
    map addr2mark {
    typeof ip saddr . tcp dport : meta mark
    elements = { 192.168.10.35 . 80 : 0x00000001,
    192.168.10.135 . 80 : 0x00000002 }
    }

    kæde bar {
    type filter hook prerouting prioritet filter; politik drop;
    meta mark set ip daddr . tcp dport map @addr2mark accept
    }
    }

  • Støtte til sammenkædninger med intervaller er tilføjet i anonyme (unnamed) sæt:

    # nft add rule inet filter input ip daddr . tcp dport \
    { 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8 . 80-443 } accept

  • Mulighed for at droppe pakker med 802.1q (VLAN) flags under behandlingen af netværksbroer er blevet tilføjet:

    # nft add rule bridge foo bar ether type vlan reject with tcp reset

  • Støtte til matchning af TCP-session ID (conntrack ID) er blevet tilføjet. For at bestemme conntrack ID kan du bruge indstillingen «—output id»:

    # conntrack -L —output id
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 packets=2 \
    bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 packets=2 bytes=320 \
    [ASSURED] mark=0 use=1 id=2779986232

    # nft add rule foo bar ct id 2779986232 counter

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster