ИздаванС Π½Π° пакСтния Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ nftables 1.0.3

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

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

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

Основни нововъвСдСния:

  • Π’ set-ΡΠΏΠΈΡΡŠΡ†ΠΈΡ‚Π΅ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° съвпадСниС Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ интСрфСйси ΠΏΠΎ маска, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°Π΄Π°Π΄Π΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° символа Β«*Β»: table inet testifsets { set simple_wild { type ifname flags interval elements = { Β«abcdef*Β», Β«othernameΒ», Β«ppp0Β» } } chain v4icmp { type filter hook input priority 0; policy accept; iifname @simple_wild counter packets 0 bytes 0 iifname { Β«abcdef*Β», Β«eth0Β» } counter packets 0 bytes 0 } }
  • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ обСдиняванС Π½Π° прСсичащи сС Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ set-списъка ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°. ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π°, ΠΏΡ€ΠΈ Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° опцията Β«auto-mergeΒ», ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΡˆΠ΅ Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° обявяванС Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π°, Π° сСга сС задСйства ΠΈ ΠΏΡ€ΠΈ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ добавянС Π½Π° Π½ΠΎΠ²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°. НапримСр, Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° обявяванС ΡΠΏΠΈΡΡŠΠΊΡŠΡ‚ set y { flags interval auto-merge elements = { 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 } } Ρ‰Π΅ бъдС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½ Π² elements = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } Π° слСд Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π½ΠΎΠ²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ # nft add element ip x y { 1.2.3.0-1.2.4.255, 3.3.3.6 } Ρ‚ΠΎΠΉ Ρ‰Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ Π²ΠΈΠ΄Π° elements = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

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

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

    ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Β«nft -o -c -f ruleset.nftΒ» Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Β«ip saddrΒ» Π² map-списък: snat to 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 }

    По ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ raw-ΠΈΠ·Ρ€Π°Π·ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚ Π² map-ΡΠΏΠΈΡΡŠΡ†ΠΈ: # 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 goto nat_dns_this_5301 udp length 62-78 @th,160,128 0x0e31363436323733373931323934300e goto nat_dns_saturn_5301 udp length 62-78 @th,160,128 0x0e32393535373539353636383732310e goto nat_dns_saturn_5302 udp length 62-78 @th,160,128 0x0e38353439353637323038363633390e goto nat_dns_saturn_5303 drop } }

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

  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° raw-ΠΈΠ·Ρ€Π°Π·ΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° конкатСнация. НапримСр: # nft add rule x y ip saddr . @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } ΠΈΠ»ΠΈ table x { set y { typeof ip saddr . @ih,32,32 elements = { 1.1.1.1 . 0x14 } } }
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Ρ†Π΅Π»ΠΈ числови ΠΏΠΎΠ»Π΅Ρ‚Π° Π½Π° заглавията Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° конкатСнация: table inet t { map m1 { typeof udp length . @ih,32,32 : verdict flags interval elements = { 20-80 . 0x14 : accept, 1-10 . 0xa : drop } } chain c { type filter hook input priority 0; policy drop; udp length . @ih,32,32 vmap @m1 } }
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° TCP-ΠΎΠΏΡ†ΠΈΠΈ (Ρ€Π°Π±ΠΎΡ‚ΠΈ само ΠΏΡ€ΠΈ ядрото Linux 5.18+): tcp flags syn reset tcp option sack-perm
  • УскорСно Π΅ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π²Π΅Ρ€ΠΈΠ³ΠΈ (Β«nft list chain x yΒ»).

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster