سلام هابر، زما نوم الیا دی، زه په 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
А ننوتل:
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 سره) او دوه ننوتل اضافه کړو.
د پیریدونکو مرسته
که موږ د براوزرونو په اړه خبرې کوو، نو اوس مهال
البته، 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 موږ ترې پور اخیستی
د ESNI کیلي جوړولو لپاره موږ کارولي
موږ په لینوکس (Debian، Alpine) او MacOS کې د Go 1.13 په کارولو سره جوړونه ازموینه وکړه.
د عملیاتي ځانګړتیاوو په اړه یو څو خبرې
د 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 مصرف سره:
- 80٪ د CPU کارول (4 vCPU، 4 GB RAM کوربه، لینکس)
- 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 vCPUs، 4 GB RAM کوربه، لینکس کارولي)، او په حقیقت کې احتمالي RPS لوړ دی (موږ په ډیرو پیاوړو سرچینو کې تر 2700 RPS پورې ارقام ترلاسه کړل).
په پایله کې، زه یادونه کوم چې د ESNI ټیکنالوژي خورا امید لرونکې ښکاري. لاهم ډیری خلاصې پوښتنې شتون لري ، د مثال په توګه ، په DNS کې د عامه ESNI کیلي ذخیره کولو مسلې او د ESNI کیلي ګرځول - دا مسلې په فعاله توګه بحث کیږي ، او د ESNI مسودې وروستۍ نسخه (د لیکلو په وخت کې) لا دمخه ده.
سرچینه: www.habr.com