nftables ΠΏΠ°ΠΊΠ΅Ρ‚Π΅Π½ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ вСрсия 1.0.6

Π˜Π·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ„ΠΈΠ»Ρ‚ΡŠΡ€Π° Π·Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ nftables 1.0.6 бСшС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΎ, обСдинявайки интСрфСйситС Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° IPv4, IPv6, ARP ΠΈ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ мостовС (насочСни към замяна Π½Π° iptables, ip6table, arptables ΠΈ ebtables). ΠŸΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ nftables Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π° Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ работят Π² потрСбитСлското пространство, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° ядрото сС прСдоставя ΠΎΡ‚ подсистСмата nf_tables, която Π΅ част ΠΎΡ‚ ядрото Π½Π° Linux ΠΎΡ‚ вСрсия 3.13. На Π½ΠΈΠ²ΠΎ ядро ​​сС прСдоставя само ΠΎΠ±Ρ‰ интСрфСйс, нСзависим ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», ΠΊΠΎΠΉΡ‚ΠΎ прСдоставя основни Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π΄Π°Π½Π½ΠΈ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°.

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

Основни ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ:

  • Π’ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π°, ΠΈΠ·Π²ΠΈΠΊΠ°Π½ ΠΏΡ€ΠΈ посочванС Π½Π° опцията "-o/--optimize", Π΅ настроСно Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ‡Ρ€Π΅Π· ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ Π² ΡΠΏΠΈΡΡŠΡ†ΠΈ с ΠΊΠ°Ρ€Ρ‚ΠΈ ΠΈ Π½Π°Π±ΠΎΡ€ΠΈ. НапримСр ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° са # cat ruleset.nft table ip x { chain y { type filter hook input priority filter; спад Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π°; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 ΠΏΡ€ΠΈΠ΅ΠΌΠ°Π½Π΅ Π½Π° meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 ΠΏΡ€ΠΈΠ΅ΠΌΠ°Π½Π΅ Π½Π° meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 ΠΏΡ€ΠΈΠ΅ΠΌΠ°Π½Π΅ Π½Π° meta iifname eth1 ip saddr 1.1.1.2 .2.2.4.0 ip daddr 2.2.4.10-2 accept meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip daddr 4 accept } } слСд "nft -o -c -f ruleset.nft" Ρ‰Π΅ бъдС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½ Π² слСдното: Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π°. nft:17:74-1: ΠΌΠ΅Ρ‚Π° iifname eth1.1.1.1 ip saddr 2.2.2.3 ip daddr 5 ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΏΡ€Π°Π²ΠΈΠ»Π°.nft:17:74-1: ΠΌΠ΅Ρ‚Π° iifname eth1.1.1.2 ip saddr 2.2.2.4 ip daddr 6 ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΏΡ€Π°Π²ΠΈΠ»Π°.nft: 17:77-1: meta iifname eth1.1.1.2 ip saddr 2.2.3.0 ip daddr 24/7 ΠΏΡ€ΠΈΠ΅ΠΌΠ° ruleset.nft:17:83-1: ΠΌΠ΅Ρ‚Π° iifname eth1.1.1.2 ip saddr 2.2.4.0 ip daddr 2.2.4.10-8 ΠΏΡ€ΠΈΠ΅ΠΌΠ° ruleset.nft:17:74-2: meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip daddr 1 ΠΏΡ€ΠΈΠ΅ΠΌ Π²: iifname . ip saddr. ip daddr {eth1.1.1.1. 2.2.2.3. 1, eth1.1.1.2. 2.2.2.4. 1, eth1.1.1.2. 2.2.3.0. 24/1, eth1.1.1.2 . 2.2.4.0. 2.2.4.10-2, eth1.1.1.3. 2.2.2.5. XNUMX } ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌ
  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΄Π° ΠΊΠΎΠ½Π΄Π΅Π½Π·ΠΈΡ€Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π΅Ρ‡Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ прости ΡΠΏΠΈΡΡŠΡ†ΠΈ с Π½Π°Π±ΠΎΡ€ΠΈ, Π² ΠΏΠΎ-ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π° Ρ„ΠΎΡ€ΠΌΠ°, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: # cat ruleset.nft table ip filter { chain input { type filter hook input priority filter; спад Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π°; iifname "lo" ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌ ct ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ установСно, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ "Π’ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Ρ…ΠΎΠΆΠ΄Π°ΠΌΠ΅, Π½ΠΈΠ΅ вярвамС" iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌ iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept } } слСд стартиранС Π½Π° "nft -o -c -f ruleset.nft" Ρ‰Π΅ бъдС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½ Ρ‚Π°ΠΊΠ° : ruleset.nft:6:22-149: iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 ΠΏΡ€ΠΈΠ΅ΠΌΠ΅Ρ‚Π΅ ruleset.nft:7:22 -143 0 : iifname "enp31s6f64.59.144.17" ip saddr { 64.59.150.133, 10.0.0.149 } ip daddr 53 udp sport 32768 udp dport 65535-0 ΠΏΡ€ΠΈΠ΅ΠΌ Π²: iifname . ip saddr. ip daddr. udp спорт. udp dport { enp31s6f209.115.181.102 . 10.0.0.149. 123. 32768 . 65535-0, enp31s6f216.197.228.230. 10.0.0.149. 123. 32768 . 65535-0, enp31s6f64.59.144.17. 10.0.0.149. 53. 32768 . 65535-0, enp31s6f64.59.150.133. 10.0.0.149. 53. 32768 . 65535-XNUMX } ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌ
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄ Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ Π½Π° сливанС, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ‚ΠΈΠΏΠΎΠ²Π΅ с Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ endian, ΠΊΠ°Ρ‚ΠΎ IPv4 (ΠΌΡ€Π΅ΠΆΠΎΠ² endian) ΠΈ ΠΌΠ΅Ρ‚Π°ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° (system endian). Ρ‚Π°Π±Π»ΠΈΡ†Π° ip x { map w { typeof ip saddr. ΠΌΠ΅Ρ‚Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°: ΠΏΡ€ΠΈΡΡŠΠ΄Π° Ρ„Π»Π°Π³ΠΎΠ²Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» брояч Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ = {127.0.0.1-127.0.0.4. 0x123434-0xb00122: ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌ, 192.168.0.10-192.168.1.20. 0x0000aa00-0x0000aaff : ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌ, } } Π²Π΅Ρ€ΠΈΠ³Π° k { Ρ‚ΠΈΠΏ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ ΠΊΡƒΠΊΠ° Π²Ρ…ΠΎΠ΄Π΅Π½ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€; спад Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π°; ip saddr. ΠΌΠ΅Ρ‚Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° vmap @w } }
  • ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈ ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΊΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ ΠΈΠ·Ρ€Π°Π·ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: meta l4proto 91 @th,400,16 0x0 accept
  • ΠšΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ: Π²ΠΌΡŠΠΊΠ½Π΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ xy tcp sport { 3478-3497, 16384-16387 } counter accept
  • JSON API Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½, Π·Π° Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΈΠ·Ρ€Π°Π·ΠΈ Π² ΡΠΏΠΈΡΡŠΡ†ΠΈΡ‚Π΅ с Π½Π°Π±ΠΎΡ€ΠΈ ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈ.
  • Π’ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡΡ‚Π° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π½Π° nftables python, Π½Π°Π±ΠΎΡ€ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ("-c") ΠΈ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° външна ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°.
  • ДобавянСто Π½Π° ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ Π² Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° сСт-ΡΠΏΠΈΡΡŠΡ†ΠΈ.
  • ПозволСно Π΅ Π΄Π° сС ΡƒΠΊΠ°ΠΆΠ΅ Π½ΡƒΠ»Π΅Π²Π° стойност Π² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° скоростта Π½Π° Π±Π°ΠΉΡ‚ΠΎΠ²Π΅Ρ‚Π΅.

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

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