ጤና ይስጥልኝ ሀብር ፣ ስሜ ኢሊያ እባላለሁ ፣ በኤክስነስ ውስጥ በመድረክ ቡድን ውስጥ እሰራለሁ። የምርት ልማት ቡድኖቻችን የሚጠቀሙባቸውን ዋና የመሠረተ ልማት ክፍሎች አዘጋጅተን እንተገብራለን።
በዚህ ጽሑፍ ውስጥ የተመሰጠረ SNI (ESNI) ቴክኖሎጂን በሕዝባዊ ድረ-ገጾች መሠረተ ልማት ውስጥ የመተግበር ልምዴን ማካፈል እፈልጋለሁ።
የዚህ ቴክኖሎጂ አጠቃቀም ከህዝባዊ ድረ-ገጽ ጋር ሲሰራ የደህንነትን ደረጃ ከፍ ያደርገዋል እና በኩባንያው የተቀበለውን የውስጥ ደህንነት መስፈርቶች ያከብራል.
በመጀመሪያ ደረጃ, ቴክኖሎጂው ደረጃውን ያልጠበቀ እና አሁንም በረቂቅ ውስጥ እንዳለ, ነገር ግን CloudFlare እና Mozilla ቀድሞውኑ ይደግፉታል (በ
ጥቂት ንድፈ-ሐሳቦች
ESNI የTLS 1.3 ፕሮቶኮል ቅጥያ ነው SNI ምስጠራን በTLS መጨባበጥ "የደንበኛ ሄሎ" መልእክት ውስጥ። ደንበኛ ሄሎ ከESNI ድጋፍ ጋር ምን እንደሚመስል እነሆ (ከተለመደው SNI ESNI እናያለን)
ESNIን ለመጠቀም ሶስት አካላት ያስፈልጉዎታል፡-
- ዲ ኤን ኤስ;
- የደንበኛ ድጋፍ;
- የአገልጋይ ጎን ድጋፍ.
ዲ ኤን ኤስ
ሁለት የዲ ኤን ኤስ መዝገቦችን ማከል ያስፈልግዎታል - Aና TXT (የTXT መዝገቡ ደንበኛው SNIን ማመስጠር የሚችልበትን የህዝብ ቁልፍ ይዟል) - ከታች ይመልከቱ። በተጨማሪም, ድጋፍ ሊኖር ይገባል ዶኤች (ዲኤንኤስ በኤችቲቲፒኤስ ላይ) ምክንያቱም የሚገኙ ደንበኞች (ከዚህ በታች ይመልከቱ) የESNI ድጋፍን ያለ ዶኤች አያነቁም። ይህ አመክንዮአዊ ነው፣ ምክንያቱም ESNI የምንደርስበትን ሃብት ስም መመስጠርን ስለሚያመለክት፣ ማለትም፣ ዲ ኤን ኤስን በ UDP ማግኘት ምንም ትርጉም የለውም። ከዚህም በላይ አጠቃቀሙ
በአሁኑ ጊዜ ይገኛል።
CloudFlare
А መግቢያ፡-
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 ለ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 የተበደርነው ከ
የESNI ቁልፎችን ለመፍጠር ተጠቀምን።
በሊኑክስ (ዴቢያን፣ አልፓይን) እና ማክኦኤስ ላይ 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
ለማነጻጸር፣ 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 ረቂቅ ስሪት (በመጻፍ ጊዜ) ቀድሞውኑ ነው.
ምንጭ: hab.com