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

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

ΠŸΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ nftables Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π° Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ работят Π² потрСбитСлското пространство, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° ядрото сС прСдоставя ΠΎΡ‚ подсистСмата nf_tables, която Π΅ част ΠΎΡ‚ ядрото Π½Π° Linux ΠΎΡ‚ вСрсия 3.13. На Π½ΠΈΠ²ΠΎ ядро ​​сС прСдоставя само ΠΎΠ±Ρ‰ интСрфСйс, нСзависим ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», ΠΊΠΎΠΉΡ‚ΠΎ прСдоставя основни Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π΄Π°Π½Π½ΠΈ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°.

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

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

  • Π‘ΠΏΠΈΡΡŠΡ†ΠΈΡ‚Π΅ с Π½Π°Π±ΠΎΡ€ΠΈ Π²Π΅Ρ‡Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ съвпадСниС Π½Π° ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ интСрфСйси Ρ‡Ρ€Π΅Π· маска, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Π΄Π°Π΄Π΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π·Π½Π°ΠΊΠ° "*": table inet testifsets { set simple_wild { type ifname flags interval elements = { "abcdef*", "othername", "ppp0" } } Π²Π΅Ρ€ΠΈΠ³Π° v4icmp { Ρ‚ΠΈΠΏ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ ΠΊΡƒΠΊΠ° Π²Ρ…ΠΎΠ΄Π΅Π½ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ 0; ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΈΠ΅ΠΌΠ°; iifname @simple_wild брояч Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ 0 Π±Π°ΠΉΡ‚Π° 0 iifname { "abcdef*", "eth0" } брояч Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ 0 Π±Π°ΠΉΡ‚Π° 0 } }
  • Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ обСдиняванС Π½Π° прСсичащи сС Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ списъка с настройки ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°. ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС задавашС опцията β€žΠ°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π°Π½Π΅β€œ, обСдиняванСто сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΡˆΠ΅ Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π°, Π½ΠΎ сСга Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ ΠΏΡ€ΠΈ постСпСнно добавянС Π½Π° Π½ΠΎΠ²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π² процСса. НапримСр Π² ΡΡ‚ΡŠΠΏΠΊΠ°Ρ‚Π° Π·Π° Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Π½Π΅ ΡΠΏΠΈΡΡŠΠΊΡŠΡ‚ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ y { Ρ„Π»Π°Π³ΠΎΠ²Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ обСдиняванС Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ = { 1.2.3.0, 1.2.3.255, 1.2.3.0/24, 3.3.3.3, 4.4.4.4, 4.4.4.4-4.4.4.8. 3.3.3.4, 3.3.3.5 , 1.2.3.0 } } Ρ‰Π΅ станат Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ = { 24/3.3.3.3, 3.3.3.5-4.4.4.4, 4.4.4.8-1.2.3.0 } ΠΈ слСд Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ # nft Π΄ΠΎΠ±Π°Π²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ ip xy { 1.2.4.255 -3.3.3.6, 1.2.3.0 } става Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ = { 1.2.4.255-3.3.3.3, 3.3.3.6-4.4.4.4, 4.4.4.8-XNUMX }

    ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅Ρ‚Π΅ ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ списъка, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ с Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΡŠΡ‚ сС намалява ΠΈΠ»ΠΈ раздСля.

  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° мноТСство адрСси (NAT) Π² списък с ΠΊΠ°Ρ€Ρ‚ΠΈ Π² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΈΠ·Π²ΠΈΠΊΠ°Π½ ΠΏΡ€ΠΈ посочванС Π½Π° опцията "-o/--optimize". НапримСр, Π·Π° set # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; спад Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π°; ip saddr 1.1.1.1 tcp dport 8000 snat Π΄ΠΎ 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat Π΄ΠΎ 5.5.5.5:90 } }

    ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° "nft -o -c -f ruleset.nft" Ρ‰Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° "ip saddr" Π² списък с ΠΊΠ°Ρ€Ρ‚ΠΈ: snat към ip saddr. tcp dport map { 1.1.1.1 . 8000: 4.4.4.4. 80, 2.2.2.2. 8001:5.5.5.5. 90}

    По ΡΡŠΡ‰ΠΈΡ Π½Π°Ρ‡ΠΈΠ½ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈΡ‚Π΅ ΠΈΠ·Ρ€Π°Π·ΠΈ ΠΌΠΎΠ³Π°Ρ‚ ΡΡŠΡ‰ΠΎ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½ΠΈ Π² ΡΠΏΠΈΡΡŠΡ†ΠΈ с ΠΊΠ°Ρ€Ρ‚ΠΈ: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 goto nat_dns_dnstc udp length 62-78 @ th,160,128 0x0e31393032383939353831343037320e ΠΎΡ‚ΠΈΠ²Π°ΠΌ nat_dns_this_5301 udp дълТина 62-78 @th,160,128 0x0e31363436323733373931323934300e goto nat_dns_saturn_5301 udp дълТина 62-78 @th,160,128 0x0e32393535373539353636383732310 5302e goto nat_dns_saturn_62 udp дълТина 78-160,128 @th,0 0x38353439353637323038363633390e5303e goto nat_dns_saturn_XNUMX drop } }

    слСд оптимизация ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ списък с ΠΊΠ°Ρ€Ρ‚ΠΈ: udp length . @th,160,128 vmap { 47-63 . 0x0e373135363130333131303735353203 : ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π΄ΠΎ nat_dns_dnstc, 62-78. 0x0e31393032383939353831343037320e : ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π΄ΠΎ nat_dns_this_5301, 62-78. 0x0e31363436323733373931323934300e : ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π΄ΠΎ nat_dns_saturn_5301, 62-78. 0x0e32393535373539353636383732310e : ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° nat_dns_saturn_5302, 62-78. 0x0e38353439353637323038363633390e : ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π΄ΠΎ nat_dns_saturn_5303 }

  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ ΠΈΠ·Ρ€Π°Π·ΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° конкатСнация. НапримСр: # nft add rule xy ip saddr. @ih,32,32 { 1.1.1.1. 0x14, 2.2.2.2. 0x1e } ΠΈΠ»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° x { set y { typeof ip saddr. @ih,32,32 Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° = { 1.1.1.1. 0x14 } } }
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° цСлочислСни Π·Π°Π³Π»Π°Π²Π½ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π° Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° конкатСнация: table inet t { map m1 { typeof udp length . @ih,32,32 : Π·Π½Π°ΠΌΠ΅Π½Π° Π·Π° ΠΏΡ€ΠΈΡΡŠΠ΄Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ = { 20-80 . 0x14 : ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌ, 1-10 . 0xa : ΠΊΠ°ΠΏΠΊΠ° } } Π²Π΅Ρ€ΠΈΠ³Π° c { Ρ‚ΠΈΠΏ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ ΠΊΡƒΠΊΠ° Π²Ρ…ΠΎΠ΄Π΅Π½ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ 0; спад Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π°; udp дълТина. @ih,32,32 vmap @m1 } }
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° TCP ΠΎΠΏΡ†ΠΈΠΈ (Ρ€Π°Π±ΠΎΡ‚ΠΈ само с Linux ядро ​​5.18+): tcp Ρ„Π»Π°Π³ΠΎΠ²Π΅ syn reset tcp опция sack-perm
  • По-Π±ΡŠΡ€Π·ΠΎ изпълнСниС Π½Π° Π²Π΅Ρ€ΠΈΠΆΠ½ΠΈ ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ("nft list chain xy").

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

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