nftables เดชเดพเด•เตเด•เดฑเตเดฑเต เดซเดฟเตฝเดŸเตเดŸเตผ 0.9.5 เดฑเดฟเดฒเต€เดธเต

เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเดšเตเดšเต เดชเดพเด•เตเด•เดฑเตเดฑเต เดซเดฟเตฝเดŸเตเดŸเตผ เดฑเดฟเดฒเต€เดธเต nftables 0.9.5, ั€ะฐะทะฒะธะฒะฐัŽั‰ะตะณะพัั ะฒ ะบะฐั‡ะตัั‚ะฒะต ะทะฐะผะตะฝั‹ iptables, ip6table, arptables ะธ ebtables ะทะฐ ัั‡ั‘ั‚ ัƒะฝะธั„ะธะบะฐั†ะธะธ ะธะฝั‚ะตั€ั„ะตะนัะพะฒ ั„ะธะปัŒั‚ั€ะฐั†ะธะธ ะฟะฐะบะตั‚ะพะฒ ะดะปั IPv4, IPv6, ARP ะธ ัะตั‚ะตะฒั‹ั… ะผะพัั‚ะพะฒ. ะ’ ะฟะฐะบะตั‚ nftables ะฒั…ะพะดัั‚ ะบะพะผะฟะพะฝะตะฝั‚ั‹ ะฟะฐะบะตั‚ะฝะพะณะพ ั„ะธะปัŒั‚ั€ะฐ, ั€ะฐะฑะพั‚ะฐัŽั‰ะธะต ะฒ ะฟั€ะพัั‚ั€ะฐะฝัั‚ะฒะต ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั, ะฒ ั‚ะพ ะฒั€ะตะผั ะบะฐะบ ะฝะฐ ัƒั€ะพะฒะฝะต ัะดั€ะฐ ั€ะฐะฑะพั‚ัƒ ะพะฑะตัะฟะตั‡ะธะฒะฐะตั‚ ะฟะพะดัะธัั‚ะตะผะฐ nf_tables, ะฒั…ะพะดัั‰ะฐั ะฒ ัะพัั‚ะฐะฒ ัะดั€ะฐ Linux ะฝะฐั‡ะธะฝะฐั ั ะฒั‹ะฟัƒัะบะฐ 3.13. ะะตะพะฑั…ะพะดะธะผั‹ะต ะดะปั ั€ะฐะฑะพั‚ั‹ ะฒั‹ะฟัƒัะบะฐ nftables 0.9.5 ะธะทะผะตะฝะตะฝะธั ะฒะบะปัŽั‡ะตะฝั‹ ะฒ ัะพัั‚ะฐะฒ ัะดั€ะฐ เดฒเดฟเดจเด•เตเดธเต 5.7.

เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดกเดพเดฑเตเดฑ เดŽเด•เตโ€Œเดธเตโ€ŒเดŸเตเดฐเดพเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เดกเดพเดฑเตเดฑ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดจเดŸเดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเด‚ เดซเตเดฒเต‹ เด•เตบเดŸเตเดฐเต‹เตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เด…เดŸเดฟเดธเตเดฅเดพเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดจเตฝเด•เตเดจเตเดจ เด’เดฐเต เดœเดจเดฑเดฟเด•เต เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ-เดธเตเดตเดคเดจเตเดคเตเดฐ เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เด•เต‡เตผเดฃเตฝ เดฒเต†เดตเตฝ เดจเตฝเด•เตเดจเตเดจเดคเต. เดซเดฟเตฝเดŸเตเดŸเดฑเดฟเด‚เด—เต เดจเดฟเดฏเดฎเด™เตเด™เดณเตเด‚ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ-เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดนเดพเตปเดกเตโ€Œเดฒเดฑเตเด•เดณเตเด‚ เดฏเต‚เดธเตผ เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเดฟเตฝ เดฌเตˆเดฑเตเดฑเตโ€Œเด•เต‹เดกเดฟเดฒเต‡เด•เตเด•เต เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด…เดคเดฟเดจเตเดถเต‡เดทเด‚ เดˆ เดฌเตˆเดฑเตเดฑเตโ€Œเด•เต‹เดกเต เดจเต†เดฑเตเดฑเตโ€Œเดฒเดฟเด™เตเด•เต เด‡เดจเตเดฑเตผเดซเต‡เดธเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เต‡เตผเดฃเดฒเดฟเดฒเต‡เด•เตเด•เต เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดฌเดฟเดชเดฟเดŽเดซเดฟเดจเต† (เดฌเต†เตผเด•เตเด•เตโ€Œเดฒเดฟ เดชเดพเด•เตเด•เดฑเตเดฑเต เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ) เด…เดจเตเดธเตเดฎเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเดฟเตฝ เด•เต‡เตผเดฃเดฒเดฟเตฝ เดŽเด•เตโ€Œเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด•เต‡เตผเดฃเตฝ เดคเดฒเดคเตเดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เดซเดฟเตฝเดŸเตเดŸเดฑเดฟเด‚เด—เต เด•เต‹เดกเดฟเดจเตเดฑเต† เดตเดฒเตเดชเตเดชเด‚ เด—เดฃเตเดฏเดฎเดพเดฏเดฟ เด•เตเดฑเดฏเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเตเด•เตพเด•เตเด•เตŠเดชเตเดชเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเดพเดดเตเดธเดฟเด‚เด—เต เดจเดฟเดฏเดฎเด™เตเด™เดณเตเดŸเต†เดฏเตเด‚ เดฒเต‹เดœเดฟเด•เตเด•เตเด•เดณเตเดŸเต†เดฏเตเด‚ เดŽเดฒเตเดฒเดพ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ เดฏเต‚เดธเตผ เดธเตเดชเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เดจเต€เด•เตเด•เดพเตป เดˆ เดธเดฎเต€เดชเดจเด‚ เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต.

เดชเตเดฐเดงเดพเดจ เด•เดฃเตเดŸเตเดชเดฟเดŸเตเดคเตเดคเด™เตเด™เตพ:

  • ะ’ ะฝะฐะฑะพั€ั‹ ะดะพะฑะฐะฒะปะตะฝะฐ ะฟะพะดะดะตั€ะถะบะฐ ัั‡ั‘ั‚ั‡ะธะบะพะฒ ะฟะฐะบะตั‚ะพะฒ ะธ ั‚ั€ะฐั„ะธะบะฐ, ะฟั€ะธะฒัะทะฐะฝะฝั‹ั… ะบ ัะปะตะผะตะฝั‚ะฐะผ ะฝะฐะฑะพั€ะฐ. ะกั‡ั‘ั‚ั‡ะธะบะธ ะฒะบะปัŽั‡ะฐัŽั‚ัั ะฟั€ะธ ะฟะพะผะพั‰ะธ ะบะปัŽั‡ะตะฒะพะณะพ ัะปะพะฒะฐ ยซcounterยป:

    เดชเดŸเตเดŸเดฟเด• ip x {
    เดธเต†เดฑเตเดฑเต y {
    เดเดชเดฟ เดธเดพเดกเตโ€Œเดกเดฟเตผ เดคเดฐเด‚
    เด•เตŒเดฃเตเดŸเตผ
    เด˜เดŸเด•เด™เตเด™เตพ = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    เดšเต†เดฏเดฟเตป z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }

  • ะ”ะปั ัƒัั‚ะฐะฝะพะฒะบะธ ะฝะฐั‡ะฐะปัŒะฝั‹ั… ะทะฝะฐั‡ะตะฝะธะน ัั‡ั‘ั‚ั‡ะธะบะพะฒ, ะฝะฐะฟั€ะธะผะตั€, ะดะปั ะฒะพััั‚ะฐะฝะพะฒะปะตะฝะธั ะฟั€ะพัˆะปั‹ั… ัั‡ั‘ั‚ั‡ะธะบะพะฒ ะฟะพัะปะต ะฟะตั€ะตะทะฐะฟัƒัะบะฐ, ะฝะฐะฑะพั€ะฐ ะผะพะถะฝะพ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะบะพะผะฐะฝะดัƒ ยซnft -fยป:

    # cat ruleset.nft
    เดชเดŸเตเดŸเดฟเด• ip x {
    เดธเต†เดฑเตเดฑเต y {
    เดเดชเดฟ เดธเดพเดกเตโ€Œเดกเดฟเตผ เดคเดฐเด‚
    เด•เตŒเดฃเตเดŸเตผ
    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 }
    }

    เดšเต†เดฏเดฟเตป z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }
    # nft -f ruleset.nft
    # nft list ruleset
    เดชเดŸเตเดŸเดฟเด• ip x {
    เดธเต†เดฑเตเดฑเต y {
    เดเดชเดฟ เดธเดพเดกเตโ€Œเดกเดฟเตผ เดคเดฐเด‚
    เด•เตŒเดฃเตเดŸเตผ
    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 }
    }

    เดšเต†เดฏเดฟเตป z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }

  • ะŸะพะดะดะตั€ะถะบะฐ ัั‡ั‘ั‚ั‡ะธะบะพะฒ ั‚ะฐะบะถะต ะดะพะฑะฐะฒะปะตะฝะฐ ะฒะพ flowtable:

    เดชเดŸเตเดŸเดฟเด• ip foo {
    flowtable bar {
    hook ingress priority -100
    devices = { eth0, eth1 }
    เด•เตŒเดฃเตเดŸเตผ
    }

    เดšเต†เดฏเดฟเตป เดซเต‹เตผเดตเต‡เดกเต {
    type filter hook forward priority filter;
    flow add @bar counter
    }
    }

    ะŸะพัะผะพั‚ั€ะตั‚ัŒ ัะฟะธัะพะบ ัั‡ั‘ั‚ั‡ะธะบะพะฒ ะผะพะถะฝะพ ะบะพะผะฐะฝะดะฝะพะน ยซ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

  • ะ’ ะฝะฐะฑะพั€ะฐั… ะดะปั ะฟั€ะธัะพะตะดะธะฝะตะฝะธะน (concatenation, ะพะฟั€ะตะดะตะปั‘ะฝะฝั‹ะต ัะฒัะทะบะธ ะฐะดั€ะตัะพะฒ ะธ ะฟะพั€ั‚ะพะฒ, ัƒะฟั€ะพั‰ะฐัŽั‰ะธะต ัะพะฟะพัั‚ะฐะฒะปะตะฝะธะต) ะพะฑะตัะฟะตั‡ะตะฝะฐ ะฒะพะทะผะพะถะฝะพัั‚ัŒ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธั ะดะธั€ะตะบั‚ะธะฒั‹ ยซtypeofยป, ะพะฟั€ะตะดะตะปััŽั‰ะตะน ั‚ะธะฟ ะดะฐะฝะฝั‹ั… ัะปะตะผะตะฝั‚ะพะฒ ะดะปั ัะพัั‚ะฐะฒะฝั‹ั… ั‡ะฐัั‚ะตะน ัะปะตะผะตะฝั‚ะพะฒ ะฝะฐะฑะพั€ะฐ:

    เดชเดŸเตเดŸเดฟเด• ip foo {
    เดตเตˆเดฑเตเดฑเตโ€Œเดฒเดฟเดธเตเดฑเตเดฑเต เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเด• {
    typeof ip saddr . tcp dport
    elements = { 192.168.10.35 . 80, 192.168.10.101 . 80 }
    }

    เดšเต†เดฏเดฟเตป เดฌเดพเตผ {
    เดŸเตˆเดชเตเดชเต เดซเดฟเตฝเดŸเตเดŸเตผ เดนเตเด•เตเด•เต เดชเตเดฐเดฟเดฑเต—เดŸเตเดŸเดฟเด‚เด—เต เดฎเตเตปเด—เดฃเดจ เดซเดฟเตฝเดŸเตเดŸเตผ; เดจเดฏเดชเดฐเดฎเดพเดฏ เดตเต€เดดเตเดš;
    ip daddr . tcp dport @whitelist accept
    }
    }

  • ะ”ะธั€ะตะบั‚ะธะฒะฐ typeof ั‚ะตะฟะตั€ัŒ ั‚ะฐะบะถะต ะฟั€ะธะผะตะฝะธะผะฐ ะดะปั ะฟั€ะธัะพะตะดะธะฝะตะฝะธะน ะฒ map-ัะฟะธัะบะฐั…:

    เดชเดŸเตเดŸเดฟเด• ip foo {
    เดฎเดพเดชเตเดชเต addr2mark {
    typeof ip saddr . tcp dport : meta mark
    elements = { 192.168.10.35 . 80 : 0x00000001,
    192.168.10.135 . 80 : 0x00000002 }
    }

    เดšเต†เดฏเดฟเตป เดฌเดพเตผ {
    เดŸเตˆเดชเตเดชเต เดซเดฟเตฝเดŸเตเดŸเตผ เดนเตเด•เตเด•เต เดชเตเดฐเดฟเดฑเต—เดŸเตเดŸเดฟเด‚เด—เต เดฎเตเตปเด—เดฃเดจ เดซเดฟเตฝเดŸเตเดŸเตผ; เดจเดฏเดชเดฐเดฎเดพเดฏ เดตเต€เดดเตเดš;
    meta mark set ip daddr . tcp dport map @addr2mark accept
    }
    }

  • ะ”ะพะฑะฐะฒะปะตะฝะฐ ะฟะพะดะดะตั€ะถะบะฐ ะฟั€ะธัะพะตะดะธะฝะตะฝะธะน ั ะดะธะฐะฟะฐะทะพะฝะฐะผะธ ะฒ ะฐะฝะพะฝะธะผะฝั‹ั… (ะฝะตะธะผะตะฝะพะฒะฐะฝะฝั‹ั…) ะฝะฐะฑะพั€ะฐั…:

    # 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

  • ะŸั€ะตะดะพัั‚ะฐะฒะปะตะฝะฐ ะฒะพะทะผะพะถะฝะพัั‚ัŒ ะพั‚ะฑั€ะฐัั‹ะฒะฐะฝะธั ะฟะฐะบะตั‚ะพะฒ ั ั„ะปะฐะณะฐะผะธ 802.1q (VLAN) ะฟั€ะธ ะพะฑั€ะฐะฑะพั‚ะบะต ัะตั‚ะตะฒั‹ั… ะผะพัั‚ะพะฒ:

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

  • ะ”ะพะฑะฐะฒะปะตะฝะฐ ะฟะพะดะดะตั€ะถะบะฐ ัะพะฟะพัั‚ะฐะฒะปะตะฝะธั ะฟะพ ะธะดะตะฝั‚ะธั„ะธะบะฐั‚ะพั€ัƒ TCP-ัะตะฐะฝัะฐ (conntrack ID). ะ”ะปั ะพะฟั€ะตะดะตะปะตะฝะธั conntrack ID ะผะพะถะฝะพ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะพะฟั†ะธัŽ ยซโ€”output idยป:

    # 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

เด…เดตเดฒเด‚เดฌเด‚: opennet.ru

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•