ืคืืจืกื ืืฉืืจืืจ ืฉื ืืกื ื ืื ืืช nftables 1.0.0, ืืืืื ืืืฉืงื ืกืื ืื ืื ืืช ืขืืืจ IPv4, IPv6, ARP ืืืฉืจื ืจืฉืช (ืฉืืืจืชื ืืืืืืฃ iptables, ip6table, arptables ื-ebtables). ืืฉืื ืืืื ืื ืืจืฉืื ืืื ืฉืืืจืกื ืฉื nftables 1.0.0 ืชืขืืื ืืืืืื ืืืืืช Linux 5.13. ืฉืื ืื ืืฉืืขืืชื ืืืกืคืจ ืืืจืกื ืืื ื ืงืฉืืจ ืืฉืื ืืืื ืืืืชืืื ืืืฉืื, ืืื ืืื ืจืง ืชืืฆืื ืฉื ืืืฉื ืขืงืื ืฉื ืืกืคืืจ ืืกืืืื ืขืฉืจืื ื (ืืืจืกื ืืงืืืืช ืืืืชื 0.9.9).
ืืืืืช nftables ืืืืืช ืจืืืื ืืกื ื ืื ืืช ืืคืืขืืื ืืืื ืืืฉืชืืฉ, ืืขืื ืฉืืขืืืื ืืจืืช ืืืืื ืืกืืคืงืช ืขื ืืื ืชืช-ืืืขืจืืช nf_tables, ืฉืืืืชื ืืืง ืืืืืช ืืื ืืงืก ืืื ืืจืกื 3.13. ืจืืช ืืงืจื ื ืืกืคืงืช ืจืง ืืืฉืง ืื ืจื ืืืชื ืชืืื ืืคืจืืืืงืื ืืืกืคืง ืคืื ืงืฆืืืช ืืกืืกืืืช ืืืืืืฅ ื ืชืื ืื ืืื ืืช, ืืืฆืืข ืคืขืืืืช ื ืชืื ืื ืืืงืจืช ืืจืืื.
ืืืื ืืกืื ืื ืขืฆืื ืืืืืคืืื ืืกืคืฆืืคืืื ืืคืจืืืืงืื ืืืจืืืื ืืชืื bytecode ืฉื ืืจืื ืืืฉืชืืฉ, ืืืืืจ ืืื ืงืื ืืืช ืื ื ืืขื ืืชืื ืืืืื ืืืืฆืขืืช ืืืฉืง Netlink ืืืืืฆืข ืืงืจื ื ืืืืื ื ืืืจืืืืืืช ืืืืืืช ืืืืื ื-BPF (Berkeley Packet Filters). ืืืฉื ืื ืืืคืฉืจืช ืืืงืืื ืืฉืืขืืชืืช ืืช ืืืื ืงืื ืืกืื ืื ืืคืืขื ืืจืืช ืืงืจื ื ืืืืขืืืจ ืืช ืื ืืคืื ืงืฆืืืช ืฉื ืืืงื ืื ืืชืื ืืืืืืืื ืฉื ืขืืืื ืขื ืคืจืืืืงืืืื ืืืจืื ืืืฉืชืืฉ.
ืืืืืฉืื ืขืืงืจืืื:
- ืชืืืื ืืืืื ื ืืืกืื "*" ื ืืกืคื ืืจืฉืืืืช ืกื, ืืืืคืขืืืช ืขืืืจ ืื ืืืืื ืฉืืื ื ื ืืคืืช ืชืืช ืจืืืืื ืืืจืื ืฉืืืืืจื ืืกื. table x { map blocklist { type ipv4_addr : verdict flags interval elements = { 192.168.0.0/16 : accept, 10.0.0.0/8 : accept, * : drop } } chain y { type filter hook prerouting priority 0; ืงืืืช ืืืื ืืืช; ip saddr vmap @blocklist } }
- ื ืืชื ืืืืืืจ ืืฉืชื ืื ืืฉืืจืช ืืคืงืืื ืืืืฆืขืืช ืืืคืฉืจืืช "--define". # cat test.nft table netdev x { chain y { type filter hook ingress devices = $dev priority 0; ืืจืืืช ืืืื ืืืช; } } # nft โdefine dev="{ eth0, eth1 }" -f test.nft
- ืืจืฉืืืืช ืืคืืช, ืืฉืืืืฉ ืืืืืืืื ืงืืืขืื (ืืฆืืืื) ืืืชืจ: table inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter packets 0 bytes 0 : jump ssh_input, * counter packets 0 bytes 0 : drop } } chain ssh_input { } chain wan_input { tcp dport vmap @portmap } chain prerouting { type filter hook prerouting priority raw; ืงืืืช ืืืื ืืืช; iif vmap { "lo" : jump wan_input } }
- ื ืืกืคื ืคืงืืืช "list hooks" ืืื ืืืฆืื ืจืฉืืื ืฉื ืืืคืืื ืขืืืจ ืืฉืคืืช ืื ืืช ื ืชืื ื: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw input [nf_tables] } { -0000000100 chain ip ab [nf_tables] +0000000300 chain inet mz [nf_tables] } ืืืง ืงืืืื { -0000000225 selinux_ipv4_forward 0000000000 chain inet mz [nf_tables] } ืืืง ืงืืืื { -0000000225 selinux_ipv4_forward 0000000225 chain ip-ac [nf_4_XNUMX chain ip-ac [nf_XNUMX_XNUMX chain] XNUMX_output } hook postrouting { +XNUMX XNUMX selinux_ipvXNUMX_postroute } }
- ืืืืงืื ืืชืืจ ืืืคืฉืจืื ืืฉืื ืืืืืื jhash, symhash ื-numgen ืืื ืืืคืืฅ ืื ืืช ืืชืืจืื ืืืื ืืืฉืชืืฉ. โฆ ืชืืจ ื-symhash mod 65536 โฆ ืืืื ืชืืจ ืขืืงืคืื ื-numgen inc mod 65536 โฆ ืชืืจ ื-jhash oif . meta mark mod 32 "ืชืืจ" ื ืืชื ืื ืืฉืื ืขื ืจืฉืืืืช ืืคืืช ืืืืืจืช ืชืืจ ืืืจืื ืืืฉืชืืฉ ืขื ืกืื ืืคืชืืืช ืฉืจืืจืืชืืื. ... ืืืื ืชืืจ ืขืืงืคืื ืืืคืช oifname { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
- ืืคืฉืจ ืืืจืืื ืืฉืชื ืื ืืืืืืื ืจืฉืืืช ืกื ืืืกืคืจ ืืคืืช. ืืืืจืช ืืืฉืงืื = โโ{ eth0, eth1 } table ip x { chain y { type filter hook priority input 0; ืงืืืช ืืืื ืืืช; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft list set rulet table ip x { chain y { type filter hook input priority 0; ืงืืืช ืืืื ืืืช; iifname vmap { "lo" : accept, "eth0": drop, "eth1": drop } }
- ืฉืืืื ืฉื vmaps (ืืคืช ืคืกืง ืืื) ืืืจืืืืื ืืืชืจ: # nft add rule xy tcp dport . ip saddr vmap {1025-65535. 192.168.10.2 : ืงืื }
- ืชืืืืจ ืคืฉืื ืขืืืจ ืืืคืืื NAT. ืืืชืจ ืืฆืืื ืืืืื ืืชืืืืช: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } ืื ืืชืืืืช IP ืืคืืจืฉืืช ืืืฆืืืืช: ... dnat to ip saddr map { 10.141.11.4 : 192.168.2.3. . 80 } ืื ืฉืืืืืื ืฉื ืืืืื IP ืืืฆืืืืช: ... dnat to ip saddr . tcp dport map {192.168.1.2. 80: 10.141.10.2-10.141.10.5. 8888-8999 }
ืืงืืจ: OpenNet.ru