Nftables 0.9.5 pakettfiltri kÀivitamine

Avaldatud paketifiltri vĂ€ljaanne nftables 0.9.5, arenebes, mis arenebes iptables, ip6tables, arptables ja ebtables asendamiseks packet filtreerimise liideste ĂŒhtlustamise kaudu IPv4, IPv6, ARP ja vĂ”rgu sildade jaoks. Nf_tables alamsĂŒsteem, mis kuulub Linuxi kernelisse alates versioonist 3.13, toetab nftablesi, mis sisaldab kasutaja ruumis töötavaid komponente. Ntfablesi 0.9.5 toimimiseks vajalikke muudatusi on kaheksas tuumas. Linux 5.7.

SĂŒdamiku tasemel pakutakse vaid ĂŒldist liidest, mis ei sĂ”ltu konkreetsest protokollist ja pakub pĂ”hifunktsioone andmete extracatsiooniks pakettidest, andmete opereerimiseks ja voolu juhtimiseks. Otsesed filtreerimise reeglid ja protokollispetsiifilised töötlejajad kompileeritakse kasutusruumis baitkoodiks, seejĂ€rel laaditakse see baitkood Netlinki liidese abil tuuma ja tĂ€idetakse tuumas spetsiaalses virtuaalmasinas, mis sarnaneb BPF-iga (Berkeley Packet Filters). Selline lĂ€henemine vĂ”imaldab oluliselt vĂ€hendada sĂŒdamikus töötava filtreerimise koodi suurust ja viia kĂ”ik reeglite analĂŒĂŒsi ja protokollide töötlemise loogika kasutusruumi.

Peamised uuendused:

  • Komplektidesse on lisatud pakettide ja liikluse loendurite tugi, mis on seotud komplekti elementidega. Loendurid aktiveeritakse „counter“ vĂ”tmesĂ”na abil:

    table ip x {
    set y {
    typeof ip saddr
    counter
    elemendid = { 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
    }
    }

  • Esialgsete loendurite vÀÀrtuste seadmiseks, nĂ€iteks varasemate loendurite taastamiseks taaskĂ€ivitumise jĂ€rel, vĂ”ib komplekti kasutada kĂ€sku „nft -f“:

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

  • Loendurite tugi on samuti lisatud flowtable'isse:

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

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

    Loendite nimekirja saab vaadata kĂ€suga „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

  • Kinnituste komplektides (concatenation, aadresside ja portide spetsiifilised sidemed, mis lihtsustavad kaardistamist) on juurdepÀÀsu direktiiv „typeof“, mis mÀÀratleb andmete tĂŒĂŒbi elementide jaoks komplekti komponentide jaoks:

    table ip foo {
    seata whitelist {
    typeof ip saddr . tcp dport
    elements = { 192.168.10.35 . 80, 192.168.10.101 . 80 }
    }

    chain bar {
    tĂŒĂŒp filter hook prerouting prioriteet filter; poliitika drop;
    ip daddr . tcp dport @whitelist accept
    }
    }

  • Direktiivi typeof vĂ”ib nĂŒĂŒd kasutada ka map-loendite sidumisel:

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

    chain bar {
    tĂŒĂŒp filter hook prerouting prioriteet filter; poliitika drop;
    meta mark set ip daddr . tcp dport map @addr2mark accept
    }
    }

  • Toetatakse sidumisi vahemikega anonĂŒĂŒmsetes (nimetamata) komplektides:

    # 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

  • Lisatud on toetus pakettide tagasilĂŒkkamiseks 802.1q (VLAN) lippudega vĂ”rgu sildade töötlemise ajal:

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

  • Lisatud on tugi TCP-session ID (conntrack ID) kaardistamiseks. Conntrack ID mÀÀramine vĂ”ib kasutada „—output id“ valikut:

    # 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

Allikas: opennet.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster