የህዝብ ድህረ ገጽዎን በESNI እንዴት እንደሚጠብቁ

ጤና ይስጥልኝ ሀብር ፣ ስሜ ኢሊያ እባላለሁ ፣ በኤክስነስ ውስጥ በመድረክ ቡድን ውስጥ እሰራለሁ። የምርት ልማት ቡድኖቻችን የሚጠቀሙባቸውን ዋና የመሠረተ ልማት ክፍሎች አዘጋጅተን እንተገብራለን።

በዚህ ጽሑፍ ውስጥ የተመሰጠረ SNI (ESNI) ቴክኖሎጂን በሕዝባዊ ድረ-ገጾች መሠረተ ልማት ውስጥ የመተግበር ልምዴን ማካፈል እፈልጋለሁ።

የህዝብ ድህረ ገጽዎን በESNI እንዴት እንደሚጠብቁ

የዚህ ቴክኖሎጂ አጠቃቀም ከህዝባዊ ድረ-ገጽ ጋር ሲሰራ የደህንነትን ደረጃ ከፍ ያደርገዋል እና በኩባንያው የተቀበለውን የውስጥ ደህንነት መስፈርቶች ያከብራል.

በመጀመሪያ ደረጃ, ቴክኖሎጂው ደረጃውን ያልጠበቀ እና አሁንም በረቂቅ ውስጥ እንዳለ, ነገር ግን CloudFlare እና Mozilla ቀድሞውኑ ይደግፉታል (በ ረቂቅ01). ይህ ለእንደዚህ አይነት ሙከራ አነሳሳን።

ጥቂት ንድፈ-ሐሳቦች

ESNI የTLS 1.3 ፕሮቶኮል ቅጥያ ነው SNI ምስጠራን በTLS መጨባበጥ "የደንበኛ ሄሎ" መልእክት ውስጥ። ደንበኛ ሄሎ ከESNI ድጋፍ ጋር ምን እንደሚመስል እነሆ (ከተለመደው SNI ESNI እናያለን)

የህዝብ ድህረ ገጽዎን በESNI እንዴት እንደሚጠብቁ

 ESNIን ለመጠቀም ሶስት አካላት ያስፈልጉዎታል፡-

  • ዲ ኤን ኤስ; 
  • የደንበኛ ድጋፍ;
  • የአገልጋይ ጎን ድጋፍ.

ዲ ኤን ኤስ

ሁለት የዲ ኤን ኤስ መዝገቦችን ማከል ያስፈልግዎታል - ATXT (የTXT መዝገቡ ደንበኛው SNIን ማመስጠር የሚችልበትን የህዝብ ቁልፍ ይዟል) - ከታች ይመልከቱ። በተጨማሪም, ድጋፍ ሊኖር ይገባል ዶኤች (ዲኤንኤስ በኤችቲቲፒኤስ ላይ) ምክንያቱም የሚገኙ ደንበኞች (ከዚህ በታች ይመልከቱ) የESNI ድጋፍን ያለ ዶኤች አያነቁም። ይህ አመክንዮአዊ ነው፣ ምክንያቱም ESNI የምንደርስበትን ሃብት ስም መመስጠርን ስለሚያመለክት፣ ማለትም፣ ዲ ኤን ኤስን በ UDP ማግኘት ምንም ትርጉም የለውም። ከዚህም በላይ አጠቃቀሙ DNSSEC በዚህ ሁኔታ ውስጥ የመሸጎጫ መመረዝ ጥቃቶችን ለመከላከል ይፈቅድልዎታል.

በአሁኑ ጊዜ ይገኛል። በርካታ የዶኤች አቅራቢዎች, ከነሱ መካክል:

CloudFlare ይላል (የእኔን አሳሽ ይመልከቱ → ኢንክሪፕት የተደረገ SNI → የበለጠ ይወቁ) ሰርቨሮቻቸው ESNIን አስቀድመው ይደግፋሉ፣ ማለትም፣ በዲ ኤን ኤስ ውስጥ ላሉ CloudFlare አገልጋዮች እኛ ቢያንስ ሁለት መዝገቦች አሉን - A እና TXT። ከታች ባለው ምሳሌ ጎግል ዲ ኤን ኤስ (በ HTTPS ላይ) እንጠይቃለን፡ 

А መግቢያ፡-

curl 'https://dns.google.com/resolve?name=www.cloudflare.com&type=A' 
-s -H 'accept: application/dns+json'
{
  "Status": 0,
  "TC": false,
  "RD": true,
  "RA": true,
  "AD": true,
  "CD": false,
  "Question": [
    {
      "name": "www.cloudflare.com.",
      "type": 1
    }
  ],
  "Answer": [
    {
      "name": "www.cloudflare.com.",
      "type": 1,
      "TTL": 257,
      "data": "104.17.210.9"
    },
    {
      "name": "www.cloudflare.com.",
      "type": 1,
      "TTL": 257,
      "data": "104.17.209.9"
    }
  ]
}

TXT መዝገብ፣ ጥያቄ በአብነት መሰረት ይፈጠራል። _esni.FQDN:

curl 'https://dns.google.com/resolve?name=_esni.www.cloudflare.com&type=TXT' 
-s -H 'accept: application/dns+json'
{
  "Status": 0,
  "TC": false,
  "RD": true,
  "RA": true,
  "AD": true,
  "CD": false,
  "Question": [
    {
    "name": "_esni.www.cloudflare.com.",
    "type": 16
    }
  ],
  "Answer": [
    {
    "name": "_esni.www.cloudflare.com.",
    "type": 16,
    "TTL": 1799,
    "data": ""/wEUgUKlACQAHQAg9SiAYQ9aUseUZr47HYHvF5jkt3aZ5802eAMJPhRz1QgAAhMBAQQAAAAAXtUmAAAAAABe3Q8AAAA=""
    }
  ],
  "Comment": "Response from 2400:cb00:2049:1::a29f:209."
}

ስለዚህ፣ ከዲኤንኤስ አንፃር፣ ዶኤች (በተለይ ከዲኤንኤስኤስኢሲ ጋር) ልንጠቀም እና ሁለት ግቤቶችን ማከል አለብን። 

የደንበኛ ድጋፍ

ስለ አሳሾች እየተነጋገርን ከሆነ, በዚህ ጊዜ ድጋፍ የሚተገበረው በፋየርፎክስ ውስጥ ብቻ ነው።. ይህ ነው በፋየርፎክስ ውስጥ የESNI እና DoH ድጋፍን እንዴት ማንቃት እንደሚችሉ መመሪያዎች እዚህ አሉ። አሳሹ ከተዋቀረ በኋላ እንደዚህ ያለ ነገር ማየት አለብን-

የህዝብ ድህረ ገጽዎን በESNI እንዴት እንደሚጠብቁ

ማያያዣ አሳሹን ለማጣራት.

እርግጥ ነው፣ ESNI ለTLS 1.3 ማራዘሚያ ስለሆነ TLS 1.3 ESNIን ለመደገፍ ጥቅም ላይ መዋል አለበት።

የጀርባውን በESNI ድጋፍ ለመፈተሽ ዓላማ ደንበኛውን ተግባራዊ አድርገናል። go, ነገር ግን በኋላ ላይ ተጨማሪ.

የአገልጋይ ጎን ድጋፍ

በአሁኑ ጊዜ፣ ESNI እንደ nginx/apache፣ ወዘተ ባሉ የድር አገልጋዮች አይደገፍም፣ ከTLS ጋር በ OpenSSL/BoringSSL ስለሚሰሩ፣ ESNIን በይፋ አይደግፉም።

ስለዚህ፣ TLS 1.3 መቋረጥን በESNI እና በተኪ HTTP(S) ወደ ላይኛው ዥረት የሚወስድ ትራፊክን የሚደግፍ የራሳችንን የፊት-መጨረሻ አካል (ESNI reverse proxy) ለመፍጠር ወስነናል። ይህ ቴክኖሎጂው ቀደም ሲል በነበረው መሠረተ ልማት ውስጥ ጥቅም ላይ እንዲውል ያስችለዋል, ዋና ዋና አካላትን ሳይቀይሩ - ማለትም ESNIን የማይደግፉ የአሁን የድር አገልጋዮችን መጠቀም. 

ግልጽ ለማድረግ፣ ሥዕላዊ መግለጫው እዚህ አለ፡-

የህዝብ ድህረ ገጽዎን በESNI እንዴት እንደሚጠብቁ

ፕሮክሲው የተነደፈው ያለ ESNI የTLS ግንኙነትን ለማቋረጥ፣ ያለ ESNI ደንበኞችን ለመደገፍ ነው። እንዲሁም ወደላይ ያለው የግንኙነት ፕሮቶኮል ኤችቲቲፒ ወይም HTTPS ከTLS ስሪት ከ 1.3 ያነሰ (የላይኛው ዥረት 1.3ን የማይደግፍ ከሆነ) ሊሆን ይችላል። ይህ እቅድ ከፍተኛውን ተለዋዋጭነት ይሰጣል.

የESNI ድጋፍን ተግባራዊ ማድረግ በ ላይ go የተበደርነው ከ CloudFlare. በመደበኛ ቤተ-መጽሐፍት ውስጥ ለውጦችን ስለሚያካትት አተገባበሩ ራሱ በጣም ቀላል እንዳልሆነ ወዲያውኑ ማስተዋል እፈልጋለሁ። crypto/tls እና ስለዚህ "ማጠፍ" ያስፈልገዋል. ጎርዖት ከመሰብሰብ በፊት.

የESNI ቁልፎችን ለመፍጠር ተጠቀምን። esnitool (እንዲሁም የCloudFlare የአእምሮ ልጅ)። እነዚህ ቁልፎች ለ SNI ምስጠራ/ዲክሪፕትነት ያገለግላሉ።
በሊኑክስ (ዴቢያን፣ አልፓይን) እና ማክኦኤስ ላይ go 1.13ን በመጠቀም ግንባታውን ሞክረናል። 

ስለ ተግባራዊ ባህሪዎች ጥቂት ቃላት

ESNI reverse proxy በPrometheus ፎርማት እንደ ሪፕስ፣ የላይ ዥረት መዘግየት እና ምላሽ ኮዶች፣ ያልተሳካ/የተሳካ የቲኤልኤስ መጨባበጥ እና TLS የመጨባበጥ ጊዜ ያሉ መለኪያዎችን ያቀርባል። በመጀመሪያ እይታ፣ ተኪው ትራፊክን እንዴት እንደሚይዝ ለመገምገም ይህ በቂ ይመስላል። 

ከመጠቀምዎ በፊት የጭነት ሙከራን አደረግን. ውጤቶች ከዚህ በታች:

wrk -t50 -c1000 -d360s 'https://esni-rev-proxy.npw:443' --timeout 15s
Running 6m test @ https://esni-rev-proxy.npw:443
  50 threads and 1000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.77s     1.21s    7.20s    65.43%
    Req/Sec    13.78      8.84   140.00     83.70%
  206357 requests in 6.00m, 6.08GB read
Requests/sec:    573.07
Transfer/sec:     17.28MB 

ESNI reverse proxy እና ያለ በመጠቀም እቅዱን ለማነፃፀር ሙሉ ለሙሉ ጥራት ያለው የጭነት ሙከራን አድርገናል። በመካከለኛ አካላት ውስጥ "ጣልቃ ገብነትን" ለማስወገድ በአካባቢው ትራፊክ "አፈስን" ነበር.

ስለዚህ፣ በESNI ድጋፍ እና ከኤችቲቲፒ ወደላይ ወደላይ በመወከል፣ ከአንድ ምሳሌ ወደ ~ 550 rps አግኝተናል፣ በአማካይ የሲፒዩ/ራም የESNI የተገላቢጦሽ ፕሮክሲ፡

  • 80% ሲፒዩ አጠቃቀም (4 vCPU፣ 4GB RAM hosts፣ Linux)
  • 130 ሜባ ሜም RSS

የህዝብ ድህረ ገጽዎን በESNI እንዴት እንደሚጠብቁ

ለማነጻጸር፣ RPS ለተመሳሳይ nginx ወደላይ ያለ TLS (HTTP ፕሮቶኮል) መቋረጥ ~ 1100 ነው፡

wrk -t50 -c1000 -d360s 'http://lb.npw:80' –-timeout 15s
Running 6m test @ http://lb.npw:80
  50 threads and 1000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.11s     2.30s   15.00s    90.94%
    Req/Sec    23.25     13.55   282.00     79.25%
  393093 requests in 6.00m, 11.35GB read
  Socket errors: connect 0, read 0, write 0, timeout 9555
  Non-2xx or 3xx responses: 8111
Requests/sec:   1091.62
Transfer/sec:     32.27MB 

የጊዜ ማብቂያዎች መገኘት የሀብት እጥረት መኖሩን ያሳያል (4 vCPUs, 4GB RAM hosts, Linux) ተጠቀምን, እና በእውነቱ RPS እምቅ ከፍተኛ ነው (በተጨማሪ ኃይለኛ ሀብቶች እስከ 2700 RPS አሃዞችን ተቀብለናል).

በማጠቃለያው አስተውያለሁ የESNI ቴክኖሎጂ በጣም ተስፋ ሰጪ ይመስላል። አሁንም ብዙ ክፍት ጥያቄዎች አሉ, ለምሳሌ የህዝብን የ ESNI ቁልፍ በዲ ኤን ኤስ ውስጥ የማከማቸት እና የ ESNI ቁልፎችን የማሽከርከር ጉዳዮች - እነዚህ ጉዳዮች በንቃት እየተወያዩ ናቸው, እና የቅርብ ጊዜው የ ESNI ረቂቅ ስሪት (በመጻፍ ጊዜ) ቀድሞውኑ ነው. 7.

ምንጭ: hab.com

አስተያየት ያክሉ