ืžื”ื“ื•ืจืช ืžืกื ืŸ ืžื ื•ืช nftables 0.9.4

ื™ืฆื ืœืื•ืจ ืฉื—ืจื•ืจ ืžืกื ืŸ ืžื ื•ืช nftables 0.9.4, ืžืชืคืชื— ื›ืชื—ืœื™ืฃ ืœ-iptables, ip6table, arptables ื•-ebtables ืขืœ ื™ื“ื™ ืื™ื—ื•ื“ ืžืžืฉืงื™ ืกื™ื ื•ืŸ ืžื ื•ืช ืขื‘ื•ืจ IPv4, IPv6, ARP ื•ื’ืฉืจื™ ืจืฉืช. ื—ื‘ื™ืœืช nftables ื›ื•ืœืœืช ืจื›ื™ื‘ื™ ืžืกื ืŸ ืžื ื•ืช ื”ืคื•ืขืœื™ื ื‘ื—ืœืœ ื”ืžืฉืชืžืฉ, ื‘ืขื•ื“ ืฉื”ืขื‘ื•ื“ื” ื‘ืจืžืช ื”ืœื™ื‘ื” ืžืกื•ืคืงืช ืขืœ ื™ื“ื™ ืชืช-ื”ืžืขืจื›ืช nf_tables, ืฉื”ื™ื™ืชื” ื—ืœืง ืžืœื™ื‘ืช ืœื™ื ื•ืงืก ืžืื– ื’ืจืกื” 3.13. ื”ืฉื™ื ื•ื™ื™ื ื”ื“ืจื•ืฉื™ื ื›ื“ื™ ืฉื”ื’ืจืกื” ืฉืœ nftables 0.9.4 ืชืขื‘ื•ื“ ื›ืœื•ืœื™ื ื‘ืขื ืฃ ื”ืœื™ื‘ื” ื”ืขืชื™ื“ื™ ืœื™ื ื•ืงืก 5.6.

ืจืžืช ื”ืงืจื ืœ ืžืกืคืงืช ืจืง ืžืžืฉืง ื’ื ืจื™ ื‘ืœืชื™ ืชืœื•ื™ ื‘ืคืจื•ื˜ื•ืงื•ืœ ื”ืžืกืคืง ืคื•ื ืงืฆื™ื•ืช ื‘ืกื™ืกื™ื•ืช ืœื—ื™ืœื•ืฅ ื ืชื•ื ื™ื ืžืžื ื•ืช, ื‘ื™ืฆื•ืข ืคืขื•ืœื•ืช ื ืชื•ื ื™ื ื•ื‘ืงืจืช ื–ืจื™ืžื”. ื›ืœืœื™ ื”ืกื™ื ื•ืŸ ื•ื”ืžื˜ืคืœื™ื ื”ืกืคืฆื™ืคื™ื™ื ืœืคืจื•ื˜ื•ืงื•ืœ ืžื•ืจื›ื‘ื™ื ืœืชื•ืš bytecode ื‘ืžืจื—ื‘ ื”ืžืฉืชืžืฉ, ื•ืœืื—ืจ ืžื›ืŸ bytecode ื–ื” ื ื˜ืขืŸ ืœืชื•ืš ื”ืœื™ื‘ื” ื‘ืืžืฆืขื•ืช ืžืžืฉืง Netlink ื•ืžื‘ื•ืฆืข ื‘ืงืจื ืœ ื‘ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืžื™ื•ื—ื“ืช ื”ืžื–ื›ื™ืจื” BPF (Berkeley Packet Filters). ื’ื™ืฉื” ื–ื• ืžืืคืฉืจืช ืœื”ืงื˜ื™ืŸ ืžืฉืžืขื•ืชื™ืช ืืช ื’ื•ื“ืœ ืงื•ื“ ื”ืกื™ื ื•ืŸ ื”ืคื•ืขืœ ื‘ืจืžืช ื”ืงืจื ืœ ื•ืœื”ืขื‘ื™ืจ ืืช ื›ืœ ื”ืคื•ื ืงืฆื™ื•ืช ืฉืœ ื—ื•ืงื™ ื ื™ืชื•ื— ื•ื”ื™ื’ื™ื•ืŸ ืœืขื‘ื•ื“ื” ืขื ืคืจื•ื˜ื•ืงื•ืœื™ื ืœืžืจื—ื‘ ื”ืžืฉืชืžืฉ.

ื—ื™ื“ื•ืฉื™ื ืขื™ืงืจื™ื™ื:

  • ืชืžื™ื›ื” ื‘ื˜ื•ื•ื—ื™ื ื‘ื—ื™ื‘ื•ืจื™ื (ืฉืจืฉื•ืจ, ื—ื‘ื™ืœื•ืช ืžืกื•ื™ืžื•ืช ืฉืœ ื›ืชื•ื‘ื•ืช ื•ื™ืฆื™ืื•ืช ืฉืžืคืฉื˜ื•ืช ื”ืฉื•ื•ืื”). ืœื“ื•ื’ืžื”, ืขื‘ื•ืจ ืงื‘ื•ืฆื” "ืจืฉื™ืžืช ืœื‘ื ื”" ืฉื”ืจื›ื™ื‘ื™ื ืฉืœื” ื”ื ืงื•ื‘ืฅ ืžืฆื•ืจืฃ, ืฆื™ื•ืŸ ื”ื“ื’ืœ "ืžืจื•ื•ื—" ื™ืฆื™ื™ืŸ ืฉื”ืกื˜ ื™ื›ื•ืœ ืœื›ืœื•ืœ ื˜ื•ื•ื—ื™ื ื‘ืงื•ื‘ืฅ ื”ืžืฆื•ืจืฃ (ืขื‘ื•ืจ ื”ืงื•ื‘ืฅ ื”ืžืฆื•ืจืฃ "ipv4_addr . ipv4_addr. inet_service" ื ื™ืชืŸ ื”ื™ื” ื‘ืขื‘ืจ ืœืจืฉื•ื ืžื“ื•ื™ืง ื”ืชืืžื•ืช ืฉืœ ื”ื˜ื•ืคืก "192.168.10.35. 192.68.11.123", ื•ืขื›ืฉื™ื• ืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ืงื‘ื•ืฆื•ืช ืฉืœ ื›ืชื•ื‘ื•ืช "80-192.168.10.35-192.168.10.40"):192.68.11.123.

    table ip foo {
    ื”ื’ื“ืจ ืืช ืจืฉื™ืžืช ื”ืœื‘ื ื™ื {
    ื”ืงืœื“ ipv4_addr . ipv4_addr. inet_service
    ืžืจื•ื•ื— ื“ื’ืœื™ื
    ืืœืžื ื˜ื™ื = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
    }

    ืฉืจืฉืจืช {
    ืกื•ื’ ืžืกื ืŸ ื•ื• ืžืกื ืŸ ืขื“ื™ืคื•ืช ื ื™ืชื•ื‘ ืžืจืืฉ; ื™ืจื™ื“ืช ืžื“ื™ื ื™ื•ืช;
    ip saddr. ip daddr. tcp dport @whitelist ืงื‘ืœ
    }
    }

  • ื‘ืกื˜ื™ื ื•ื‘ืจืฉื™ืžื•ืช ืžืคื•ืช, ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื”ื ื—ื™ื™ืช "typeof", ืฉืงื•ื‘ืขืช ืืช ื”ืคื•ืจืžื˜ ืฉืœ ื”ืืœืžื ื˜ ื‘ืขืช ื”ื”ืชืืžื”.
    ืœื“ื•ื’ืžื”:

    table ip foo {
    ื”ื’ื“ืจ ืืช ืจืฉื™ืžืช ื”ืœื‘ื ื™ื {
    ืกื•ื’ ip saddr
    ืืœืžื ื˜ื™ื = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    ืฉืจืฉืจืช {
    ืกื•ื’ ืžืกื ืŸ ื•ื• ืžืกื ืŸ ืขื“ื™ืคื•ืช ื ื™ืชื•ื‘ ืžืจืืฉ; ื™ืจื™ื“ืช ืžื“ื™ื ื™ื•ืช;
    ip daddr @whitelist ืงื‘ืœ
    }
    }

    table ip foo {
    map addr2mark {
    typeof ip saddr: ืžื˜ื ืกื™ืžืŸ
    ืจื›ื™ื‘ื™ื = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • ื ื•ืกืคื” ื”ื™ื›ื•ืœืช ืœื”ืฉืชืžืฉ ื‘-joins ื‘-NAT bindings, ื”ืžืืคืฉืจืช ืœืš ืœืฆื™ื™ืŸ ื›ืชื•ื‘ืช ื•ื™ืฆื™ืื” ื‘ืขืช ื”ื’ื“ืจืช ื˜ืจื ืกืคื•ืจืžืฆื™ื•ืช NAT ื‘ื”ืชื‘ืกืก ืขืœ ืจืฉื™ืžื•ืช ืžืคื•ืช ืื• ืกื˜ื™ื ืขื ืฉื:

    nft add rule ip nat pre dnat ip adr. ื™ืฆื™ืื” ืœ-ip saddr map { 1.1.1.1: 2.2.2.2. ืฉืœื•ืฉื™ื}

    nft ื”ื•ืกืฃ ืžืคื” ip nat ื™ืขื“ื™ื { ื”ืงืœื“ ipv4_addr. inet_service: ipv4_addr. inet_service \\; }
    nft add rule ip nat pre dnat ip adr. ื™ืฆื™ืื” ืœ-ip saddr. tcp dport map @destinations

  • ืชืžื™ื›ื” ื‘ื”ืืฆืช ื—ื•ืžืจื” ืขื ื›ืžื” ืคืขื•ืœื•ืช ืกื™ื ื•ืŸ ื”ืžื‘ื•ืฆืขื•ืช ืขืœ ื™ื“ื™ ื›ืจื˜ื™ืก ื”ืจืฉืช. ื”ืืฆื” ืžื•ืคืขืœืช ื‘ืืžืฆืขื•ืช ื›ืœื™ ื”ืฉื™ืจื•ืช ethtool ("ethtool -K eth0 hw-tc-offload on"), ื•ืœืื—ืจ ืžื›ืŸ ื”ื™ื ืžื•ืคืขืœืช ื‘-nftables ืขื‘ื•ืจ ื”ืฉืจืฉืจืช ื”ืจืืฉื™ืช ื‘ืืžืฆืขื•ืช ื“ื’ืœ "offload". ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ืœื™ื‘ืช ืœื™ื ื•ืงืก 5.6, ื”ืืฆืช ื—ื•ืžืจื” ื ืชืžื›ืช ืขื‘ื•ืจ ื”ืชืืžืช ืฉื“ื•ืช ื›ื•ืชืจืช ื•ื‘ื“ื™ืงืช ืžืžืฉืง ื ื›ื ืก ื‘ืฉื™ืœื•ื‘ ืขื ืงื‘ืœื”, ื”ืฉืœื›ื”, ืฉื›ืคื•ืœ (dup) ื•ื”ืขื‘ืจื” (fwd) ืžื ื•ืช. ื‘ื“ื•ื’ืžื” ืœืžื˜ื”, ืคืขื•ืœื•ืช ื”ืฉืœื›ืช ืžื ื•ืช ื”ืžื’ื™ืขื•ืช ืžื”ื›ืชื•ื‘ืช 192.168.30.20 ืžื‘ื•ืฆืขื•ืช ื‘ืจืžืช ื›ืจื˜ื™ืก ื”ืจืฉืช, ืžื‘ืœื™ ืœื”ืขื‘ื™ืจ ืืช ื”ื—ื‘ื™ืœื•ืช ืœืงืจื ืœ:

    # cat file.nft
    ื˜ื‘ืœื” netdev x {
    ืฉืจืฉืจืช y {
    ืกื•ื’ ื”ืชืงืŸ ื—ื“ื™ืจืช ื•ื• ืžืกื ืŸ eth0 ืขื“ื™ืคื•ืช 10; ื”ื•ืจื“ืช ื“ื’ืœื™ื;
    ip saddr 192.168.30.20 ื™ืจื™ื“ื”
    }
    }
    # nft -f file.nft

  • ืžื™ื“ืข ืžืฉื•ืคืจ ืขืœ ืžื™ืงื•ื ืฉื’ื™ืื” ื‘ื›ืœืœื™ื.

    # nft delete rule ip yz handle 7
    ืฉื’ื™ืื”: ืœื ื ื™ืชืŸ ืœืขื‘ื“ ื›ืœืœ: ืื™ืŸ ืงื•ื‘ืฅ ืื• ืกืคืจื™ื™ื” ื›ืืœื”
    ืžื—ืง ื›ืœืœ ip yz handle 7
    ^

    # nft ืžื—ื™ืงืช ื›ืœืœ ip xx ื™ื“ื™ืช 7
    ืฉื’ื™ืื”: ืœื ื ื™ืชืŸ ืœืขื‘ื“ ื›ืœืœ: ืื™ืŸ ืงื•ื‘ืฅ ืื• ืกืคืจื™ื™ื” ื›ืืœื”
    ืžื—ืง ืืช ื›ืœืœ ip xx ื™ื“ื™ืช 7
    ^

    # nft ืžื—ืง ื˜ื‘ืœืช twst
    ืฉื’ื™ืื”: ืื™ืŸ ืงื•ื‘ืฅ ืื• ืกืคืจื™ื™ื” ื›ืืœื”; ื”ืื ื”ืชื›ื•ื•ื ืช ืœืฉื•ืœื—ืŸ "ืžื‘ื—ืŸ" ื‘-IP ืžืฉืคื—ืชื™?
    ืžื—ืง ืืช ื”ื˜ื‘ืœื” twst
    ^ ^ ^ ^

    ื”ื“ื•ื’ืžื” ื”ืจืืฉื•ื ื” ืžืจืื” ืฉื”ื˜ื‘ืœื” "y" ืœื ื ืžืฆืืช ื‘ืžืขืจื›ืช, ื”ืฉื ื™ื™ื” ืฉื”ืžื˜ืคืœ "7" ื—ืกืจ, ื•ื”ืฉืœื™ืฉื™ืช ืฉืžื•ืฆื’ืช ืฉื•ืจืช ื”ืงืœื“ื” ื‘ืขืช ื”ืงืœื“ืช ืฉื ื”ื˜ื‘ืœื”.

  • ื ื•ืกืคื” ืชืžื™ื›ื” ืœื‘ื“ื™ืงืช ืžืžืฉืง ื”ืขื‘ื“ื™ื ืขืœ ื™ื“ื™ ืฆื™ื•ืŸ "meta sdif" ืื• "meta sdifname":

    ... meta sdifname vrf1 ...

  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืคืขื•ืœื•ืช ื”ืขื‘ืจื” ื™ืžื™ื ื” ืื• ืฉืžืืœื”. ืœื“ื•ื’ืžื”, ื›ื“ื™ ืœื”ืขื‘ื™ืจ ืชื•ื•ื™ืช ืžื ื” ืงื™ื™ืžืช ืฉืžืืœื” ื‘-1 ืกื™ื‘ื™ื•ืช ื•ืœื”ื’ื“ื™ืจ ืืช ื”-bit minor ืœ-1:

    โ€ฆ ืžื˜ื ืกื™ืžืŸ ื”ื’ื“ืจ ืžื˜ื ืกื™ืžืŸ lshift 1 ืื• 0x1 โ€ฆ

  • ื”ื•ื˜ืžืขื” ืืคืฉืจื•ืช "-V" ืœื”ืฆื’ืช ืžื™ื“ืข ื’ืจืกื” ืžื•ืจื—ื‘.

    # nft -V
    nftables v0.9.4 (Jive at Five)
    cli:readline
    json: ื›ืŸ
    minigmp:ืœื
    libxtables: ื›ืŸ

  • ื›ืขืช ื™ืฉ ืœืฆื™ื™ืŸ ืืคืฉืจื•ื™ื•ืช ืฉื•ืจืช ื”ืคืงื•ื“ื” ืœืคื ื™ ื”ืคืงื•ื“ื•ืช. ืœื“ื•ื’ืžื”, ืขืœื™ืš ืœืฆื™ื™ืŸ "nft -a list ruleset", ื•ื”ืคืขืœืช "nft list ruleset -a" ืชื’ืจื•ื ืœืฉื’ื™ืื”.

    ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”