เบˆเบฑเบ”เบžเบตเบกเบกเบฒ เบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบงเบเบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ” nftables 0.9.3, ั€ะฐะทะฒะธะฒะฐัŽั‰ะตะณะพัั ะฒ ะบะฐั‡ะตัั‚ะฒะต ะทะฐะผะตะฝั‹ iptables, ip6table, arptables ะธ ebtables ะทะฐ ัั‡ั‘ั‚ ัƒะฝะธั„ะธะบะฐั†ะธะธ ะธะฝั‚ะตั€ั„ะตะนัะพะฒ ั„ะธะปัŒั‚ั€ะฐั†ะธะธ ะฟะฐะบะตั‚ะพะฒ ะดะปั IPv4, IPv6, ARP ะธ ัะตั‚ะตะฒั‹ั… ะผะพัั‚ะพะฒ. ะ’ ะฟะฐะบะตั‚ nftables ะฒั…ะพะดัั‚ ะบะพะผะฟะพะฝะตะฝั‚ั‹ ะฟะฐะบะตั‚ะฝะพะณะพ ั„ะธะปัŒั‚ั€ะฐ, ั€ะฐะฑะพั‚ะฐัŽั‰ะธะต ะฒ ะฟั€ะพัั‚ั€ะฐะฝัั‚ะฒะต ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั, ะฒ ั‚ะพ ะฒั€ะตะผั ะบะฐะบ ะฝะฐ ัƒั€ะพะฒะฝะต ัะดั€ะฐ ั€ะฐะฑะพั‚ัƒ ะพะฑะตัะฟะตั‡ะธะฒะฐะตั‚ ะฟะพะดัะธัั‚ะตะผะฐ nf_tables, ะฒั…ะพะดัั‰ะฐั ะฒ ัะพัั‚ะฐะฒ ัะดั€ะฐ Linux ะฝะฐั‡ะธะฝะฐั ั ะฒั‹ะฟัƒัะบะฐ 3.13. ะะตะพะฑั…ะพะดะธะผั‹ะต ะดะปั ั€ะฐะฑะพั‚ั‹ ะฒั‹ะฟัƒัะบะฐ nftables 0.9.3 ะธะทะผะตะฝะตะฝะธั ะฒะบะปัŽั‡ะตะฝั‹ ะฒ ัะพัั‚ะฐะฒ ะฑัƒะดัƒั‰ะตะน ะฒะตั‚ะบะธ ัะดั€ะฐ Linux 5.5.

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

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

  • ะŸะพะดะดะตั€ะถะบะฐ ัะพะฟะพัั‚ะฐะฒะปะตะฝะธั ะฟะฐะบะตั‚ะพะฒ ะฟะพ ะฒั€ะตะผะตะฝะธ. ะœะพะถะฝะพ ะพะฟั€ะตะดะตะปะธั‚ัŒ ะบะฐะบ ะดะธะฐะฟะฐะทะพะฝั‹ ะฒั€ะตะผะตะฝะธ ะธ ะดะฐั‚, ะฒ ะบะพั‚ะพั€ั‹ั… ะฑัƒะดะตั‚ ัั€ะฐะฑะฐั‚ั‹ะฒะฐั‚ัŒ ะฟั€ะฐะฒะธะปะพ, ั‚ะฐะบ ะธ ะฝะฐัั‚ั€ะพะธั‚ัŒ ัั€ะฐะฑะฐั‚ั‹ะฒะฐะฝะธะต ะฒ ะพั‚ะดะตะปัŒะฝั‹ะต ะดะฝะธ ะฝะตะดะตะปะธ. ะขะฐะบะถะต ะดะพะฑะฐะฒะปะตะฝะฐ ะฝะพะฒะฐั ะพะฟั†ะธั ยซ-Tยป ะดะปั ะฒั‹ะฒะพะดะฐ ัะฟะพั…ะฐะปัŒะฝะพะณะพ ะฒั€ะตะผะตะฝะธ ะฒ ัะตะบัƒะฝะดะฐั….

    meta time \ยป2019-12-24 16:00\ยป โ€” \ยป2020-01-02 7:00\ยป
    meta hour \ยป17:00\ยป โ€” \ยป19:00\ยป
    meta day \ยปFri\ยป

  • ะŸะพะดะดะตั€ะถะบะฐ ะฒะพััั‚ะฐะฝะพะฒะปะตะฝะธั ะธ ัะพั…ั€ะฐะฝะตะฝะธั ะผะตั‚ะพะบ SELinux (secmark).

    ct secmark set meta secmark
    meta secmark set ct secmark

  • ะŸะพะดะดะตั€ะถะบะฐ map-ัะฟะธัะบะพะฒ synproxy, ะฟะพะทะฒะพะปััŽั‰ะธั… ะพะฟั€ะตะดะตะปัั‚ัŒ ะฑะพะปะตะต ะพะดะฝะพะณะพ ะฟั€ะฐะฒะธะปะฐ ะฝะฐ ะฑัะบะตะฝะด.

    เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ ip foo {
    synproxy https-synproxy {
    mss 1460
    wscale 7
    timestamp sack-perm
    }

    synproxy other-synproxy {
    mss 1460
    wscale 5
    }

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

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

  • ะ’ะพะทะผะพะถะฝะพัั‚ัŒ ะดะธะฝะฐะผะธั‡ะตัะบะพะณะพ ัƒะดะฐะปะตะฝะธั ัะปะตะผะตะฝั‚ะพะฒ set-ะฝะฐะฑะพั€ะพะฒ ะธะท ะฟั€ะฐะฒะธะป ะพะฑั€ะฐะฑะพั‚ะบะธ ะฟะฐะบะตั‚ะพะฒ.

    nft add rule โ€ฆ delete @set5 { ip6 saddr . ip6 daddr }

  • ะŸะพะดะดะตั€ะถะบะฐ ัะพะฟะพัั‚ะฐะฒะปะตะฝะธั VLAN ะฟะพ ะธะดะตะฝั‚ะธั„ะธะบะฐั‚ะพั€ัƒ ะธ ะฟั€ะพั‚ะพะบะพะปัƒ, ะพะฟั€ะตะดะตะปั‘ะฝะฝั‹ั… ะฒ ะผะตั‚ะฐะดะฐะฝะฝั‹ั… ะธะฝั‚ะตั€ั„ะตะนัะฐ ัะตั‚ะตะฒะพะณะพ ะผะพัั‚ะฐ;

    meta ibrpvid 100
    meta ibrvproto vlan

  • ะžะฟั†ะธั ยซ-tยป (ยซโ€”terseยป) ะดะปั ะธัะบะปัŽั‡ะตะฝะธั ัะปะตะผะตะฝั‚ะพะฒ set-ะฝะฐะฑะพั€ะพะฒ ะฟั€ะธ ะพั‚ะพะฑั€ะฐะถะตะฝะธะธ ะฟั€ะฐะฒะธะป. ะŸั€ะธ ะฒั‹ะฟะพะปะฝะตะฝะธะธ ยซnft -t list rulesetยป ะฑัƒะดะตั‚ ะฒั‹ะฒะตะดะตะฝะพ:

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

    ะ ะฟั€ะธ ยซnft list rulesetยป

    เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ ip x {
    เบ•เบฑเป‰เบ‡ y {
    type ipv4_addr
    elements = { 192.168.10.2, 192.168.20.1,
    192.168.4.4, 192.168.2.34 }
    }
    }

  • ะ’ะพะทะผะพะถะฝะพัั‚ัŒ ัƒะบะฐะทะฐะฝะธั ะฑะพะปะตะต ะพะดะฝะพะณะพ ัƒัั‚ั€ะพะนัั‚ะฒะฐ ะฒ ั†ะตะฟะพั‡ะบะฐั… netdev (ั€ะฐะฑะพั‚ะฐะตั‚ ั‚ะพะปัŒะบะพ ั ัะดั€ะพะผ 5.5) ะดะปั ะพะฑัŠะตะดะธะฝะตะฝะธั ั‚ะธะฟะพะฒั‹ั… ะฟั€ะฐะฒะธะป ั„ะธะปัŒั‚ั€ะฐั†ะธะธ.

    add table netdev x
    add chain netdev x y { \
    type filter hook ingress devices = { eth0, eth1 } priority 0;
    }

  • ะ’ะพะทะผะพะถะฝะพัั‚ัŒ ะดะพะฑะฐะฒะปะตะฝะธั ะพะฟะธัะฐะฝะธะน ั‚ะธะฟะพะฒ ะดะฐะฝะฝั‹ั….

    # nft describe ipv4_addr
    datatype ipv4_addr (IPv4 address) (basetype integer), 32 bits

  • ะ’ะพะทะผะพะถะฝะพัั‚ัŒ ัะฑะพั€ะบะธ CLI-ะธะฝั‚ะตั€ั„ะตะนัะฐ ั ะฑะธะฑะปะธะพั‚ะตะบะพะน linenoise ะฒะผะตัั‚ะพ libreadline.

    ./configure โ€”with-cli=linenoise

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

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™