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, която Π΅ част ΠΎΡ‚ ядрото Π½Π° Linux ΠΎΡ‚ вСрсия 3.13. На Π½ΠΈΠ²ΠΎ ядро ​​сС прСдоставя само ΠΎΠ±Ρ‰ интСрфСйс, нСзависим ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», ΠΊΠΎΠΉΡ‚ΠΎ прСдоставя основни Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π΄Π°Π½Π½ΠΈ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°.

Π‘Π°ΠΌΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ ΠΈ спСцифичнитС Π·Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‚ Π² Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄ Π½Π° потрСбитСлското пространство, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‚ΠΎΠ·ΠΈ Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄ сС Π·Π°Ρ€Π΅ΠΆΠ΄Π° Π² ядрото с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° интСрфСйса Netlink ΠΈ сС изпълнява Π² ядрото Π² спСциална Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина, наподобяваща BPF (Berkeley Packet Filters). Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€Π°Π²ΠΈ възмоТно Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ намаляванС Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° филтриращия ΠΊΠΎΠ΄, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ Π½Π° Π½ΠΈΠ²ΠΎ ядро, ΠΈ прСмСстванС Π½Π° всички Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° Π°Π½Π°Π»ΠΈΠ· ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ Π² потрСбитСлското пространство.

Основни ΠΈΠ½ΠΎΠ²Π°Ρ†ΠΈΠΈ:

  • Към ΡΠΏΠΈΡΡŠΡ†ΠΈΡ‚Π΅ с Π½Π°Π±ΠΎΡ€ΠΈ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° маскиращия Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ β€ž*β€œ, ΠΊΠΎΠΉΡ‚ΠΎ сС задСйства Π·Π° всички ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ Π² Π΄Ρ€ΡƒΠ³ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Π² Π½Π°Π±ΠΎΡ€Π°. Ρ‚Π°Π±Π»ΠΈΡ†Π° 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 } } Π²Π΅Ρ€ΠΈΠ³Π° ssh_input { } Π²Π΅Ρ€ΠΈΠ³Π° wan_input { tcp dport vmap @portmap } Π²Π΅Ρ€ΠΈΠ³Π° prerouting { type filter hook prerouting priority raw; ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΈΠ΅ΠΌΠ°; iif vmap { "lo": скок wan_input } } }
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° "list hooks" Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° списък с ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ Π·Π° Π΄Π°Π΄Π΅Π½ΠΎ сСмСйство ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables] } hook input { -0000000100 Π²Π΅Ρ€ΠΈΠ³Π° ip ab [nf_tables] +0000000300 Π²Π΅Ρ€ΠΈΠ³Π° inet mz [nf_tables] } ΠΊΡƒΠΊΠ° Π½Π°ΠΏΡ€Π΅Π΄ { -0000000225 selinux_ipv4_forward 0000000000 Π²Π΅Ρ€ΠΈΠ³Π° ip ac [nf_tables] } ΠΊΡƒΠΊΠ° ΠΈΠ·Ρ…ΠΎΠ΄ { -0000000225 selinux_ipv4_ ΠΈΠ·Ρ…ΠΎΠ΄ } hook postrouting { +0000000225 4 selinux_ipvXNUMX_postroute } }
  • Π‘Π»ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅ Π½Π° ΠΎΠΏΠ°ΡˆΠΊΠΈΡ‚Π΅ позволяват ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅ jhash, symhash ΠΈ numgen Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ, Π·Π° Π΄Π° сС разпрСдСлят ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π² опашки Π² потрСбитСлското пространство. … опашка към symhash mod 65536 … Ρ„Π»Π°Π³ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° заобикалят към numgen inc mod 65536 … опашка към jhash oif. meta mark mod 32 "queue" ΡΡŠΡ‰ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π° със ΡΠΏΠΈΡΡŠΡ†ΠΈ с ΠΊΠ°Ρ€Ρ‚ΠΈ, Π·Π° Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ опашка Π² потрСбитСлското пространство въз основа Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅. ... Ρ„Π»Π°Π³ΠΎΠ²Π΅ Π½Π° опашка заобикалят Π΄ΠΎ oifname map { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° сС Ρ€Π°Π·ΡˆΠΈΡ€ΡΡ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ списък Π² няколко ΠΊΠ°Ρ€Ρ‚ΠΈ. Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΠΉΡ‚Π΅ интСрфСйси = { eth0, eth1 } Ρ‚Π°Π±Π»ΠΈΡ†Π° ip x { Π²Π΅Ρ€ΠΈΠ³Π° y { Ρ‚ΠΈΠΏ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ ΠΊΡƒΠΊΠ° Π²Ρ…ΠΎΠ΄Π΅Π½ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ 0; ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΈΠ΅ΠΌΠ°; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft list table set ΠΏΡ€Π°Π²ΠΈΠ»Π° ip x { chain y { type filter hook input priority 0; ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΈΠ΅ΠΌΠ°; iifname vmap { "lo" : ΠΏΡ€ΠΈΠ΅ΠΌΠ°Π½Π΅, "eth0" : пусканС, "eth1" : пусканС } } }
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° 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 към ip saddr . tcp dport map { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€