nftables ΠΏΠ°ΠΊΠ΅Ρ‚ Ρ„ΠΈΠ»Ρ‚Π΅Ρ€ 1.0.0 ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΡƒΠ²Π°ΡšΠ΅

ОбјавСно Π΅ ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΈΡ‚Π΅ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ 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. Нивото Π½Π° Ρ˜Π°Π΄Ρ€ΠΎΡ‚ΠΎ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° само Π³Π΅Π½Π΅Ρ€ΠΈΡ‡ΠΊΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ нСзависСн ΠΎΠ΄ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» кој ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° основни Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° ΠΈΠ·Π²Π»Π΅ΠΊΡƒΠ²Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΡ‚.

Π‘Π°ΠΌΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°ΡšΠ΅ ΠΈ Ρ€Π°ΠΊΡƒΠ²Π°Ρ‡ΠΈΡ‚Π΅ спСцифични Π·Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΡ‚ сС ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°Π°Ρ‚ Π²ΠΎ Π±Π°Ρ˜Ρ‚Π΅ΠΊΠΎΠ΄ Π½Π° кориснички простор, ΠΏΠΎ ΡˆΡ‚ΠΎ овој Π±Π°Ρ˜Ρ‚Π΅ΠΊΠΎΠ΄ сС Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π° Π²ΠΎ ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ со помош Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠΎΡ‚ Π½Π° Netlink ΠΈ сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° Π²ΠΎ ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ Π²ΠΎ ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина ΡˆΡ‚ΠΎ Π»ΠΈΡ‡ΠΈ Π½Π° BPF (Berkeley Packet Filters). Овој пристап ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° сС Π½Π°ΠΌΠ°Π»ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚ Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°ΡšΠ΅ ΡˆΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ Π½Π° Ρ˜Π°Π΄Ρ€ΠΎΡ‚ΠΎ ΠΈ Π΄Π° сС прСмСстат ситС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° ΠΏΠ°Ρ€ΡΠΈΡ€Π°ΡšΠ΅ ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° со ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ Π²ΠΎ корисничкиот простор.

Π“Π»Π°Π²Π½ΠΈΡ‚Π΅ ΠΈΠ½ΠΎΠ²Π°Ρ†ΠΈΠΈ:

  • ΠŸΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ°Ρ‚Π° Π·Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΡ‚ маска β€ž*β€œ Π΅ Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π° Π²ΠΎ списоцитС со мноТСства, ΡˆΡ‚ΠΎ сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° Π·Π° ситС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΡˆΡ‚ΠΎ Π½Π΅ спаѓаат Π²ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Π²ΠΎ сСтот. Ρ‚Π°Π±Π΅Π»Π° x { ΠΌΠ°ΠΏΠ° Π±Π»ΠΎΠΊ листа { Ρ‚ΠΈΠΏ ipv4_addr : прСсуда Π·Π½Π°ΠΌΠ΅Π½Ρ†Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ = { 192.168.0.0/16 : ΠΏΡ€ΠΈΡ„Π°Ρ‚ΠΈ, 10.0.0.0/8 : ΠΏΡ€ΠΈΡ„Π°Ρ‚ΠΈ, * : ΠΏΠ°Π΄ } } ΡΠΈΠ½ΡŸΠΈΡ€ y { Ρ‚ΠΈΠΏ Ρ„ΠΈΠ»Ρ‚Π΅Ρ€ ΠΊΡƒΠΊΠ° Π·Π° ΠΏΡ€Π΅Π΄Ρ€ΡƒΡ‚ΠΈΡ€Π°ΡšΠ΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ 0; ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΈΡ„Π°Ρ‚ΠΈ; ip saddr vmap @blocklist } }
  • МоТно Π΅ Π΄Π° сС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π°Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ‚Π° линија ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја ΠΎΠΏΡ†ΠΈΡ˜Π°Ρ‚Π° β€ž--defineβ€œ. # cat test.nft Ρ‚Π°Π±Π΅Π»Π° netdev x { ΡΠΈΠ½ΡŸΠΈΡ€ y { Ρ‚ΠΈΠΏ ΡƒΡ€Π΅Π΄ΠΈ Π·Π° Π²Π»Π΅Π· Π½Π° ΠΊΡƒΠΊΠ° Π·Π° Ρ„ΠΈΠ»Ρ‚Π΅Ρ€ = ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π° $dev 0; ΠΏΠ°Π΄ Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π°; } } # nft β€”define dev="{ eth0, eth1 }" -f test.nft
  • Π’ΠΎ списоцитС Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈ, Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½Π° Π΅ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° константни (stateful) ΠΈΠ·Ρ€Π°Π·ΠΈ: table inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ 0 bytes 0 : jump ssh_input, * counter ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ 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 } } }
  • Π”ΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° β€žΠ»ΠΈΡΡ‚Π° ΠΊΡƒΠΊΠΈβ€œ Π·Π° ΠΏΡ€ΠΈΠΊΠ°ΠΆΡƒΠ²Π°ΡšΠ΅ листа Π½Π° Ρ€Π°ΠΊΡƒΠ²Π°Ρ‡ΠΈ Π·Π° Π΄Π°Π΄Π΅Π½Π° Ρ„Π°ΠΌΠΈΠ»ΠΈΡ˜Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ: # nft листа ΠΊΡƒΠΊΠΈ ip ΡƒΡ€Π΅Π΄ eth0 Ρ„Π°ΠΌΠΈΠ»ΠΈΡ˜Π° ip { hook ingress { +0000000010 ΡΠΈΠ½ΡŸΠΈΡ€ netdev xy [nf_tables] +0000000300 ΡΠΈΠ½ΡŸΠΈΡ€ inet mw [nf} hookables inputs] { -0000000100 ΡΠΈΠ½ΡŸΠΈΡ€ ip ab [nf_tables] +0000000300 ΡΠΈΠ½ΡŸΠΈΡ€ inet mz [nf_tables] } ΠΊΡƒΠΊΠ° Π½Π°ΠΏΡ€Π΅Π΄ { -0000000225 selinux_ipv4_forward 0000000000 ΡΠΈΠ½ΡŸΠΈΡ€ ip акционСрски [nf_tokable] {0000000225} _ipv4_output } ΠΊΡƒΠΊΠ° ΠΏΠΎΡΡ‚Ρ€ΡƒΡ‚ΠΈΡ€Π°ΡšΠ΅ { +0000000225 4 selinux_ipvXNUMX_postroute } }
  • Π‘Π»ΠΎΠΊΠΎΠ²ΠΈΡ‚Π΅ Π½Π° Ρ€Π΅Π΄ΠΈΡ†ΠΈ Π΄ΠΎΠ·Π²ΠΎΠ»ΡƒΠ²Π°Π°Ρ‚ jhash, symhash ΠΈ numgen ΠΈΠ·Ρ€Π°Π·ΠΈ Π΄Π° сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π°Ρ‚ Π·Π° Π΄Π° сС дистрибуираат ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π²ΠΎ Ρ€Π΅Π΄ΠΈΡ†ΠΈ Π²ΠΎ корисничкиот простор. … Ρ€Π΅Π΄ Π΄ΠΎ symhash mod 65536 … Ρ€Π΅Π΄ΠΈΡ†Π°Ρ‚Π° ΠΎΠ·Π½Π°Ρ‡ΡƒΠ²Π° бајпас Π΄ΠΎ numgen inc mod 65536 … Ρ€Π΅Π΄ Π΄ΠΎ jhash oif . ΠΌΠ΅Ρ‚Π° ΠΎΠ·Π½Π°ΠΊΠ° mod 32 β€žΡ€Π΅Π΄ΠΈΡ†Π°β€œ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π° ΠΈ со листи Π½Π° ΠΌΠ°ΠΏΠΈ Π·Π° Π΄Π° сС ΠΈΠ·Π±Π΅Ρ€Π΅ Ρ€Π΅Π΄ΠΈΡ†Π° Π²ΠΎ корисничкиот простор Π²Ρ€Π· основа Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΊΠ»ΡƒΡ‡Π΅Π²ΠΈ. ... Ρ€Π΅Π΄ΠΈΡ†Π°Ρ‚Π° ΠΎΠ·Π½Π°Ρ‡ΡƒΠ²Π° Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠ°Ρ€Ρ‚Π°Ρ‚Π° oifname { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • МоТно Π΅ Π΄Π° сС ΠΏΡ€ΠΎΡˆΠΈΡ€Π°Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Π°Ρ‚ Π·Π±ΠΈΡ€ΠΊΠ° листа Π²ΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΌΠ°ΠΏΠΈ. Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ˜ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠΈ = { eth0, eth1 } Ρ‚Π°Π±Π΅Π»Π° ip x { ΡΠΈΠ½ΡŸΠΈΡ€ y { Ρ‚ΠΈΠΏ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π° Π²Π»Π΅Π·Π½Π°Ρ‚Π° ΠΊΡƒΠΊΠ° Π·Π° Ρ„ΠΈΠ»Ρ‚Π΅Ρ€ 0; ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΈΡ„Π°Ρ‚ΠΈ; iifname vmap { lo : ΠΏΡ€ΠΈΡ„Π°Ρ‚ΠΈ, $interfaces : drop } } } # nft -f x.nft # nft list Ρ‚Π°Π±Π΅Π»Π° со ΠΏΡ€Π°Π²ΠΈΠ»Π° ip x { ΡΠΈΠ½ΡŸΠΈΡ€ y { Ρ‚ΠΈΠΏ Ρ„ΠΈΠ»Ρ‚Π΅Ρ€ ΠΊΡƒΠΊΠ° Π·Π° Π²Π»Π΅Π· ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ 0; ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΈΡ„Π°Ρ‚ΠΈ; iifname vmap { "lo" : ΠΏΡ€ΠΈΡ„Π°Ρ‚ΠΈ, "eth0" : drop, "eth1" : drop } }
  • Π”ΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°ΡšΠ΅ Π½Π° vmaps (ΠΊΠ°Ρ€Ρ‚Π° Π½Π° прСсуди) Π²ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ: # nft Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ 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 Π΄ΠΎ ip saddr map { 10.141.11.4 : 192.168.2.3-80 } ΠΈΠ»ΠΈ Сксплицитни IP адрСси ΠΈ ΠΏΠΎΡ€Ρ‚ΠΈ: ... dnat Π΄ΠΎ ip saddr map { 192.168.1.2:80. . 10.141.10.2 } ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π½Π° опсСг Π½Π° IP ΠΈ ΠΏΠΎΡ€Ρ‚ΠΈ: ... dnat to ip saddr . tcp dport ΠΌΠ°ΠΏΠ° {10.141.10.5. 8888: 8999-XNUMX. XNUMX-XNUMX }

Π˜Π·Π²ΠΎΡ€: opennet.ru

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€