nftables packet filter hoʻokuʻu 0.9.4

paʻi ʻia hoʻokuʻu kānana ʻeke nfttables 0.9.4, e hoʻomohala ana ma ke ʻano he pani no nā iptables, ip6table, arptables a me nā ebtables ma o ka hoʻohui ʻana i nā kānana kānana packet no IPv4, IPv6, ARP a me nā alahaka pūnaewele. Aia ka pūʻolo nftables i nā ʻāpana kānana packet e holo ana ma kahi o ka mea hoʻohana, aʻo ka hana kernel-level e hāʻawi ʻia e ka nf_tables subsystem, kahi ʻāpana o ka kernel Linux mai ka hoʻokuʻu ʻana iā 3.13. ʻO nā hoʻololi e pono ai no ka hoʻokuʻu ʻana o nftables 0.9.4 i ka hana i loko o ka lālā kernel e hiki mai ana Linux 5.6.

Hāʻawi ka pae kernel i kahi kikowaena kūʻokoʻa protocol generic e hāʻawi i nā hana maʻamau no ka unuhi ʻana i ka ʻikepili mai nā ʻeke, ka hana ʻana i nā hana ʻikepili, a me ka mana kahe. Hoʻohui ʻia nā lula kānana a me nā mea hoʻohana kikoʻī protocol i ka bytecode ma kahi o ka mea hoʻohana, ma hope o ka hoʻouka ʻia ʻana o kēia bytecode i loko o ka kernel me ka hoʻohana ʻana i ka interface Netlink a hoʻokō ʻia i loko o ka kernel i kahi mīkini virtual kūikawā e hoʻomanaʻo ana i ka BPF (Berkeley Packet Filters). ʻO kēia ala e hiki ai iā ʻoe ke hōʻemi nui i ka nui o ke code kānana e holo ana ma ka pae kernel a hoʻoneʻe i nā hana āpau o nā lula parsing a me nā loiloi no ka hana ʻana me nā protocols i loko o kahi mea hoʻohana.

Nā hana hou nui:

  • Kākoʻo no nā pae i nā pilina (concatenation, kekahi pūʻulu o nā helu a me nā awa e maʻalahi i ka hoʻohālikelike). No ka laʻana, no kahi "whitelist" hoʻonohonoho nona nā mea i hoʻopili ʻia, e hōʻike ana i ka hae "interval" e hōʻike ana e hiki i ka set ke hoʻokomo i nā pae i loko o ka hoʻopili (no ka hoʻopili "ipv4_addr . ipv4_addr. pili o ke ʻano "192.168.10.35. 192.68.11.123", a i kēia manawa hiki iā ʻoe ke kuhikuhi i nā pūʻulu o nā helu "80-192.168.10.35-192.168.10.40".

    papa ip foo {
    hoʻonohonoho i ka papa inoa keʻokeʻo {
    ʻano ipv4_addr . ipv4_addr. inet_service
    kauā hae
    mau mea = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
    }

    kaulahao kaula {
    ʻano kānana hook prerouting priority kānana; hāʻule kulekele;
    ip saddr. ip papa. tcp dport @whitelist e ʻae
    }
    }

  • I nā pūʻulu a me nā papa inoa palapala, hiki ke hoʻohana i ke kuhikuhi "typeof", e hoʻoholo ai i ke ʻano o ka mea i ka wā e pili ana.
    Eia kekahi laʻana:

    papa ip foo {
    hoʻonohonoho i ka papa inoa keʻokeʻo {
    typeof ip saddr
    ʻeleʻele = {192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    kaulahao kaula {
    ʻano kānana hook prerouting priority kānana; hāʻule kulekele;
    ip daddr @whitelist e ʻae
    }
    }

    papa ip foo {
    palapala 'āina addr2mark {
    typeof ip saddr: hōʻailona meta
    ʻeleu = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Hoʻohui ʻia ka hiki ke hoʻohana i nā hui i loko o NAT bindings, kahi e hiki ai iā ʻoe ke kuhikuhi i kahi helu a me ke awa ke wehewehe ʻana i nā loli NAT e pili ana i nā papa inoa palapala a i ʻole nā ​​​​papa inoa.

    nft add rule ip nat pre dnat ip addr . awa i ip saddr palapala 'āina {1.1.1.1 : 2.2.2.2. kanakolu }

    nft hoʻohui i ka palapala ʻāina ip nat destinations { type ipv4_addr . inet_service: ipv4_addr. inet_service \\; }
    nft add rule ip nat pre dnat ip addr . awa i ip saddr. tcp dport palapala 'āina @destinations

  • Kākoʻo no ka wikiwiki ʻana o ka mīkini me kekahi mau hana kānana i hana ʻia e ke kāleka pūnaewele. Hoʻohana ʻia ka wikiwiki ma o ka pono ethtool ("ethtool -K eth0 hw-tc-offload on"), a laila hoʻāla ʻia i nā nftables no ke kaulahao nui me ka hoʻohana ʻana i ka hae "offload". I ka hoʻohana ʻana i ka Linux kernel 5.6, kākoʻo ʻia ka wikiwiki ʻana o ka mīkini no ka hoʻohālikelike ʻana i ke kahua poʻomanaʻo a me ka nānā ʻana i ke kikowaena komo i hui pū ʻia me ka loaʻa ʻana, hoʻolei ʻana, kope kope (dup), a me ka hoʻouna ʻana (fwd). Ma ka laʻana ma lalo nei, hana ʻia nā hana o ka hoʻokuʻu ʻana i nā ʻeke mai ka helu helu 192.168.30.20 ma ka pae kāleka pūnaewele, me ka ʻole o ka hāʻawi ʻana i nā ʻeke i ka kernel:

    # popoki waihona.nft
    papa netdev x {
    kaulahao y {
    type filter hook ingress device eth0 priority 10; nā hae hoʻoili;
    ip saddr 192.168.30.20 hāʻule
    }
    }
    # nft -f waihona.nft

  • Hoʻonui ʻia ka ʻike e pili ana i kahi o kahi hewa i nā lula.

    # nft delete rule ip yz handle 7
    Hapa: ʻAʻole hiki ke hoʻoponopono i ka lula: ʻAʻohe faila a papa kuhikuhi paha
    holoi i ka rule ip yz handle 7
    ^

    # nft delete rule ip xx handle 7
    Hapa: ʻAʻole hiki ke hoʻoponopono i ka lula: ʻAʻohe faila a papa kuhikuhi paha
    Holoi i ka rule ip xx handle 7
    ^

    # nft holoi i ka papa ʻaina twst
    Hapa: ʻAʻohe faila a papa kuhikuhi paha; 'Ōlelo 'oe i ka papa ‘test' ma ka 'ohana ip?
    holoi papa twst
    ^^^^

    Hōʻike ka laʻana mua ʻaʻole ka papa ʻaina "y" i loko o ka ʻōnaehana, ʻo ka lua e nalowale ana ka mea hoʻokele "7", a ʻo ke kolu e hōʻike ʻia kahi ʻōkuhi typo i ke kākau ʻana i ka inoa papa.

  • Hoʻohui i ke kākoʻo no ka nānā ʻana i ka interface kauā ma ka wehewehe ʻana i ka "meta sdif" a i ʻole "meta sdifname":

    ... meta sdifname vrf1 ...

  • Kākoʻo hoʻohui ʻia no nā hana hoʻololi ʻākau a hema paha. No ka laʻana, e hoʻololi i kahi lepili packet i waiho ʻia e 1 bit a hoʻonoho i ka bit liʻiliʻi i 1:

    … hoʻonohonoho ʻia ka māka meta i ka hoʻololi 1 a i ʻole 0x1…

  • Hoʻokō ʻia ke koho "-V" no ka hōʻike ʻana i ka ʻike manaʻo lōʻihi.

    # nft -V
    nftables v0.9.4 (Jive ma Five)
    cli:readline
    json: ʻae
    minigmp: ʻaʻole
    libxtables: ʻae

  • Pono e kuhikuhi ʻia nā koho laina kauoha ma mua o nā kauoha. No ka laʻana, pono ʻoe e kuhikuhi i ka "nft -a list ruleset", a me ka holo ʻana i "nft list ruleset -a" e hopena i kahi hewa.

    Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka