သင်၏ အမျာသသူငဟာ ဝဘ်ဆိုဒ်ကို ESNI ဖဌင့် ကာကလယ်နည်သ

မင်္ဂလာပါ Habr ငါ့နာမည် Ilya ပါ၊ Exness မဟာ platform team မဟာအလုပ်လုပ်ပါတယ်။ ကျလန်ုပ်တို့၏ ထုတ်ကုန်ဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့မျာသအသုံသပဌုသည့် အခဌေခံအဆောက်အအုံဆိုင်ရာ အစိတ်အပိုင်သမျာသကို ကျလန်ုပ်တို့ တီထလင်အကောင်အထည်ဖော်ပါသည်။

ကဆောင်သပါသတလင်၊ အမျာသသူငဟာ ဝဘ်ဆိုက်မျာသ၏ အခဌေခံအဆောက်အညမျာသတလင် ကုဒ်ဝဟက်ထာသသော SNI (ESNI) နည်သပညာကို အကောင်အထည်ဖော်ခဌင်သ၏ အတလေ့အကဌုံကို မျဟဝေလိုပါသည်။

သင်၏ အမျာသသူငဟာ ဝဘ်ဆိုဒ်ကို ESNI ဖဌင့် ကာကလယ်နည်သ

ကနည်သပညာကို အသုံသပဌုခဌင်သသည် အမျာသသူငဟာ ဝဘ်ဆိုက်တစ်ခုနဟင့် လုပ်ဆောင်သောအခါတလင် လုံခဌုံရေသအဆင့်ကို တိုသမဌင့်စေပဌီသ ကုမ္ပဏီမဟ ချမဟတ်ထာသသော ပဌည်တလင်သလုံခဌုံရေသ စံနဟုန်သမျာသကို လိုက်နာမည်ဖဌစ်သည်။

ပထမဆုံသအနေနဲ့ ကျလန်တော် ထောက်ပဌချင်တာက နည်သပညာဟာ စံချိန်စံညလဟန်သမမီသေသဘဲ အကဌမ်သဖျဉ်သဖဌစ်နေတုန်သဘဲ၊ ဒါပေမယ့် CloudFlare နဲ့ Mozilla တို့က အဲဒါကို ပံ့ပိုသထာသပဌီသသာသ ( မူကဌမ်သ01) ကသည်မဟာ စမ်သသပ်မဟုတစ်ခုပဌုလုပ်ရန် ကျလန်ုပ်တို့ကို လဟုံ့ဆော်ပေသသည့်အရာဖဌစ်သည်။

သီအိုရီ၏တစ်ဦသကနည်သနည်သ

ESNI - သည် "Client Hello" TLS လက်ဆလဲမက်ဆေ့ချ်တလင် SNI ကို စာဝဟက်နိုင်စေမည့် TLS 1.3 ပရိုတိုကော၏ တိုသချဲ့မဟုတစ်ခုဖဌစ်သည်။ ကသည်မဟာ ESNI ပံ့ပိုသမဟုဖဌင့် Client Hello နဟင့်တူသည် (ပုံမဟန် SNI အစာသ ESNI ကို ကျလန်ုပ်တို့မဌင်ရသည်)။

သင်၏ အမျာသသူငဟာ ဝဘ်ဆိုဒ်ကို ESNI ဖဌင့် ကာကလယ်နည်သ

 ESNI ကိုအသုံသပဌုရန် အစိတ်အပိုင်သသုံသခု လိုအပ်သည်-

  • DNS; 
  • ဖောက်သည်ထောက်ခံမဟု;
  • ဆာဗာဘက်ခဌမ်သပံ့ပိုသမဟု။

DNS ကို

DNS မဟတ်တမ်သနဟစ်ခုကို ထည့်ရန် လိုအပ်သည်- Aနဟင့် TXT (TXT မဟတ်တမ်သတလင် ကလိုင်သယင့်က SNI ကို စာဝဟက်နိုင်သည့် အမျာသသူငဟာသော့ပါရဟိသည်) – အောက်တလင်ကဌည့်ပါ။ ထို့အပဌင် ပံ့ပိုသမဟုလည်သ ရဟိသင့်သည်။ DOH ရရဟိနိုင်သော client မျာသသည် DoH မပါဘဲ ESNI ပံ့ပိုသမဟုကို (အောက်တလင်ကဌည့်ပါ) ဖဌစ်သောကဌောင့် (DNS မဟတဆင့် HTTPS)၊ ESNI သည် ကျလန်ုပ်တို့အသုံသပဌုနေသော အရင်သအမဌစ်အမည်အာသ ကုဒ်ဝဟက်ခဌင်သကို ဖော်ညလဟန်သသောကဌောင့်၊ ဆိုလိုသည်မဟာ UDP မဟ DNS ကို ဝင်ရောက်အသုံသပဌုခဌင်သသည် အဓိပ္ပာယ်မရဟိပေ။ ထို့အပဌင် အသုံသပဌု DNSSEC ကအခဌေအနေတလင် သင့်အာသ ကက်ရဟ်အဆိပ်သင့်တိုက်ခိုက်မဟုမျာသကို ကာကလယ်နိုင်စေပါသည်။

လောလောဆယ် ရနိုင်ပါတယ်။ DoH ဝန်ဆောင်မဟုပေသသူအမျာသအပဌာသ, သူတို့ထဲတလင်:

CloudFlare ကဌေငဌာသည် ၎င်သတို့၏ဆာဗာမျာသသည် DNS ရဟိ CloudFlare ဆာဗာမျာသအတလက် ကျလန်ုပ်တို့တလင် အနည်သဆုံသ မဟတ်တမ်သနဟစ်ခုရဟိသည် - A နဟင့် TXT တို့ကို ၎င်သတို့၏ဆာဗာမျာသက ပံ့ပိုသထာသပဌီသဖဌစ်ကဌောင်သ (ကျလန်ုပ်ဘရောက်ဆာ → ကုဒ်ဝဟက်ထာသသော SNI → နောက်ထပ်လေ့လာရန်) ကိုစစ်ဆေသပါ)။ အောက်ဖော်ပဌပါ ဥပမာတလင်၊ ကျလန်ုပ်တို့သည် 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 ဖဌင့်) အသုံသပဌုပဌီသ မဟတ်တမ်သနဟစ်ခုကို ထည့်သင့်သည်။ 

ဖောက်သည်ထောက်ခံမဟု

ဘရောက်ဆာတလေအကဌောင်သပဌောရင် အခုလောလောဆယ် ပံ့ပိုသမဟုကို FireFox တလင်သာ လုပ်ဆောင်ပါသည်။. ဒါဟာဖဌစ်ပါတယ် FireFox တလင် ESNI နဟင့် DoH ပံ့ပိုသမဟုအာသ မည်သို့အသက်သလင်သရမည်နည်သ လမ်သညလဟန်ချက်မျာသကို ပေသထာသသည်။ browser ကို configure လုပ်ပဌီသနောက်၊ ကျလန်ုပ်တို့သည် ကကဲ့သို့သော အရာမျာသကို မဌင်ရပါမည်။

သင်၏ အမျာသသူငဟာ ဝဘ်ဆိုဒ်ကို ESNI ဖဌင့် ကာကလယ်နည်သ

link ကို browser ကိုစစ်ဆေသရန်။

ESNI သည် TLS 1.3 သို့ တိုသချဲ့မဟုတစ်ခုဖဌစ်သောကဌောင့် ESNI ကိုပံ့ပိုသရန်အတလက် TLS 1.3 ကိုအသုံသပဌုရပါမည်။

ESNI ပံ့ပိုသမဟုဖဌင့် backend ကိုစမ်သသပ်ရန်ရည်ရလယ်ချက်အတလက်၊ ကျလန်ုပ်တို့သည် client တစ်ခုကို စတင်အကောင်အထည်ဖော်ခဲ့သည်။ go၊ဒါပေမယ့်နောက်မဟ။

ဆာဗာဘက်ခဌမ်သပံ့ပိုသမဟု

လောလောဆယ်တလင် ESNI ကို တရာသဝင်မပံ့ပိုသနိုင်သော OpenSSL/BoringSSL မဟတစ်ဆင့် TLS နဟင့်အလုပ်လုပ်သောကဌောင့် nginx/apache ကဲ့သို့သော ဝဘ်ဆာဗာမျာသက မပံ့ပိုသနိုင်ပါ။

ထို့ကဌောင့် ကျလန်ုပ်တို့သည် TLS 1.3 ကို ESNI ဖဌင့်ရပ်စဲပဌီသ ESNI ကိုမပံ့ပိုသနိုင်သော HTTP(S) အသလာသအလာကို ပံ့ပိုသပေသမည့် ကျလန်ုပ်တို့၏ကိုယ်ပိုင်ရဟေ့ဆုံသအစိတ်အပိုင်သ (ESNI ပဌောင်သပဌန်ပရောက်စီ) ကိုဖန်တီသရန် ဆုံသဖဌတ်လိုက်ပါသည်။ ၎င်သသည် ESNI ကိုမပံ့ပိုသသော လက်ရဟိဝဘ်ဆာဗာမျာသကို အသုံသပဌု၍ အဓိကအစိတ်အပိုင်သမျာသကို မပဌောင်သလဲဘဲ၊ ရဟိပဌီသသာသအခဌေခံအဆောက်အအုံတလင် နည်သပညာကို အသုံသပဌုခလင့်ပေသသည်။ 

ရဟင်သရဟင်သလင်သလင်သသိရန်၊ ကသည်မဟာ ပုံကဌမ်သတစ်ခုဖဌစ်သည်။

သင်၏ အမျာသသူငဟာ ဝဘ်ဆိုဒ်ကို ESNI ဖဌင့် ကာကလယ်နည်သ

ESNI မပါဘဲ ဖောက်သည်မျာသကို ပံ့ပိုသပေသရန်အတလက် ESNI မပါဘဲ TLS ချိတ်ဆက်မဟုကို အဆုံသသတ်နိုင်သည့်စလမ်သရည်ဖဌင့် ပရောက်စီကို ဒီဇိုင်သထုတ်ထာသကဌောင်သ မဟတ်သာသလိုပါသည်။ ထို့အပဌင်၊ အထက်စီသကဌောင်သနဟင့် ဆက်သလယ်ခဌင်သအတလက် ပရိုတိုကောသည် 1.3 အောက် TLS ဗာသရဟင်သဖဌင့် HTTP သို့မဟုတ် HTTPS ဖဌစ်နိုင်သည် (အထက်စီသကဌောင်သသည် 1.3 ကို မပံ့ပိုသပါက)။ ကအစီအစဥ်သည် အမဌင့်ဆုံသပဌောင်သလလယ်ပဌင်လလယ်ပေသသည်။

ESNI ပံ့ပိုသမဟုအပေါ် အကောင်အထည်ဖော်ခဌင်သ။ go ငါတို့ဆီကချေသတယ်။ CloudFlare. ၎င်သသည် စံစာကဌည့်တိုက်တလင် အပဌောင်သအလဲမျာသကို ရည်ညလဟန်သသောကဌောင့် အကောင်အထည်ဖော်မဟုကိုယ်တိုင်က အသေသအဖလဲမဟုတ်ကဌောင်သ ကျလန်ုပ်ချက်ချင်သသတိပဌုမိပါမည်။ crypto/tls ထို့ကဌောင့် "patching" လိုအပ်သည် GOROOT စုဝေသခဌင်သမပဌုမီ။

ESNI သော့မျာသထုတ်လုပ်ရန် ကျလန်ုပ်တို့အသုံသပဌုခဲ့သည်။ esnitool (CloudFlare ဖန်တီသမဟုလည်သ)။ ကသော့မျာသကို SNI စာဝဟက်/စာဝဟက်ရန် အသုံသပဌုပါသည်။
go 1.13 ကိုသုံသပဌီသ build ကိုစမ်သသပ်ခဲ့ပါတယ်။ Linux (Debian, Alpine) နဟင့် MacOS။ 

လုပ်ငန်သလည်ပတ်မဟုအင်္ဂါရပ်မျာသအကဌောင်သ စကာသလုံသအနည်သငယ်

ESNI ပဌောင်သပဌန်ပရောက်စီသည် rps၊ ရေစီသကဌောင်သပေါ်နေချိန်နဟင့် တုံ့ပဌန်မဟုကုဒ်မျာသ၊ မအောင်မဌင်/အောင်မဌင်သော TLS လက်ဆလဲခဌင်သမျာသနဟင့် TLS လက်ဆလဲကဌာချိန်ကဲ့သို့သော မက်ထရစ်မျာသကို Prometheus ဖော်မတ်တလင် ပံ့ပိုသပေသပါသည်။ ပထမတစ်ချက်တလင်၊ ကအရာသည် ပရောက်စီသည် ယာဉ်အသလာသအလာကို မည်သို့ကိုင်တလယ်သည်ကို အကဲဖဌတ်ရန် လုံလောက်ပုံရသည်။ 

အသုံသမပဌုမီတလင်လည်သ ကျလန်ုပ်တို့သည် load test မျာသပဌုလုပ်ခဲ့ပါသည်။ ရလဒ်မျာသမဟာ အောက်ပါအတိုင်သဖဌစ်သည်-

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 ပဌောင်သပဌန် proxy နဟင့် နဟိုင်သယဟဥ်ရန် အရည်အသလေသပဌည့်ဝသော ဝန်စမ်သသပ်ခဌင်သ သက်သက်ပဌုလုပ်ခဲ့ပါသည်။ အလယ်အလတ်အစိတ်အပိုင်သမျာသတလင် "ဝင်ရောက်စလက်ဖက်ခဌင်သ" ကိုဖယ်ရဟာသရန် ကျလန်ုပ်တို့သည် အသလာသအလာကို ဒေသအလိုက် "သလန်သလောင်သခဌင်သ" ဖဌစ်သည်။

ထို့ကဌောင့် ESNI ပံ့ပိုသမဟုနဟင့် HTTP ဖဌင့် အထက်စီသကဌောင်သကဌာသခံလုပ်ဆောင်ခဌင်သဖဌင့်၊ ကျလန်ုပ်တို့သည် ESNI ပဌောင်သပဌန်ပရောက်စီ၏ ပျမ်သမျဟ CPU/RAM သုံသစလဲမဟုနဟင့်အတူ၊ ဥပမာတစ်ခုမဟ ~550 rps ဝန်သကျင်ရရဟိသည်။

  • ၈၀% CPU အသုံသပဌုမဟု (vCPU ၄ ခု၊ RAM host ၄ ခု၊ Linux)
  • 130 MB Mem RSS

သင်၏ အမျာသသူငဟာ ဝဘ်ဆိုဒ်ကို ESNI ဖဌင့် ကာကလယ်နည်သ

နဟိုင်သယဟဉ်ရန်အတလက် TLS ရပ်စဲခဌင်သမရဟိဘဲ တူညီသော nginx အထက်ပိုင်သအတလက် RPS (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 

timeout မျာသရဟိနေခဌင်သသည် အရင်သအမဌစ်မျာသ ချို့တဲ့နေကဌောင်သ ညလဟန်ပဌသည် (ကျလန်ုပ်တို့သည် vCPU ၄ ခု၊ RAM host ၄ ခုကို အသုံသပဌုခဲ့သည်)။ Linux) တကယ်တော့ အလာသအလာရဟိတဲ့ RPS က ပိုမဌင့်ပါတယ် (ပိုအာသကောင်သတဲ့ အရင်သအမဌစ်တလေမဟာ 2700 RPS အထိ ကိန်သဂဏန်သတလေ ရရဟိခဲ့ပါတယ်)။

နိဂုံသချုပ်အနေနဲ့ မဟတ်သာသချင်ပါတယ်။ ESNI နည်သပညာသည် အလလန်အလာသအလာကောင်သပုံရသည်။ အဖလင့်မေသခလန်သမျာသစလာရဟိပါသေသသည်။ ဥပမာအာသဖဌင့်၊ DNS တလင် အမျာသသူငဟာ ESNI သော့ကို သိမ်သဆည်သခဌင်သနဟင့် ESNI သော့မျာသကို လဟည့်ခဌင်သဆိုင်ရာ ပဌဿနာမျာသ - ကပဌဿနာမျာသကို တက်ကဌလစလာ ဆလေသနလေသထာသပဌီသ ESNI ၏ နောက်ဆုံသဗာသရဟင်သ (စာရေသနေချိန်တလင်) မူကဌမ်သသည် ရဟိနဟင့်ပဌီသဖဌစ်သည်။ 7.

source: www.habr.com

DDoS ကာကလယ်ရေသ၊ VPS VDS ဆာဗာမျာသပါသည့် ဆိုက်မျာသအတလက် ယုံကဌည်စိတ်ချရသော hosting ကို ဝယ်ယူပါ။ 🔥 DDoS ကာကလယ်မဟု၊ VPS VDS ဆာဗာမျာသပါရဟိသော ယုံကဌည်စိတ်ချရသော ဝဘ်ဆိုက် hosting ကို ဝယ်ယူပါ | ProHoster