ستاسو د عامه ویب پاڼې د ESNI سره څنګه ساتنه وکړئ

سلام هابر، زما نوم الیا دی، زه په Exness کې د پلیټ فارم ټیم کې کار کوم. موږ د زیربنا اصلي برخې رامینځته کوو او پلي کوو چې زموږ د محصول پراختیا ټیمونه یې کاروي.

په دې مقاله کې، زه غواړم د عامه ویب پاڼو په زیربنا کې د کوډ شوي SNI (ESNI) ټیکنالوژۍ پلي کولو تجربه شریک کړم.

ستاسو د عامه ویب پاڼې د ESNI سره څنګه ساتنه وکړئ

د دې ټیکنالوژۍ کارول به د امنیت کچه ​​لوړه کړي کله چې د عامه ویب پا toې سره کار کوي او د شرکت لخوا منل شوي داخلي امنیت معیارونو سره مطابقت لري.

له هرڅه دمخه ، زه غواړم په ګوته کړم چې ټیکنالوژي معیاري نه ده او لاهم په مسوده کې ده ، مګر CloudFlare او Mozilla دمخه یې ملاتړ کوي (په مسوده 01). دا موږ د داسې تجربې لپاره هڅول.

یو څه تیوری

ESNI د TLS 1.3 پروتوکول ته تمدید دی چې د TLS لاسوند "د پیرودونکي هیلو" پیغام کې د SNI کوډ کولو ته اجازه ورکوي. دلته هغه څه دي چې د پیرودونکي هیلو د ESNI ملاتړ سره څه ښکاري (د معمول SNI پرځای چې موږ ESNI ګورو):

ستاسو د عامه ویب پاڼې د ESNI سره څنګه ساتنه وکړئ

 د ESNI کارولو لپاره، تاسو درې برخو ته اړتیا لرئ:

  • DNS; 
  • د پیرودونکي ملاتړ؛
  • د سرور اړخ ملاتړ.

ډی

تاسو اړتیا لرئ دوه DNS ریکارډونه اضافه کړئ - Aاو ټي ټي ټي (د TXT ریکارډ عامه کیلي لري چې پیرودونکی کولی شي SNI کوډ کړي) - لاندې وګورئ. سربیره پردې، باید ملاتړ شتون ولري د دفاع وزارت (DNS په HTTPS کې) ځکه چې موجود پیرودونکي (لاندې وګورئ) د DoH پرته د ESNI ملاتړ نه فعالوي. دا منطقي ده، ځکه چې ESNI د سرچینې نوم کوډ کول معنی لري چې موږ ورته لاسرسی لرو، دا د UDP له لارې DNS ته لاسرسی هیڅ معنی نلري. سربیره پردې، کارول DNSSEC تاسو ته اجازه درکوي په دې سناریو کې د کیچ زهرجن بریدونو پروړاندې ساتنه وکړئ.

اوس مهال شتون لري د DoH څو چمتو کونکي، د هغو په منځ کې:

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 ملاتړ فعالولو څرنګوالي لارښوونې دي. وروسته له دې چې براوزر تنظیم شو، موږ باید داسې یو څه وګورو:

ستاسو د عامه ویب پاڼې د ESNI سره څنګه ساتنه وکړئ

مخونه د براوزر چک کولو لپاره.

البته، TLS 1.3 باید د ESNI مالتړ لپاره وکارول شي، ځکه چې ESNI د TLS 1.3 تمدید دی.

د ESNI ملاتړ سره د شالید ازموینې هدف لپاره ، موږ پیرودونکي پلي کړل go، مګر په دې اړه نور وروسته.

د سرور اړخ ملاتړ

اوس مهال، ESNI د ویب سرورونو لخوا نه ملاتړ کیږي لکه nginx/apache، etc.

له همدې امله، موږ پریکړه وکړه چې خپل مخکینۍ برخه (ESNI ریورس پراکسي) جوړه کړو، کوم چې به د ESNI او پراکسي HTTP(S) ټرافيک سره د TLS 1.3 پای ته رسولو ملاتړ وکړي، کوم چې د ESNI ملاتړ نه کوي. دا ټیکنالوژي ته اجازه ورکوي چې دمخه موجود زیربنا کې وکارول شي ، پرته له دې چې اصلي برخې بدل کړي - دا د اوسني ویب سرورونو کارول چې د ESNI ملاتړ نه کوي. 

د وضاحت لپاره، دلته یو انځور دی:

ستاسو د عامه ویب پاڼې د ESNI سره څنګه ساتنه وکړئ

زه یادونه کوم چې پراکسي د ESNI پرته د TLS اتصال پای ته رسولو وړتیا سره ډیزاین شوی ترڅو د ESNI پرته د پیرودونکو ملاتړ وکړي. همچنان ، د اپسټریم سره د مخابراتو پروتوکول یا هم HTTP یا HTTPS کیدی شي د TLS نسخه له 1.3 څخه ټیټ وي (که چیرې پورته جریان د 1.3 ملاتړ ونه کړي). دا سکیم اعظمي انعطاف ورکوي.

د ESNI ملاتړ پلي کول go موږ ترې پور اخیستی CloudFlare. زه غواړم سمدلاسه یادونه وکړم چې پلي کول پخپله خورا غیر معمولي دي ، ځکه چې پدې کې په معیاري کتابتون کې بدلونونه شامل دي crypto/tls او له همدې امله "پیچنګ" ته اړتیا لري ګوروټ تر غونډې مخکې

د ESNI کیلي جوړولو لپاره موږ کارولي esnitool (هم د CloudFlare دماغ جوړ شوی). دا کیلي د SNI کوډ کولو / ډیکریپشن لپاره کارول کیږي.
موږ په لینوکس (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 میم آر ایس ایس

ستاسو د عامه ویب پاڼې د ESNI سره څنګه ساتنه وکړئ

د پرتله کولو لپاره، د 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 مسودې وروستۍ نسخه (د لیکلو په وخت کې) لا دمخه ده. 7.

سرچینه: www.habr.com

Add a comment