αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αžαž˜αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ nftables 0.9.1

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž˜αž½αž™αž†αŸ’αž“αžΆαŸ†αž“αŸƒαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αž”αž„αŸ’αž αžΆαž‰ αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αžαž˜αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹ nftables 0.9.1αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž’αž—αž·αžœαžŒαŸ’αžαž‡αžΆαž€αžΆαžšαž‡αŸ†αž“αž½αžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ iptables, ip6table, arptables αž“αž·αž„ ebtables αžŠαŸ„αž™αž€αžΆαžšαž”αž„αŸ’αžšαž½αž”αž”αž„αŸ’αžšαž½αž˜αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αžαž˜αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ IPv4, IPv6, ARP αž“αž·αž„αž”αžŽαŸ’αžαžΆαž‰αžŸαŸ’αž–αžΆαž“αŸ” αž€αž‰αŸ’αž…αž”αŸ‹ nftables αžšαž½αž˜αž˜αžΆαž“αžŸαž˜αžΆαžŸαž’αžΆαžαž»αžαž˜αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž„αžΆαžšαž€αž˜αŸ’αžšαž·αžαžαžΊαžŽαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αžŠαŸ„αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž„ nf_tables αžŠαŸ‚αž›αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαžαžΊαžŽαŸ‚αž›αž›αžΈαž“αž»αž…αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ 3.13 αŸ”

αž€αž˜αŸ’αžšαž·αžαžαžΊαžŽαŸ‚αž›αž•αŸ’αžαž›αŸ‹αžαŸ‚αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž―αž€αžšαžΆαž‡αŸ’αž™αž“αŸƒαž–αž·αž’αžΈαž€αžΆαžšαž‘αžΌαž‘αŸ…αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž˜αž»αžαž„αžΆαžšαž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‘αžΆαž‰αž™αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž›αŸ†αž αžΌαžšαŸ”
αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžαŸ’αžšαž„αžαŸ’αž›αž½αž“αžœαžΆαž•αŸ’αž‘αžΆαž›αŸ‹ αž“αž·αž„αž’αŸ’αž“αž€αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž–αž·αž’αžΈαž€αžΆαžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž‡αžΆ bytecode αž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ bytecode αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αž»αž€αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžΊαžŽαŸ‚αž›αžŠαŸ„αž™αž”αŸ’αžšαžΎαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹ Netlink αž αžΎαž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαž–αž·αžŸαŸαžŸαžŠαŸ‚αž›αž“αžΉαž€αžƒαžΎαž‰αžŠαž›αŸ‹ BPF (Berkeley Packet Filters)αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αž“αžΌαžœαž‘αŸ†αž αŸ†αž“αŸƒαž€αžΌαžŠαžαŸ’αžšαž„αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αž˜αŸ’αžšαž·αžαžαžΊαžŽαŸ‚αž› αž“αž·αž„αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαž˜αž»αžαž„αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒαž…αŸ’αž”αžΆαž”αŸ‹αž‰αŸ‚αž€ αž“αž·αž„αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž–αž·αž’αžΈαž€αžΆαžšαž‘αŸ…αž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ”

αž€αžΆαžšαž…αŸ’αž“αŸƒαž”αŸ’αžšαžŒαž·αžαžŸαŸ†αžαžΆαž“αŸ‹αŸ—αŸ–

  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš IPsec αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž•αŸ’αž‚αžΌαž•αŸ’αž‚αž„αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž•αŸ’αž›αžΌαžœαžšαžΌαž„αž€αŸ’αžšαŸ„αž˜αžŠαžΈαžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžŸαŸ†αžŽαžΎ IPsec αž“αž·αž„αžŸαŸ’αž›αžΆαž€ SPI (αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–) αŸ” αž§αž‘αžΆαž αžšαžŽαŸ,

    ... ipsec αž€αŸ’αž“αž»αž„ ip saddr 192.168.1.0/24
    ... ipsec αž€αŸ’αž“αž»αž„ spi 1-65536

    αžœαžΆαž€αŸαž’αžΆαž…αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎαž•αŸ’αž›αžΌαžœαž˜αž½αž™αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž•αŸ’αž›αžΌαžœαžšαžΌαž„αž€αŸ’αžšαŸ„αž˜αžŠαžΈ IPsec αžŠαŸ‚αžšαž¬αž‘αŸαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹αž…αžšαžΆαž…αžšαžŽαŸαž˜αž·αž“αžαžΆαž˜αžšαž™αŸˆ IPSecαŸ–

    … αžαž˜αŸ’αžšαž„αž›αž‘αŸ’αž’αž•αž› rt ipsec αž”αžΆαžαŸ‹αž€αžΆαžšαž’αŸ’αž›αžΆαž€αŸ‹αž…αž»αŸ‡

  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ IGMP (αž–αž·αž’αžΈαžŸαžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αŸ’αžšαž»αž˜αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αž) αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαž…αŸ’αž”αžΆαž”αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ„αŸ‡αž”αž„αŸ‹αžŸαŸ†αžŽαžΎαžŸαž˜αžΆαž‡αž·αž€αž—αžΆαž–αž€αŸ’αžšαž»αž˜ IGMP αžŠαŸ‚αž›αž…αžΌαž›αž˜αž€

    nft αž”αž“αŸ’αžαŸ‚αž˜αž…αŸ’αž”αžΆαž”αŸ‹ netdev foo bar igmp type membership-query counter drop

  • αž›αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αžαŸαžšαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹αž’αž“αŸ’αžαžšαž€αžΆαž› (αž›αŸ„αž / αž αŸ’αž‚αŸ„αžαžΌ) αŸ” αž§αž‘αžΆαž αžšαžŽαŸ:

    αž€αŸ†αžŽαžαŸ‹ dest = ber
    αž”αž“αŸ’αžαŸ‚αž˜αž€αŸ’αž”αž½αž“ ip foo bar αž›αŸ„αž $dest

  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž”αžΆαŸ†αž„αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš (OS Fingerprint) αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαžαž˜αŸ’αž›αŸƒ TTL αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‹αž˜αž€αžαžΆαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎ OS αž’αŸ’αž“αž€αž•αŸ’αž‰αžΎ αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαŸ–

    ... αž€αŸ†αžŽαžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž˜αŸαžαžΆ osf ttl αžšαŸ†αž›αž„αž•αŸ‚αž“αž‘αžΈαžˆαŸ’αž˜αŸ„αŸ‡ { "αž›αžΈαž“αž»αž…" : 0x1,
    "αžœαžΈαž“αžŠαžΌ": 0x2,
    "MacOS": 0x3,
    "αž˜αž·αž“αžŸαŸ’αž‚αžΆαž›αŸ‹"αŸ– 0x0 }
    ... osf ttl αžšαŸ†αž›αž„αž€αŸ†αžŽαŸ‚ "Linux:4.20"

  • αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αž‚αžΌαž•αŸ’αž‚αž„αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ ARP αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž•αŸ’αž‰αžΎαž“αž·αž„αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IPv4 αž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αžŠαŸ…αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αž€αžΆαžšαžšαžΆαž”αŸ‹αž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹ ARP αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž‰αžΎαž–αžΈαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ 192.168.2.1 αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαž…αŸ’αž”αžΆαž”αŸ‹αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

    αžαžΆαžšαžΆαž„ arp x {
    αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ y {
    αž”αŸ’αžšαž—αŸαž‘αžαž˜αŸ’αžšαž„ αž‘αŸ†αž–αž€αŸ‹αž”αž‰αŸ’αž…αžΌαž›αžαž˜αŸ’αžšαž„αž’αžΆαž‘αž·αž—αžΆαž–; αž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αž‘αž‘αž½αž›αž™αž€;
    arp saddr ip 192.168.2.1 counter packets 1 bytes 46
    }
    }

  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž”αž“αŸ’αžαž”αŸ’αžšαž€αž”αžŠαŸ„αž™αžαž˜αŸ’αž›αžΆαž—αžΆαž–αž“αŸƒαžŸαŸ†αžŽαžΎαžαžΆαž˜αžšαž™αŸˆαž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈ (tproxy) αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžαžΌαžšαž‘αž·αžŸαž€αžΆαžšαž αŸ…αž‘αŸ…αž€αžΆαž“αŸ‹αž…αŸ’αžšαž€ 80 αž‘αŸ…αž…αŸ’αžšαž€αž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈ 8080αŸ–

    αžαžΆαžšαžΆαž„ ip x {
    αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ y {
    αž”αŸ’αžšαž—αŸαž‘αžαž˜αŸ’αžšαž„αž‘αŸ†αž–αž€αŸ‹ αž’αžΆαž‘αž·αž—αžΆαž– -150; αž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αž‘αž‘αž½αž›αž™αž€;
    tcp dport 80 tproxy αž‘αŸ…: 8080
    }
    }

  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžšαž“αŸ’αž’αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‘αž‘αž½αž›αž”αžΆαž“αžŸαž‰αŸ’αž‰αžΆαž€αŸ†αžŽαžαŸ‹αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαžαžΆαž˜αžšαž™αŸˆ setsockopt() αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž” SO_MARK αŸ” αž§αž‘αžΆαž αžšαžŽαŸ:

    αžαžΆαžšαžΆαž„ inet x {
    αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ y {
    αž”αŸ’αžšαž—αŸαž‘αžαž˜αŸ’αžšαž„αž‘αŸ†αž–αž€αŸ‹ αž’αžΆαž‘αž·αž—αžΆαž– -150; αž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αž‘αž‘αž½αž›αž™αž€;
    tcp dport 8080 αž€αŸ†αžŽαžαŸ‹αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžšαž“αŸ’αž’
    }
    }

  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αž’αžαŸ’αžαž”αž‘αž’αžΆαž‘αž·αž—αžΆαž–αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹αŸ” αž§αž‘αžΆαž αžšαžŽαŸ:

    nft αž”αž“αŸ’αžαŸ‚αž˜αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ ip x αž†αŸ… { αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαžαž˜αŸ’αžšαž„αž‘αŸ†αž–αž€αŸ‹ prerouting αž’αžΆαž‘αž·αž—αžΆαž–αž†αŸ…; }
    nft αž”αž“αŸ’αžαŸ‚αž˜αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ ip x filter { type filter hook prerouting priority filter; }
    nft αž”αž“αŸ’αžαŸ‚αž˜αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ ip x filter_later { type filter hook prerouting priority filter + 10; }

  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ’αž›αžΆαž€ SELinux (Secmark) αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αžŸαŸ’αž›αžΆαž€ "sshtag" αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž”αž‘ SELinux αž’αŸ’αž“αž€αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ–

    nft αž”αž“αŸ’αžαŸ‚αž˜ secmark inet filter sshtag "system_u:object_r:ssh_server_packet_t:s0"

    αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αŸ’αžšαžΎαžŸαŸ’αž›αžΆαž€αž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž…αŸ’αž”αžΆαž”αŸ‹αŸ–

    nft αž”αž“αŸ’αžαŸ‚αž˜αž…αŸ’αž”αžΆαž”αŸ‹ inet filter input tcp dport 22 meta secmark set β€œsshtag”

    nft αž”αž“αŸ’αžαŸ‚αž˜αž•αŸ‚αž“αž‘αžΈ inet filter secmapping { type inet_service : secmark; }
    nft αž”αž“αŸ’αžαŸ‚αž˜αž’αžΆαžαž» inet filter secmapping { 22 : "sshtag" }
    nft αž”αž“αŸ’αžαŸ‚αž˜αž…αŸ’αž”αžΆαž”αŸ‹ inet filter αž”αž‰αŸ’αž…αžΌαž› meta secmark αž€αŸ†αžŽαžαŸ‹ tcp dport map @secmapping

  • αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž…αŸ’αžšαž€αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‘αŸ…αž–αž·αž’αžΈαž€αžΆαžšαž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž’αžαŸ’αžαž”αž‘ αžŠαžΌαž…αžŠαŸ‚αž›αž–αž½αž€αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš /etc/services αŸ” αž§αž‘αžΆαž αžšαžŽαŸ:

    nft αž”αž“αŸ’αžαŸ‚αž˜αž…αŸ’αž”αžΆαž”αŸ‹ xy tcp dport "ssh"
    αžŸαŸ†αžŽαž»αŸ†β€‹αž€αŸ’αž”αž½αž“β€‹αž”αž‰αŸ’αž‡αžΈ nft -l
    αžαžΆαžšαžΆαž„ x {
    αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ y {
    ...
    tcp dport "ssh"
    }
    }

  • αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž”αžŽαŸ’αžαžΆαž‰αŸ” αž§αž‘αžΆαž αžšαžŽαŸ:

    αž”αž“αŸ’αžαŸ‚αž˜αž€αŸ’αž”αž½αž“ inet raw prerouting meta iifkind "vrf" αž‘αž‘αž½αž›αž™αž€

  • αž€αžΆαžšβ€‹αž‚αžΆαŸ†αž‘αŸ’αžšβ€‹αž”αžΆαž“β€‹αž’αŸ’αžœαžΎβ€‹αž±αŸ’αž™β€‹αž”αŸ’αžšαžŸαžΎαžšβ€‹αž‘αžΎαž„β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž€αžΆαžšβ€‹αž’αŸ’αžœαžΎβ€‹αž±αŸ’αž™β€‹αž‘αžΆαž“αŸ‹αžŸαž˜αŸαž™β€‹αžαžΆαž˜αžœαž“αŸ’αžβ€‹αž˜αžΆαžαž·αž€αžΆβ€‹αž“αŸƒβ€‹αžŸαŸ†αžŽαž»αŸ†β€‹αžŠαŸ„αž™β€‹αž€αžΆαžšβ€‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹β€‹αž…αŸ’αž”αžΆαžŸαŸ‹β€‹αž›αžΆαžŸαŸ‹β€‹αž‘αž„αŸ‹ "αžαžΆαž˜αžœαž“αŸ’αž" αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αžŸαŸ†αžŽαž»αŸ† "s" αžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž”αŸ’αžšαž—αž– αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αž’αžΆαžαž»αž‘αžΎαž„αžœαž·αž‰ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž·αž“αž˜αžΆαž“αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžšαž™αŸˆαž–αŸαž› 30 αžœαž·αž“αžΆαž‘αžΈαŸ–

    αž”αž“αŸ’αžαŸ‚αž˜αžαžΆαžšαžΆαž„ x
    αž”αž“αŸ’αžαŸ‚αž˜αžŸαŸ†αžŽαž»αŸ† xs { αž”αŸ’αžšαž—αŸαž‘ ipv4_addr; αž‘αŸ†αž αŸ† 128; αž’αžŸαŸ‹αž–αŸαž› 30s; αž‘αž„αŸ‹αžαžΆαž˜αžœαž“αŸ’αž; }
    αž”αž“αŸ’αžαŸ‚αž˜αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ xy { αž”αŸ’αžšαž—αŸαž‘αžαž˜αŸ’αžšαž„αž‘αŸ†αž–αž€αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž’αžΆαž‘αž·αž—αžΆαž– 0; }
    αž”αž“αŸ’αžαŸ‚αž˜αž…αŸ’αž”αžΆαž”αŸ‹ xy update @s { ip saddr }

  • αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸƒαž€αžΆαžšαž’αžŸαŸ‹αž–αŸαž›αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαž”αžŠαž·αžŸαŸαž’αž€αžΆαžšαž’αžŸαŸ‹αž–αŸαž›αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ‚αž›αž˜αž€αžŠαž›αŸ‹αž…αŸ’αžšαž€ 8888 αž’αŸ’αž“αž€αž’αžΆαž…αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αŸ–

    αžαžΆαžšαžΆαž„ ip filter {
    ct αž’αžŸαŸ‹αž–αŸαž› aggressive-tcp {
    αž–αž·αž’αžΈαž€αžΆαžš tcp;
    l3proto ip;
    policy = {establied: 100, close_wait: 4, close: 4}
    }
    αž‘αž·αž“αŸ’αž“αž•αž›αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ {
    ...
    tcp dport 8888 ct αž’αžŸαŸ‹αž–αŸαž›αž€αŸ†αžŽαžαŸ‹ "aggressive-tcp"
    }
    }

  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš NAT αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ’αžšαž½αžŸαžΆαžš inetαŸ–

    αžαžΆαžšαžΆαž„ inet nat {
    ...
    ip6 daddr αžŸαŸ’αž›αžΆαž”αŸ‹ ::2::1 dnat to dead :2::99
    }

  • αž€αŸ‚αž›αž˜αŸ’αž’αž€αžΆαžšαžšαžΆαž™αž€αžΆαžšαžŽαŸαž€αŸ†αž αž»αžŸαžœαžΆαž™αž’αž€αŸ’αžŸαžšαŸ–

    nft αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αžαž˜αŸ’αžšαž„αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹

    αž€αŸ†αž αž»αžŸαŸ– αž‚αŸ’αž˜αžΆαž“αž―αž€αžŸαžΆαžš αž¬αžαžαž―αž€αžŸαžΆαžšαž”αŸ‚αž”αž“αŸαŸ‡αž‘αŸαŸ” αžαžΎαž’αŸ’αž“αž€αž˜αžΆαž“αž“αŸαž™αžαžΆαžαžΆαžšαžΆαž„ "αžαž˜αŸ’αžšαž„" αž“αŸ…αž€αŸ’αž“αž»αž„ ip αž‚αŸ’αžšαž½αžŸαžΆαžšαž‘αŸ?
    αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžαž˜αŸ’αžšαž„αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹
    ^^^^^^

  • αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αžŸαŸ†αžŽαž»αŸ†αŸ–

    αž€αŸ†αžŽαžαŸ‹ sc {
    αž”αŸ’αžšαž—αŸαž‘ inet_service αŸ” ifname
    αž’αžΆαžαž» = { "ssh" αŸ” "eth0" }
    }

  • αž”αžΆαž“αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž…αŸ’αž”αžΆαž”αŸ‹αž›αŸ†αž αžΌαžšαŸ–

    nft αž”αž“αŸ’αžαŸ‚αž˜αžαžΆαžšαžΆαž„ x
    nft αž”αž“αŸ’αžαŸ‚αž˜ flowtable x ft { hook ingress priority 0; αž§αž”αž€αžšαžŽαŸ = { eth0, wlan0 }; }
    ...
    nft add rule x forward ip protocol { tcp, udp } flow add @ft

  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš JSON αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αŸ”

αž”αŸ’αžšαž—αž–: opennet.ru

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹