ጤና ይስጥልኝ ሀብር ፣ ስሜ ኢሊያ እባላለሁ ፣ በኤክስነስ ውስጥ በመድረክ ቡድን ውስጥ እሰራለሁ። የምርት ልማት ቡድኖቻችን የሚጠቀሙባቸውን ዋና የመሠረተ ልማት ክፍሎች አዘጋጅተን እንተገብራለን።
በዚህ ጽሑፍ ውስጥ የተመሰጠረ SNI (ESNI) ቴክኖሎጂን በሕዝባዊ ድረ-ገጾች መሠረተ ልማት ውስጥ የመተግበር ልምዴን ማካፈል እፈልጋለሁ።

የዚህ ቴክኖሎጂ አጠቃቀም ከህዝባዊ ድረ-ገጽ ጋር ሲሰራ የደህንነትን ደረጃ ከፍ ያደርገዋል እና በኩባንያው የተቀበለውን የውስጥ ደህንነት መስፈርቶች ያከብራል.
በመጀመሪያ ደረጃ, ቴክኖሎጂው ደረጃውን ያልጠበቀ እና አሁንም በረቂቅ ውስጥ እንዳለ, ነገር ግን CloudFlare እና Mozilla ቀድሞውኑ ይደግፉታል (በ ). ይህ ለእንደዚህ አይነት ሙከራ አነሳሳን።
ጥቂት ንድፈ-ሐሳቦች
ESNI የTLS 1.3 ፕሮቶኮል ቅጥያ ነው SNI ምስጠራን በTLS መጨባበጥ "የደንበኛ ሄሎ" መልእክት ውስጥ። ደንበኛ ሄሎ ከESNI ድጋፍ ጋር ምን እንደሚመስል እነሆ (ከተለመደው SNI ESNI እናያለን)

ESNIን ለመጠቀም ሶስት አካላት ያስፈልጉዎታል፡-
- ዲ ኤን ኤስ;
- የደንበኛ ድጋፍ;
- የአገልጋይ ጎን ድጋፍ.
ዲ ኤን ኤስ
ሁለት የዲ ኤን ኤስ መዝገቦችን ማከል ያስፈልግዎታል - Aና TXT (የTXT መዝገቡ ደንበኛው SNIን ማመስጠር የሚችልበትን የህዝብ ቁልፍ ይዟል) - ከታች ይመልከቱ። በተጨማሪም, ድጋፍ ሊኖር ይገባል ዶኤች (ዲኤንኤስ በኤችቲቲፒኤስ ላይ) ምክንያቱም የሚገኙ ደንበኞች (ከዚህ በታች ይመልከቱ) የESNI ድጋፍን ያለ ዶኤች አያነቁም። ይህ አመክንዮአዊ ነው፣ ምክንያቱም ESNI የምንደርስበትን ሃብት ስም መመስጠርን ስለሚያመለክት፣ ማለትም፣ ዲ ኤን ኤስን በ UDP ማግኘት ምንም ትርጉም የለውም። ከዚህም በላይ አጠቃቀሙ በዚህ ሁኔታ ውስጥ የመሸጎጫ መመረዝ ጥቃቶችን ለመከላከል ይፈቅድልዎታል.
በአሁኑ ጊዜ ይገኛል። , ከነሱ መካክል:
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 ለ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 የTLS ግንኙነትን ለማቋረጥ፣ ያለ ESNI ደንበኞችን ለመደገፍ ነው። እንዲሁም ወደላይ ያለው የግንኙነት ፕሮቶኮል ኤችቲቲፒ ወይም HTTPS ከTLS ስሪት ከ 1.3 ያነሰ (የላይኛው ዥረት 1.3ን የማይደግፍ ከሆነ) ሊሆን ይችላል። ይህ እቅድ ከፍተኛውን ተለዋዋጭነት ይሰጣል.
የESNI ድጋፍን ተግባራዊ ማድረግ በ ላይ go የተበደርነው ከ . በመደበኛ ቤተ-መጽሐፍት ውስጥ ለውጦችን ስለሚያካትት አተገባበሩ ራሱ በጣም ቀላል እንዳልሆነ ወዲያውኑ ማስተዋል እፈልጋለሁ። crypto/tls እና ስለዚህ "ማጠፍ" ያስፈልገዋል. ጎርዖት ከመሰብሰብ በፊት.
የESNI ቁልፎችን ለመፍጠር ተጠቀምን። (እንዲሁም የCloudFlare የአእምሮ ልጅ)። እነዚህ ቁልፎች ለ SNI ምስጠራ/ዲክሪፕትነት ያገለግላሉ።
ግንባታውን በ go 1.13 በመጠቀም ሞክረነዋል Linux (Debian, አልፓይን) እና ማክኦኤስ።
ስለ ተግባራዊ ባህሪዎች ጥቂት ቃላት
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፣ 4 ጊባ የራም አስተናጋጆች፣ Linux)
- 130 ሜባ ሜም RSS

ለማነጻጸር፣ 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 vCPU፣ 4 ጊባ የራም አስተናጋጆችን ተጠቅመናል፣ Linux) እና እንዲያውም እምቅ የ RPS መጠን ከፍ ያለ ነው (በተጨማሪ ኃይለኛ ሀብቶች ላይ እስከ 2700 RPS የሚደርሱ አሃዞችን አግኝተናል)።
በማጠቃለያው አስተውያለሁ የESNI ቴክኖሎጂ በጣም ተስፋ ሰጪ ይመስላል። አሁንም ብዙ ክፍት ጥያቄዎች አሉ, ለምሳሌ የህዝብን የ ESNI ቁልፍ በዲ ኤን ኤስ ውስጥ የማከማቸት እና የ ESNI ቁልፎችን የማሽከርከር ጉዳዮች - እነዚህ ጉዳዮች በንቃት እየተወያዩ ናቸው, እና የቅርብ ጊዜው የ ESNI ረቂቅ ስሪት (በመጻፍ ጊዜ) ቀድሞውኑ ነው. .
ምንጭ: hab.com
