ESNI سان توهان جي عوامي ويب سائيٽ جي حفاظت ڪيئن ڪجي

هيلو حبر، منهنجو نالو Ilya آهي، مان Exness تي پليٽ فارم ٽيم ۾ ڪم ڪريان ٿو. اسان بنيادي بنيادي ڍانچي جي اجزاء کي ترقي ۽ لاڳو ڪريون ٿا جيڪي اسان جي پروڊڪٽ ڊولپمينٽ ٽيمون استعمال ڪن ٿيون.

هن آرٽيڪل ۾، آئون عوامي ويب سائيٽن جي انفراسٽرڪچر ۾ اينڪرپٽ ٿيل SNI (ESNI) ٽيڪنالاجي کي لاڳو ڪرڻ جو منهنجو تجربو حصيداري ڪرڻ چاهيندس.

ESNI سان توهان جي عوامي ويب سائيٽ جي حفاظت ڪيئن ڪجي

هن ٽيڪنالاجي جو استعمال سيڪيورٽي جي سطح کي وڌائيندو جڏهن عوامي ويب سائيٽ سان ڪم ڪندي ۽ ڪمپني پاران اختيار ڪيل اندروني سيڪيورٽي معيارن جي تعميل ڪندي.

سڀ کان پهريان، مان اهو ٻڌائڻ چاهيان ٿو ته ٽيڪنالاجي معياري نه آهي ۽ اڃا به مسودي ۾ آهي، پر CloudFlare ۽ Mozilla اڳ ۾ ئي ان جي حمايت ڪن ٿا (ان ۾ مسودو 01). اهو اسان کي اهڙي تجربي لاءِ اتساهيو.

نظريي جو ھڪڙو

اي ايس اين آئي TLS 1.3 پروٽوڪول جي توسيع آهي جيڪا TLS هينڊ شيڪ ”ڪلائنٽ هيلو“ پيغام ۾ SNI انڪرپشن جي اجازت ڏئي ٿي. هتي اهو آهي ته ڪلائنٽ هيلو ESNI سپورٽ سان ڪهڙو نظر اچي ٿو (عام SNI جي بدران اسان ESNI ڏسون ٿا):

ESNI سان توهان جي عوامي ويب سائيٽ جي حفاظت ڪيئن ڪجي

 ESNI استعمال ڪرڻ لاء، توھان کي ٽن حصن جي ضرورت آھي:

  • DNS؛ 
  • ڪسٽمر حمايت؛
  • سرور سائڊ سپورٽ.

DNS

توهان کي ٻه DNS رڪارڊ شامل ڪرڻ جي ضرورت آهي - A۽ TXT (TXT رڪارڊ ۾ عوامي ڪيئي شامل آهي جنهن سان ڪلائنٽ SNI انڪرپٽ ڪري سگهي ٿو) - هيٺ ڏسو. ان کان سواء، اتي جي حمايت هجڻ ضروري آهي ڊي ايڇ (HTTPS مٿان DNS) ڇاڪاڻ ته دستياب ڪلائنٽ (هيٺ ڏسو) ESNI سپورٽ کي DoH کان سواءِ فعال نٿا ڪن. اهو منطقي آهي، ڇاڪاڻ ته ESNI مطلب ان وسيلا جي نالي جي انڪرپشن کي جنهن تائين اسان رسائي ڪري رهيا آهيون، اهو آهي، UDP تي DNS تائين رسائي ڪرڻ جو ڪو به مطلب ناهي. ان کان سواء، استعمال DNSSEC توهان کي هن منظر ۾ ڪيش زهر جي حملن جي خلاف حفاظت ڪرڻ جي اجازت ڏئي ٿي.

في الحال دستياب ڪيترائي DoH فراهم ڪندڙانهن مان:

CloudFlare اعلان ڪري ٿو (Check My Browser → Encrypted SNI → More Learn) ته انهن جا سرور اڳ ۾ ئي ESNI کي سپورٽ ڪن ٿا، يعني DNS ۾ CloudFlare سرورز لاءِ اسان وٽ گهٽ ۾ گهٽ ٻه رڪارڊ آهن - A ۽ TXT. هيٺ ڏنل مثال ۾ اسان Google 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"
    }
  ]
}

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."
}

تنهن ڪري، هڪ DNS نقطه نظر کان، اسان کي استعمال ڪرڻ گهرجي DoH (ترجيح طور تي DNSSEC سان) ۽ ٻه داخلا شامل ڪريو. 

ڪسٽمر حمايت

جيڪڏهن اسان برائوزر جي باري ۾ ڳالهائي رهيا آهيون، پوء هن وقت سپورٽ صرف فائر فاکس ۾ لاڳو ٿئي ٿي. اهو آهي ھتي ھدايتون آھن فائر فاڪس ۾ ESNI ۽ DoH سپورٽ کي ڪيئن چالو ڪجي. برائوزر کي ترتيب ڏيڻ کان پوء، اسان کي ڪجهه ڏسڻ گهرجي:

ESNI سان توهان جي عوامي ويب سائيٽ جي حفاظت ڪيئن ڪجي

لنڪ برائوزر چيڪ ڪرڻ لاء.

يقينن، TLS 1.3 استعمال ڪيو وڃي ESNI کي سپورٽ ڪرڻ لاءِ، ڇو ته ESNI TLS 1.3 جي توسيع آهي.

ESNI سپورٽ سان پس منظر کي جانچڻ جي مقصد لاءِ، اسان ڪلائنٽ تي عمل ڪيو go، پر انهي تي وڌيڪ بعد ۾.

سرور سائڊ سپورٽ

في الحال، ESNI ويب سرورز جهڙوڪ nginx/apache، وغيره جي مدد نه ڪئي وئي آهي، ڇاڪاڻ ته اهي OpenSSL/BoringSSL ذريعي TLS سان ڪم ڪن ٿا، جيڪي سرڪاري طور تي ESNI جي حمايت نٿا ڪن.

تنهن ڪري، اسان فيصلو ڪيو ته اسان جو پنهنجو فرنٽ-اينڊ جزو (ESNI ريورس پراڪسي) ٺاهيو، جيڪو ESNI سان TLS 1.3 ختم ڪرڻ ۽ اپ اسٽريم ڏانهن پراکسي HTTP(S) ٽرئفڪ کي سپورٽ ڪندو، جيڪو ESNI کي سپورٽ نٿو ڪري. هي ٽيڪنالاجي کي اڳ ۾ ئي موجود زيربناء ۾ استعمال ڪرڻ جي اجازت ڏئي ٿو، بنيادي اجزاء کي تبديل ڪرڻ کان سواء - اهو آهي، موجوده ويب سرور استعمال ڪندي جيڪي ESNI کي سپورٽ نٿا ڪن. 

وضاحت لاء، هتي هڪ خاڪو آهي:

ESNI سان توهان جي عوامي ويب سائيٽ جي حفاظت ڪيئن ڪجي

مان نوٽ ڪريان ٿو ته پراڪس ESNI کان سواءِ TLS ڪنيڪشن کي ختم ڪرڻ جي صلاحيت سان ٺهيل هئي، ESNI کان سواءِ گراهڪن جي مدد ڪرڻ لاءِ. ان سان گڏ، اپ اسٽريم سان ڪميونيڪيشن پروٽوڪول يا ته HTTP يا HTTPS ٿي سگھي ٿو TLS ورزن سان 1.3 کان گھٽ (جيڪڏھن اپ اسٽريم 1.3 کي سپورٽ نٿو ڪري). هي اسڪيم وڌ ۾ وڌ لچڪ ڏئي ٿو.

ESNI سپورٽ تي عمل درآمد go اسان کان قرض ورتو CloudFlare. مان فوري طور تي نوٽ ڪرڻ چاهيان ٿو ته عمل درآمد خود ڪافي غير معمولي آهي، ڇاڪاڻ ته ان ۾ معياري لائبريري ۾ تبديليون شامل آهن crypto/tls ۽ ان ڪري "پيچنگ" جي ضرورت آهي گوروٽ اسيمبلي کان اڳ.

ESNI چابيون پيدا ڪرڻ لاءِ اسان استعمال ڪيو esnitool (پڻ CloudFlare جو دماغ). اهي ڪنجيون SNI انڪرپشن/ڊڪرپشن لاءِ استعمال ٿين ٿيون.
اسان گو 1.13 آن استعمال ڪندي بلڊ کي آزمايو Linux (Debian، الپائن) ۽ ميڪ او ايس. 

آپريشنل خاصيتن جي باري ۾ چند لفظ

ESNI ريورس پراڪسي Prometheus فارميٽ ۾ ميٽرڪس مهيا ڪري ٿي، جهڙوڪ 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٪ سي پي يو استعمال (4 وي سي پي يو، 4 جي بي ريم هوسٽ، Linux)
  • 130 ايم بي ميم آر ايس ايس

ESNI سان توهان جي عوامي ويب سائيٽ جي حفاظت ڪيئن ڪجي

مقابلي لاءِ، RPS ساڳئي نينگڪس اپ اسٽريم لاءِ بغير 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 وي سي پي يو، 4 جي بي ريم هوسٽ استعمال ڪيا، Linux)، ۽ حقيقت ۾ امڪاني آر پي ايس وڌيڪ آهي (اسان کي وڌيڪ طاقتور وسيلن تي 2700 آر پي ايس تائين انگ اکر مليا آهن).

آخر ۾، مان نوٽ ڪريان ٿو ته ESNI ٽيڪنالاجي ڪافي پرجوش نظر اچي ٿي. اڃا به ڪيترائي کليل سوال آهن، مثال طور، DNS ۾ عوامي ESNI چيڪ کي محفوظ ڪرڻ ۽ ESNI ڪنجي کي گھمائڻ جا مسئلا - اهي مسئلا فعال طور تي بحث هيٺ آهن، ۽ ESNI مسودي جو جديد نسخو (لکڻ جي وقت) اڳ ۾ ئي آهي. 7.

جو ذريعو: www.habr.com

DDoS تحفظ سان سائيٽن لاءِ قابل اعتماد هوسٽنگ خريد ڪريو، VPS VDS سرور 🔥 DDoS تحفظ سان قابل اعتماد ويب سائيٽ هوسٽنگ خريد ڪريو، VPS VDS سرورز | ProHoster