ααΆαα ααααααΆαααααααααααα ααααααααΆα nftables 1.0.7 ααααΌαααΆαααααα»ααα αααααααα½αααααα½αα ααα»α αααααΆααααααααααα ααααααααΆααααααΆαα IPv4, IPv6, ARP αα·αααααΆααααααΆα (ααΆαααααααααααα½α iptables, ip6table, arptables αα·α ebtables)α αααα αα nftables αα½αααΆααααΆαααΆαα»ααααααααα αααααααααΎαααΆααααα»αα αααααα’αααααααΎααααΆαα αααααααααααΆαααΆαααααα·αααΊαααααααΌαααΆααααααααααααααααααα nf_tables αααααΆααααααα½αααααΊαααααΈαα»α α αΆααααΆααααΈααΆαα ααααααΆα 3.13 α ααααα·αααΊααααααααααα ααα»α αααααΆααα―αααΆααααααα·ααΈααΆαααΌαα αααααααααα»αααΆαααΆααΌαααααΆααααααΆααααΆαααΆααααα·ααααααααΈαααα ααααααααΆα ααααα·ααααα·ααΆααα·αααααα αα·αααΆααααααααααααα αΌαα
α αααΆααααααΆαα αααα αα·αα’ααααααααααΆαααΆααα·ααΈααΆαααΆααααΆααααααΌαααΆαα αααααααΆ bytecode αααα»αα αααααα’αααααααΎααααΆαα αααααΆαααα bytecode αααααααΌαααΆααααα»ααα αααα»αααΊααααααααααΎα ααα»α αααααΆαα Netlink α αΎαααααΌαααΆαααααα·ααααα·αααα»αααΊααααα αααα»ααααΆαααΈααα·αααα·ααα·ααααααααΉαααΎαααα BPF (Berkeley Packet Filters)α αα·ααΈααΆααααααααα’αα»ααααΆαα±ααα’αααααΆααααααααααΆαααααΆααααΌαααα αααααΌαααααααααααα»αααααΎαααΆααα ααααα·αααΊααα α αΎαααααΆααααΈαα»αααΆαααΆααα’ααααα αααΆααααα αα·ααααααα·ααααΆαααααΆααααααΎααΆαααΆαα½ααα·ααΈααΆααα αααα»αααα αα’αααααααΎααααΆααα
ααΆαααααΆααααααΌαααααΆαααα
- ΠΠ»Ρ ΡΠΈΡΡΠ΅ΠΌ Ρ ΡΠ΄ΡΠΎΠΌ Linux 6.2+ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ² vxlan, geneve, gre ΠΈ gretap, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΡΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π² ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ IP-Π°Π΄ΡΠ΅ΡΠ° Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈΠ· VxLAN, ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° (Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π΄Π΅ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° VxLAN ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΡΠΈΠ»ΡΡΡΠ° ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ vxlan0): β¦ udp dport 4789 vxlan ip protocol udp β¦ udp dport 4789 vxlan ip saddr 1.2.3.0/24 β¦ udp dport 4789 vxlan ip saddr . vxlan ip daddr { 1.2.3.4 . 4.3.2.1 }
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ»ΠΈΡΠ½ΠΈΡ ΠΎΡΡΠ°ΡΠΊΠΎΠ² ΠΏΠΎΡΠ»Π΅ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° set-ΡΠΏΠΈΡΠΊΠ°, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ»ΠΈ ΡΠ°ΡΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΈΠ· ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° (ΡΠ°Π½ΡΡΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΠ»Π΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° 25 ΠΈΠ· set-ΡΠΏΠΈΡΠΊΠ° Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌΠΈ 24-30 ΠΈ 40-50 Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΎΡΡΠ°Π½ΡΡΡΡ 24, 26-30 ΠΈ 40-50. ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π°Π²ΡΠΎΡΠ»ΠΈΡΠ½ΠΈΡ, Π±ΡΠ΄ΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ Π² ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΡΡΡΠΈΡ Π²ΡΠΏΡΡΠΊΠ°Ρ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ Π²Π΅ΡΠΎΠΊ ΡΠ΄ΡΠ° 5.10+. # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24-30, 40-50 } } } # nft delete element ip x y { 25 } # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24, 26-30, 40-50 } } }
- Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ°ΡΠΈΠΈ ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² ΠΏΡΠΈ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π΅ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ Π°Π΄ΡΠ΅ΡΠΎΠ² (NAT). table ip nat { chain prerouting { type nat hook prerouting priority dstnat; policy accept; dnat to ip daddr . tcp dport map { 10.1.1.136 . 80 : 1.1.2.69 . 1024, 10.1.1.10-10.1.1.20 . 8888-8889 : 1.1.2.69 . 2048-2049 } persistent } }
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Β«lastΒ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π³ΠΎ ΡΠ·Π½Π°ΡΡ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈΠ»ΠΈ set-ΡΠΏΠΈΡΠΊΠ°. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΡΠ΄ΡΠ° Linux 5.14. table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h } chain z { type filter hook output priority filter; policy accept; update @y { ip daddr . tcp dport } } } # nft list set ip x y table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h elements = { 172.217.17.14 . 443 last used 1s591ms timeout 1h expires 59m58s409ms, 172.67.69.19 . 443 last used 4s636ms timeout 1h expires 59m55s364ms, 142.250.201.72 . 443 last used 4s748ms timeout 1h expires 59m55s252ms, 172.67.70.134 . 443 last used 4s688ms timeout 1h expires 59m55s312ms, 35.241.9.150 . 443 last used 5s204ms timeout 1h expires 59m54s796ms, 138.201.122.174 . 443 last used 4s537ms timeout 1h expires 59m55s463ms, 34.160.144.191 . 443 last used 5s205ms timeout 1h expires 59m54s795ms, 130.211.23.194 . 443 last used 4s436ms timeout 1h expires 59m55s564ms } } }
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ²ΠΎΡ Π² set-ΡΠΏΠΈΡΠΊΠ°Ρ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ²ΠΎΡΡ Π½Π° ΡΡΠ°ΡΠΈΠΊ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ IP-Π°Π΄ΡΠ΅ΡΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ: table netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device Β«eth0Β» priority filter; policy accept; ip daddr @y drop } } # nft add element inet x y { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list ruleset table netdev x { set y { type ipv4_addr size 65535 quota over 10000 mbytes elements = { 8.8.8.8 quota over 10000 mbytes used 196 bytes } } chain y { type filter hook egress device Β«eth0Β» priority filter; policy accept; ip daddr @y drop } }
- Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π² set-ΡΠΏΠΈΡΠΊΠ°Ρ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΡΡΠ° ΡΠΏΠΈΡΠΊΠ° Π°Π΄ΡΠ΅ΡΠ° Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° VLAN ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΡΡΠΌΡΡ ΡΠΊΠ°Π·Π°ΡΡ Π½ΠΎΠΌΠ΅Ρ VLAN (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id size 2048 flags dynamic,timeout timeout 1m } chain c { type filter hook ingress device eth0 priority 0; policy accept; ether type != 8021q update @s { ether daddr . 123 } counter } }
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° Π½ΠΎΠ²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Β«destroyΒ» Π΄Π»Ρ Π±Π΅Π·ΠΎΠ³ΠΎΠ²ΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ delete Π½Π΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ENOENT ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°). ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΡΠ΄ΡΠΎ Linux 6.3-rc. destroy table ip filter
ααααα: opennet.ru