سلام هابر، زما نوم الیا دی، زه په Exness کې د پلیټ فارم ټیم کې کار کوم. موږ د زیربنا اصلي برخې رامینځته کوو او پلي کوو چې زموږ د محصول پراختیا ټیمونه یې کاروي.
په دې مقاله کې، زه غواړم د عامه ویب پاڼو په زیربنا کې د کوډ شوي SNI (ESNI) ټیکنالوژۍ پلي کولو تجربه شریک کړم.

د دې ټیکنالوژۍ کارول به د امنیت کچه لوړه کړي کله چې د عامه ویب پا toې سره کار کوي او د شرکت لخوا منل شوي داخلي امنیت معیارونو سره مطابقت لري.
له هرڅه دمخه ، زه غواړم په ګوته کړم چې ټیکنالوژي معیاري نه ده او لاهم په مسوده کې ده ، مګر CloudFlare او Mozilla دمخه یې ملاتړ کوي (په ). دا موږ د داسې تجربې لپاره هڅول.
یو څه تیوری
ESNI د TLS 1.3 پروتوکول ته تمدید دی چې د TLS لاسوند "د پیرودونکي هیلو" پیغام کې د SNI کوډ کولو ته اجازه ورکوي. دلته هغه څه دي چې د پیرودونکي هیلو د ESNI ملاتړ سره څه ښکاري (د معمول SNI پرځای چې موږ ESNI ګورو):

د ESNI کارولو لپاره، تاسو درې برخو ته اړتیا لرئ:
- DNS;
- د پیرودونکي ملاتړ؛
- د سرور اړخ ملاتړ.
ډی
تاسو اړتیا لرئ دوه DNS ریکارډونه اضافه کړئ - Aاو ټي ټي ټي (د TXT ریکارډ عامه کیلي لري چې پیرودونکی کولی شي SNI کوډ کړي) - لاندې وګورئ. سربیره پردې، باید ملاتړ شتون ولري د دفاع وزارت (DNS په HTTPS کې) ځکه چې موجود پیرودونکي (لاندې وګورئ) د DoH پرته د ESNI ملاتړ نه فعالوي. دا منطقي ده، ځکه چې ESNI د سرچینې نوم کوډ کول معنی لري چې موږ ورته لاسرسی لرو، دا د UDP له لارې DNS ته لاسرسی هیڅ معنی نلري. سربیره پردې، کارول تاسو ته اجازه درکوي په دې سناریو کې د کیچ زهرجن بریدونو پروړاندې ساتنه وکړئ.
اوس مهال شتون لري ، د هغو په منځ کې:
CloudFlare (زما براوزر چیک کړئ → کوډ شوی SNI → نور زده کړئ) چې د دوی سرورونه دمخه د ESNI ملاتړ کوي ، دا د DNS کې د CloudFlare سرورونو لپاره موږ لږترلږه دوه ریکارډونه لرو - A او TXT. په لاندې مثال کې موږ د ګوګل DNS (په 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"
}
]
}
ټي ټي ټي ریکارډ، غوښتنه د ټیمپلیټ له مخې رامینځته کیږي _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."
}
نو، د DNS لید څخه، موږ باید DoH وکاروو (په غوره توګه د DNSSEC سره) او دوه ننوتل اضافه کړو.
د پیریدونکو مرسته
که موږ د براوزرونو په اړه خبرې کوو، نو اوس مهال . دلته په فایرفاکس کې د ESNI او DoH ملاتړ فعالولو څرنګوالي لارښوونې دي. وروسته له دې چې براوزر تنظیم شو، موږ باید داسې یو څه وګورو:

د براوزر چک کولو لپاره.
البته، TLS 1.3 باید د ESNI مالتړ لپاره وکارول شي، ځکه چې ESNI د TLS 1.3 تمدید دی.
د ESNI ملاتړ سره د شالید ازموینې هدف لپاره ، موږ پیرودونکي پلي کړل go، مګر په دې اړه نور وروسته.
د سرور اړخ ملاتړ
اوس مهال، ESNI د ویب سرورونو لخوا نه ملاتړ کیږي لکه nginx/apache، etc.
له همدې امله، موږ پریکړه وکړه چې خپل مخکینۍ برخه (ESNI ریورس پراکسي) جوړه کړو، کوم چې به د ESNI او پراکسي HTTP(S) ټرافيک سره د TLS 1.3 پای ته رسولو ملاتړ وکړي، کوم چې د ESNI ملاتړ نه کوي. دا ټیکنالوژي ته اجازه ورکوي چې دمخه موجود زیربنا کې وکارول شي ، پرته له دې چې اصلي برخې بدل کړي - دا د اوسني ویب سرورونو کارول چې د ESNI ملاتړ نه کوي.
د وضاحت لپاره، دلته یو انځور دی:

زه یادونه کوم چې پراکسي د ESNI پرته د TLS اتصال پای ته رسولو وړتیا سره ډیزاین شوی ترڅو د ESNI پرته د پیرودونکو ملاتړ وکړي. همچنان ، د اپسټریم سره د مخابراتو پروتوکول یا هم HTTP یا HTTPS کیدی شي د TLS نسخه له 1.3 څخه ټیټ وي (که چیرې پورته جریان د 1.3 ملاتړ ونه کړي). دا سکیم اعظمي انعطاف ورکوي.
د ESNI ملاتړ پلي کول go موږ ترې پور اخیستی . زه غواړم سمدلاسه یادونه وکړم چې پلي کول پخپله خورا غیر معمولي دي ، ځکه چې پدې کې په معیاري کتابتون کې بدلونونه شامل دي crypto/tls او له همدې امله "پیچنګ" ته اړتیا لري ګوروټ تر غونډې مخکې
د ESNI کیلي جوړولو لپاره موږ کارولي (هم د CloudFlare دماغ جوړ شوی). دا کیلي د SNI کوډ کولو / ډیکریپشن لپاره کارول کیږي.
موږ د go 1.13 on په کارولو سره جوړونه ازموینه وکړه Linux (Debian، الپائن) او میک او ایس.
د عملیاتي ځانګړتیاوو په اړه یو څو خبرې
د ESNI ریورس پراکسي د پرومیټیوس فارمیټ کې میټریکونه وړاندې کوي، لکه rps، د پورته جریان ځنډ او غبرګون کوډونه، ناکام/بریالي TLS لاسونه او د 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 ریورس پراکسي په کارولو سره د سکیم پرتله کولو لپاره خالص کیفیت لرونکي بار ازموینه ترسره کړه. موږ په منځنیو برخو کې د "مداخلې" د له منځه وړلو لپاره په سیمه ایزه توګه ټرافیک "راکړ".
نو، د ESNI مالتړ او د HTTP څخه د پورته کولو پراکسي کولو سره، موږ د یوې بیلګې څخه شاوخوا ~ 550 rps ترلاسه کړل، د ESNI ریورس پراکسي اوسط CPU/RAM مصرف سره:
- ۸۰٪ د CPU کارول (۴ vCPU، ۴ GB RAM کوربه، Linux)
- 130 MB میم آر ایس ایس

د پرتله کولو لپاره، د TLS (HTTP پروتوکول) پای ته رسیدو پرته د ورته نینګکس اپ سټریم لپاره RPS ~ 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 GB RAM کوربه کارولي، Linux)، او په حقیقت کې احتمالي RPS لوړ دی (موږ په ډیرو پیاوړو سرچینو کې تر 2700 RPS پورې ارقام ترلاسه کړل).
په پایله کې، زه یادونه کوم چې د ESNI ټیکنالوژي خورا امید لرونکې ښکاري. لاهم ډیری خلاصې پوښتنې شتون لري ، د مثال په توګه ، په DNS کې د عامه ESNI کیلي ذخیره کولو مسلې او د ESNI کیلي ګرځول - دا مسلې په فعاله توګه بحث کیږي ، او د ESNI مسودې وروستۍ نسخه (د لیکلو په وخت کې) لا دمخه ده. .
سرچینه: www.habr.com
