ืคืืจืกื ืฉืืจืืจื ืฉื ืืกื ื ืื ืืช nftables 1.0.3, ืืืืื ืืืฉืงื ืกืื ืื ืื ืืช ืขืืืจ IPv4, IPv6, ARP ืืืฉืจื ืจืฉืช (ืฉืืืจืชื ืืืืืืฃ iptables, ip6table, arptables ื-ebtables). ืืฉืื ืืืื ืื ืืจืฉืื ืืื ืฉืืืจืกื ืฉื nftables 1.0.3 ืชืขืืื ืืืืืื ืืืืืช Linux 5.18.
ืืืืืช nftables ืืืืืช ืจืืืื ืืกื ื ืื ืืช ืืคืืขืืื ืืืื ืืืฉืชืืฉ, ืืขืื ืฉืืขืืืื ืืจืืช ืืืืื ืืกืืคืงืช ืขื ืืื ืชืช-ืืืขืจืืช nf_tables, ืฉืืืืชื ืืืง ืืืืืช ืืื ืืงืก ืืื ืืจืกื 3.13. ืจืืช ืืงืจื ื ืืกืคืงืช ืจืง ืืืฉืง ืื ืจื ืืืชื ืชืืื ืืคืจืืืืงืื ืืืกืคืง ืคืื ืงืฆืืืช ืืกืืกืืืช ืืืืืืฅ ื ืชืื ืื ืืื ืืช, ืืืฆืืข ืคืขืืืืช ื ืชืื ืื ืืืงืจืช ืืจืืื.
ืืืื ืืกืื ืื ืขืฆืื ืืืืืคืืื ืืกืคืฆืืคืืื ืืคืจืืืืงืื ืืืจืืืื ืืชืื bytecode ืฉื ืืจืื ืืืฉืชืืฉ, ืืืืืจ ืืื ืงืื ืืืช ืื ื ืืขื ืืชืื ืืืืื ืืืืฆืขืืช ืืืฉืง Netlink ืืืืืฆืข ืืงืจื ื ืืืืื ื ืืืจืืืืืืช ืืืืืืช ืืืืื ื-BPF (Berkeley Packet Filters). ืืืฉื ืื ืืืคืฉืจืช ืืืงืืื ืืฉืืขืืชืืช ืืช ืืืื ืงืื ืืกืื ืื ืืคืืขื ืืจืืช ืืงืจื ื ืืืืขืืืจ ืืช ืื ืืคืื ืงืฆืืืช ืฉื ืืืงื ืื ืืชืื ืืืืืืืื ืฉื ืขืืืื ืขื ืคืจืืืืงืืืื ืืืจืื ืืืฉืชืืฉ.
ืืืืืฉืื ืขืืงืจืืื:
- ืจืฉืืืืช ืกื ืชืืืืืช ืืขืช ืืืชืืืช ืฉืืืช ืืืฉืงื ืจืฉืช ืขื ืืื ืืกืืื, ืืืฉื, ืฉืฆืืื ื ืืืืฆืขืืช ืืกืื "*": table inet testifsets { set simple_wild { type ifname flags interval elements = { "abcdef*", "othername", "ppp0" } } ืฉืจืฉืจืช v4icmp { ืกืื ืืกื ื ืืืง ืขืืืคืืช ืงืื 0; ืงืืืช ืืืื ืืืช; iifname @simple_wild ืืื ื ืื ืืช 0 ืืชืื 0 iifname { "abcdef*", "eth0" } ืื ืืช ืืื ื 0 ืืชืื 0 } }
- ืืืืข ืืืืื ืืืืืืื ืฉื ืจืืืื ืกื-ืืืกื ืืฆืืืืื ืืืืื ืืคืขืืื. ืืขืืจ, ืืืฉืจ ื ืงืืขื ืืคืฉืจืืช "ืืืืื ืืืืืืื", ืืืืืื ืืืฆืข ืืฉืื ืืืืจืื ืขื ืืืืืื, ืื ืืขืช ืืื ืขืืื ืื ืืืฉืจ ืืืื ืืื ืืืฉืื ืืชืืืกืคืื ืืืืจืื ืืืืื ืืคืขืืื. ืืืืืื, ืืฉืื ืืืืจืื, ืืจืฉืืื ืขืจืื y { flags interval auto-merge elements = { 1.2.3.0, 1.2.3.255, 1.2.3.0/24, 3.3.3.3, 4.4.4.4, 4.4.4.4-4.4.4.8 , 3.3.3.4 , 3.3.3.5 } } ืืืคืื ืืืืื ืืื = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } ืืื ืื ืชืืกืืฃ ืืืื ืืื ืืืฉืื # nft ืืืกืฃ ืืืื ื ip xy { 1.2.3.0 -1.2.4.255, 3.3.3.6 } ืืืจืื ืืื ืืืื ืืื = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }
ืืืฉืจ ืืชื ืืกืืจ ืคืจืืืื ืืืืืื ืืืจืฉืืื ืฉื ืืืืื ืืชืื ืคืจืืื ืืืื ืงืืืืื, ืืืืื ืืชืงืฆืจ ืื ืืคืืฆื.
- ืชืืืื ืืฉืืืื ืืืื ืชืจืืื ืืชืืืืช ืืจืืืืช (NAT) ืืจืฉืืืช ืืคืืช ื ืืกืคื ืืืืคืืืืืืฆืืืช ืืืืืื, ืื ืงืจืืช ืืืฉืจ ืืฆืืื ืช ืืืคืฉืจืืช "-o/-optimize". ืืืืืื, ืขืืืจ ืืกื # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; ืืจืืืช ืืืื ืืืช; ip saddr 1.1.1.1 tcp dport 8000 snat ื- 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat ื- 5.5.5.5:90 } }
ืืคืขืืช "nft -o -c -f ruleset.nft" ืชืืืจ ืืช ืืืื "ip saddr" ืื ืคืจืืื ืืจืฉืืืช ืืคืืช: snat ื-ip saddr. tcp dport map { 1.1.1.1. 8000: 4.4.4.4. 80, 2.2.2.2. 8001: 5.5.5.5. 90}
ืืืืคื ืืืื, ื ืืชื ืืืืืจ ืืืืืืื ืืืืืืื ืืจืฉืืืืช ืืคืืช: # cat ruleset.nft table ip x { [โฆ] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 goto 62 natp 78 160,128 0x0e31393032383939353831343037320e goto nat_dns_this_5301 ืืืจื udp 62-78 @th,160,128 0x0e31363436323733373931323934300e goto nat_dns_saturn_5301 ืืืจื udp 62-78 @th,160,128 0x0e32393535373539353636383732310 5302 62 78 160,128x0e0 38353439353637323038363633390 5303 XNUMX XNUMX XNUMX XNUMX XNUMXxXNUMXeXNUMX XNUMX XNUMX XNUMX XNUMX XNUMX XNUMXe goto nat_dns_saturn_XNUMX udp ืืืจื XNUMX-XNUMX @th,XNUMX XNUMXxXNUMXeXNUMXe goto nat_dns_saturn_XNUMX drop } }
ืืืืจ ืืืคืืืืืืฆืื ื ืงืื ืจืฉืืืช ืืคืืช: udp length . @th,160,128 vmap { 47-63 . 0x0e373135363130333131303735353203 : goto nat_dns_dnstc, 62-78 . 0x0e31393032383939353831343037320e : goto nat_dns_this_5301, 62-78 . 0x0e31363436323733373931323934300e : goto nat_dns_saturn_5301, 62-78 . 0x0e32393535373539353636383732310e : goto nat_dns_saturn_5302, 62-78 . 0x0e38353439353637323038363633390e : goto nat_dns_saturn_5303 }
- ืืฉืืืืฉ ืืืืืืืื ืืืืืืื ืืคืขืืืืช ืฉืจืฉืืจ ืืืชืจ. ืืืืืื: #nft ืืืกืฃ ืืื xy ip saddr. @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } ืื table x { set y { typeof ip saddr . @ih,32,32 elements = { 1.1.1.1 . 0x14 } } }
- ื ืืกืคื ืชืืืื ืืฆืืื ืฉืืืช ืืืชืจืืช ืฉืืืื ืืคืขืืืืช ืฉืจืฉืืจ: table inet t { map m1 { typeof udp length . @ih,32,32: ืืืื ืืื ืฉื ืืจืืืื ืคืกืง ืืื ืืกืื ืื = { 20-80. 0x14 : ืงืื, 1-10 . 0xa : drop } } ืฉืจืฉืจืช c { ืกืื ืืกื ื ืืืง ืขืืืคืืช ืงืื 0; ืืจืืืช ืืืื ืืืช; ืืืจื udp. @ih,32,32 vmap @m1 } }
- ื ืืกืคื ืชืืืื ืืืืคืืก ืืคืฉืจืืืืช TCP (ืขืืื ืจืง ืขื ืืืืช ืืื ืืงืก 5.18+): tcp flags syn reset tcp option sack-perm
- ืืืืฆืืข ืฉื ืคืงืืืืช ืคืื ืฉืจืฉืจืช ("ืฉืจืฉืจืช nft list xy") ืืืืฅ.
ืืงืืจ: OpenNet.ru