เบˆเบฑเบ”เบžเบตเบกเบกเบฒ เบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบงเบเบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ” nftables 0.9.3, เป€เบŠเบดเปˆเบ‡เบเบณเบฅเบฑเบ‡เบ–เบทเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบถเป‰เบ™เบกเบฒเป€เบžเบทเปˆเบญเบ—เบปเบ”เปเบ—เบ™ iptables, ip6table, arptables, เปเบฅเบฐ ebtables เป‚เบ”เบเบเบฒเบ™เบฅเบงเบกเบญเบดเบ™เป€เบ•เบตเป€เบŸเบ”เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบชเบณเบฅเบฑเบš IPv4, IPv6, ARP, เปเบฅเบฐเบšเบฃเบดเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบเป€เบ‚เบปเป‰เบฒเบเบฑเบ™. เบŠเบธเบ” nftables เบ›เบฐเบเบญเบšเบกเบตเบญเบปเบ‡เบ›เบฐเบเบญเบšเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบŸเบฑเบ‡เบŠเบฑเบ™เบฅเบฐเบ”เบฑเบšเป€เบ„เบตเป€เบ™เบฅเปเบกเปˆเบ™เบชเบฐเปœเบญเบ‡เปƒเบซเป‰เป‚เบ”เบเบฅเบฐเบšเบปเบšเบเปˆเบญเบ nf_tables, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เปœเบถเปˆเบ‡เบ‚เบญเบ‡เป€เบ„เบตเป€เบ™เบฅ. Linux เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบฅเบธเป‰เบ™ 3.13, เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบณเบฅเบฑเบš nftables 0.9.3 เป€เบžเบทเปˆเบญเปƒเบซเป‰เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เปเบกเปˆเบ™เบฅเบงเบกเบขเบนเปˆเปƒเบ™เบชเบฒเบ‚เบฒ kernel เบ—เบตเปˆเบˆเบฐเบกเบฒเป€เบ–เบดเบ‡. Linux 5.5โ€‹.

เบฅเบฐเบ”เบฑเบš kernel เบชเบฐเบซเบ™เบญเบ‡เบžเบฝเบ‡เปเบ•เปˆเบชเปˆเบงเบ™เบ•เบดเบ”เบ•เปเปˆเปเบšเบšเป€เบญเบเบฐเบฅเบฒเบ”เบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบžเบทเป‰เบ™เบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบฐเบเบฑเบ”เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเปเบžเบฑเบเป€เบเบฑเบ”, เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เปเบฅเบฐเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เป„เบซเบผ. เป€เบซเบ”เบœเบปเบ™เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เปเบฅเบฐเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™เป„เบ”เป‰เบ–เบทเบเบฅเบงเบšเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ bytecode เปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ bytecode เบ™เบตเป‰เบ–เบทเบเป‚เบซเบฅเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ kernel เป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš Netlink เปเบฅเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡ virtual เบžเบดเป€เบชเบ”เบ—เบตเปˆเบฅเบฐเบ™เบถเบเป€เบ–เบดเบ‡ BPF (Berkeley Packet Filters). เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบซเบผเบธเบ”เบฅเบปเบ‡เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบฅเบฐเบ”เบฑเบšเปเบเปˆเบ™เปเบฅเบฐเบเป‰เบฒเบเบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เปเบเบเปเบฅเบฐเป€เบซเบ”เบœเบปเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป‚เบ›เป‚เบ•เบ„เบญเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰.

เบ™เบฐเบงเบฑเบ”เบ•เบฐเบเปเบฒเบ•เบปเป‰เบ™เบ•เป:

  • เบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเปเบžเบฑเบเป€เบเบฑเบ”เบ•เบฒเบกเป€เบงเบฅเบฒ. เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบ—เบฑเบ‡โ€‹เบชเบญเบ‡โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เปเบฅเบฐโ€‹เป„เบฅโ€‹เบเบฐโ€‹เบงเบฑเบ™โ€‹เบ—เบตเปˆโ€‹เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบเบฐโ€‹เบ•เบธเป‰เบ™โ€‹, เปเบฅเบฐโ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบเบฒเบ™ triggering เปƒเบ™โ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบกเบทเป‰โ€‹เบ‚เบญเบ‡โ€‹เบญเบฒโ€‹เบ—เบดเบ”โ€‹. เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰เบเบฑเบ‡เป„เบ”เป‰เป€เบžเบตเปˆเบกเบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบซเบกเปˆ "-T" เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เป€เบงเบฅเบฒ epochal เป€เบ›เบฑเบ™เบงเบดเบ™เบฒเบ—เบต.

    meta time \ยป2019-12-24 16:00\" โ€” \ยป 2020-01-02 7:00\"
    เป€เบกเบ•เบฒเบŠเบปเปˆเบงเป‚เบกเบ‡ \"17:00\" - \"19:00\"
    meta day \"เบงเบฑเบ™เบชเบธเบ\"

  • เบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เบŸเบทเป‰เบ™เบŸเบน เปเบฅเบฐ เบšเบฑเบ™เบ—เบถเบเปเบ—เบฑเบ SELinux (เป€เบŠเบฑเบเบกเบฒเบ).

    ct secmark เบ•เบฑเป‰เบ‡ meta secmark
    meta secmark เบ•เบฑเป‰เบ‡ ct secmark

  • เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเปเบœเบ™เบ—เบตเปˆ synproxy, เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบซเบผเบฒเบเบเปˆเบงเบฒเบซเบ™เบถเปˆเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ•เปเปˆ backend.

    เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ ip foo {
    synproxy https-synproxy {
    เบกเบช 1460
    เบ‚เบฐเปœเบฒเบ” 7
    timestamp sack-perm
    }

    synproxy other-synproxy {
    เบกเบช 1460
    เบ‚เบฐเปœเบฒเบ” 5
    }

    เป‚เบชเป‰เบเปˆเบญเบ™ {
    type filter hook prerouting เบšเบนเบฅเบดเบกเบฐเบชเบดเบ”เบงเบฑเบ”เบ–เบธเบ”เบดเบš; เบเบญเบกเบฎเบฑเบšเบ™เบฐเป‚เบเบšเบฒเบ;
    tcp dport 8888 tcp flags syn notrack
    }

    เปเบ–เบšเป‚เบชเป‰ {
    type filter hook forward filter เบšเบนเบฅเบดเบกเบฐเบชเบดเบ”; เบเบญเบกเบฎเบฑเบšเบ™เบฐเป‚เบเบšเบฒเบ;
    ct state เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡, untracked synproxy name ip saddr map { 192.168.1.0/24 : โ€œhttps-synproxyโ€, 192.168.2.0/24 : โ€œother-synproxyโ€ }
    }
    }

  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เป€เบญเบปเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบขเปˆเบฒเบ‡เป„เบ”เบ™เบฒเบกเบดเบเบญเบญเบเบˆเบฒเบเบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เปเบžเบฑเบเป€เบเบฑเบ”.

    nft เป€เบžเบตเปˆเบกเบเบปเบ”เบฅเบฐเบšเบฝเบš ... เบฅเบถเบš @set5 { ip6 saddr . ip6 เบžเปเปˆ}

  • เบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เปเบœเบ™เบ—เบตเปˆ VLAN เป‚เบ”เบ ID เปเบฅเบฐเป‚เบ›เบฃเป‚เบ•เบ„เปเบ—เบตเปˆเบเบณเบ™เบปเบ”เป„เบงเป‰เปƒเบ™ metadata เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ‚เบปเบงเป€เบ„เบทเบญเบ‚เปˆเบฒเบ;

    meta ibrpvid 100
    meta ibrvproto vlan

  • เบ—เบฒเบ‡เป€เบฅเบทเบญเบ "-t" ("--terse") เป€เบžเบทเปˆเบญเบเบปเบเป€เบงเบฑเป‰เบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบŠเบธเบ”เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบš. เปเบฅเปˆเบ™ "nft -t list ruleset" เบˆเบฐเบญเบญเบเบกเบฒ:

    เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ ip x {
    เบ•เบฑเป‰เบ‡ y {
    เบžเบดเบก ipv4_addr
    }
    }

    เปเบฅเบฐเบ”เป‰เบงเบ "เบเบปเบ”เบฅเบฐเบšเบฝเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ nft"

    เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ ip x {
    เบ•เบฑเป‰เบ‡ y {
    เบžเบดเบก ipv4_addr
    เบญเบปเบ‡เบ›เบฐเบเบญเบš = { 192.168.10.2, 192.168.20.1,
    192.168.4.4, 192.168.2.34 }
    }
    }

  • เบ„เบงเบฒเบกโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบฅเบฐโ€‹เบšเบธโ€‹เบซเบผเบฒเบโ€‹เบเบงเปˆเบฒโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบญเบธโ€‹เบ›เบฐโ€‹เบเบญเบ™โ€‹เปƒเบ™โ€‹เบ•เปˆเบญเบ‡โ€‹เป‚เบชเป‰ netdev (เปƒเบŠเป‰โ€‹เป„เบ”เป‰โ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบเบฑเบš kernel 5.5โ€‹) เป€เบžเบทเปˆเบญโ€‹เบ›เบฐโ€‹เบชเบปเบกโ€‹เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เบเบฒเบ™โ€‹เบเบฑเปˆเบ™โ€‹เบ•เบญเบ‡โ€‹เบ—เบปเปˆเบงโ€‹เป„เบ›โ€‹.

    เป€เบžเบตเปˆเบกเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ netdev x
    เป€เบžเบตเปˆเบกเบ•เปˆเบญเบ‡เป‚เบชเป‰ netdev xy { \
    type filter hook ingress devices = { eth0, eth1 } เบšเบนเบฅเบดเบกเบฐเบชเบดเบ” 0;
    }

  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™.

    # nft เบญเบฐเบ—เบดเบšเบฒเบ ipv4_addr
    เบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™ ipv4_addr (เบ—เบตเปˆเบขเบนเปˆ IPv4) (เบˆเบณเบ™เบงเบ™เป€เบ•เบฑเบกเบ›เบฐเป€เบžเบ”เบ–เบฒเบ™), 32 เบšเบดเบ”

  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš CLI เบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” linenoise เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ libreadline.

    ./configure --with-cli=linenoise

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เบŠเบทเป‰เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DDoS, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ VPS VDS ๐Ÿ”ฅ เบŠเบทเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ DDoS, เป€เบŠเบตเบšเป€เบงเบต VPS VDS | ProHoster