nftables pakkefilter 0.9.5 udgivelse

offentliggjort frigivelse af pakkefilter nftables 0.9.5, 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. Ændringer, der kræves for at nftables 0.9.5-udgivelsen fungerer, er inkluderet i kernen Linux 5.7.

På kerneniveau er der kun en generisk protokol-uafhængig grænseflade, der giver grundlæggende funktioner til at udtrække data fra pakker, udføre operationer på data og kontrollere flow. Selve filtreringsreglerne og protokol-specifikke handlere kompileres til brugerrumsbytekode, hvorefter denne bytekode indlæses i kernen ved hjælp af Netlink-grænsefladen og eksekveres i kernen i en speciel virtuel maskine, der ligner BPF (Berkeley Packet Filters). Denne tilgang gør det muligt betydeligt at reducere størrelsen af ​​den filtreringskode, der kører på kerneniveau, og flytte alle funktionerne i parsingsregler og logikken i at arbejde med protokoller ind i brugerrummet.

Vigtigste innovationer:

  • Understøttelse af pakke- og trafiktællere forbundet med sæt-elementer er blevet tilføjet til sæt. Tællere aktiveres ved at bruge søgeordet "tæller":

    tabel ip x {
    sæt y {
    type ip saddr
    imødegå
    elementer = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    kæde z {
    type filter krog output prioritetsfilter; politik acceptere;
    ip daddr @y
    }
    }

  • For at indstille startværdierne for tællere, for eksempel for at gendanne tidligere tællere efter en genstart, kan du bruge kommandoen "nft -f":

    # kat regelsæt.nft
    tabel ip x {
    sæt y {
    type ip saddr
    imødegå
    elementer = { 192.168.10.35 tællerpakker 1 byte 84, 192.168.10.101 \
    tæller p 192.168.10.135 tællerpakker 0 bytes 0 }
    }

    kæde z {
    type filter krog output prioritetsfilter; politik acceptere;
    ip daddr @y
    }
    }
    # nft -f regelsæt.nft
    #nft liste regelsæt
    tabel ip x {
    sæt y {
    type ip saddr
    imødegå
    elementer = { 192.168.10.35 tællerpakker 1 byte 84, 192.168.10.101 \
    tæller p 192.168.10.135 tællerpakker 0 bytes 0 }
    }

    kæde z {
    type filter krog output prioritetsfilter; politik acceptere;
    ip daddr @y
    }
    }

  • Tællerunderstøttelse er også blevet tilføjet til flowtabel:

    table ip foo {
    flowtable bar {
    krogindgangsprioritet -100
    enheder = { eth0, eth1 }
    imødegå
    }

    kæde frem {
    type filter krog frem prioritet filter;
    flow tilføje @bar tæller
    }
    }

    Du kan se listen over tællere ved at bruge kommandoen "conntrack -L":

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 pakker=9 bytes=608 \
    src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 pakker=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 sammenkædningssæt (sammenkædning, visse bundter af adresser og porte, der forenkler sammenligning), er det muligt at bruge "typeof"-direktivet, som bestemmer datatypen af ​​elementer for de bestanddele af elementerne i sættet:

    table ip foo {
    sæt hvidliste {
    type ip saddr. tcp dport
    elementer = { 192.168.10.35 . 80, 192.168.10.101. 80}
    }

    kædestang {
    type filter krog prerouting prioritetsfilter; politik fald;
    ip daddr. tcp dport @whitelist accepter
    }
    }

  • Direktivet gælder nu også for sammenføjninger i kortlister:

    table ip foo {
    map addr2mark {
    type ip saddr. tcp dport: metamærke
    elementer = { 192.168.10.35 . 80: 0x00000001,
    192.168.10.135. 80 : 0x00000002 }
    }

    kædestang {
    type filter krog prerouting prioritetsfilter; politik fald;
    meta mark set ip daddr. tcp dport map @addr2mark accepter
    }
    }

  • Tilføjet understøttelse af range joins i anonyme (unavngivne) sæt:

    # nft tilføje regel inet filter input ip daddr . tcp dport\
    { 10.0.0.0/8. 10-23, 192.168.1.1-192.168.3.8. 80-443 } accepter

  • Muligheden for at kassere pakker med 802.1q (VLAN)-flag ved behandling af netværksbroer er tilvejebragt:

    # nft tilføje regel bro foo bar ether type vlan afvise med tcp nulstilling

  • Tilføjet understøttelse af matchning med TCP-session-id (conntrack-id). For at bestemme conntrack-id'et kan du bruge "--output id" muligheden:

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

    # nft tilføje regel foo bar ct id 2779986232 tæller

Kilde: opennet.ru

Tilføj en kommentar