Giunsa pagpanalipod ang imong publiko nga website gamit ang ESNI

Hello Habr, ang akong ngalan mao si Ilya, nagtrabaho ko sa platform team sa Exness. Among gipalambo ug gipatuman ang kinauyokan nga mga sangkap sa imprastraktura nga gigamit sa among mga team sa pagpalambo sa produkto.

Niini nga artikulo, gusto nakong ipaambit ang akong kasinatian sa pagpatuman sa teknolohiya nga naka-encrypt nga SNI (ESNI) sa imprastraktura sa mga publikong website.

Giunsa pagpanalipod ang imong publiko nga website gamit ang ESNI

Ang paggamit niini nga teknolohiya makadugang sa lebel sa seguridad kung nagtrabaho sa usa ka publiko nga website ug nagsunod sa mga sumbanan sa internal nga seguridad nga gisagop sa Kompanya.

Una sa tanan, gusto nakong ipunting nga ang teknolohiya dili standardized ug anaa pa sa draft, apan gisuportahan na kini sa CloudFlare ug Mozilla (sa draft01). Kini nagdasig kanamo alang sa ingon nga eksperimento.

Usa ka teoriya

ESNI usa ka extension sa TLS 1.3 protocol nga nagtugot sa SNI encryption sa TLS handshake nga "Client Hello" nga mensahe. Ania kung unsa ang hitsura sa Client Hello sa suporta sa ESNI (imbes sa naandan nga SNI nga atong makita ang ESNI):

Giunsa pagpanalipod ang imong publiko nga website gamit ang ESNI

 Aron magamit ang ESNI, kinahanglan nimo ang tulo nga sangkap:

  • DNS; 
  • Suporta sa kliyente;
  • Suporta sa kilid sa server.

DNS

Kinahanglan nimong idugang ang duha ka mga rekord sa DNS - Aug TXT (Ang rekord sa TXT naglangkob sa publikong yawe diin ang kliyente maka-encrypt sa SNI) - tan-awa sa ubos. Dugang pa, kinahanglan adunay suporta Ang DoH (DNS sa HTTPS) tungod kay ang anaa nga mga kliyente (tan-awa sa ubos) dili makahimo sa suporta sa ESNI nga walay DoH. Makataronganon kini, tungod kay ang ESNI nagpasabot sa pag-encrypt sa ngalan sa kapanguhaan nga atong gi-access, sa ato pa, wala'y kahulogan ang pag-access sa DNS sa UDP. Dugang pa, ang paggamit DNSSEC nagtugot kanimo sa pagpanalipod batok sa mga pag-atake sa pagkahilo sa cache niini nga senaryo.

Anaa karon ubay-ubay nga DoH providers, taliwala kanila:

CloudFlare gipahayag (Tan-awa ang Akong Browser β†’ Naka-encrypt nga SNI β†’ Pagkat-on Dugang) nga ang ilang mga server nagsuporta na sa ESNI, nga mao, alang sa CloudFlare server sa DNS kami adunay labing menos duha ka mga rekord - A ug TXT. Sa pananglitan sa ubos among gipangutana ang Google DNS (sa HTTPS): 

А entry:

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 rekord, ang hangyo gihimo sumala sa usa ka template _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."
}

Busa, gikan sa panglantaw sa DNS, kinahanglan natong gamiton ang DoH (mas maayo nga adunay DNSSEC) ug magdugang og duha ka entries. 

Suporta sa kustomer

Kung naghisgot kami bahin sa mga browser, nan sa pagkakaron Ang suporta gipatuman lamang sa FireFox. kini mao ang Ania ang mga panudlo kung giunsa pag-aktibo ang suporta sa ESNI ug DoH sa FireFox. Human ma-configure ang browser, kinahanglan natong makita ang ingon niini:

Giunsa pagpanalipod ang imong publiko nga website gamit ang ESNI

link aron masusi ang browser.

Siyempre, ang TLS 1.3 kinahanglan gamiton sa pagsuporta sa ESNI, tungod kay ang ESNI usa ka extension sa TLS 1.3.

Alang sa katuyoan sa pagsulay sa backend nga adunay suporta sa ESNI, gipatuman namon ang kliyente sa go, Apan labaw pa niana sa ulahi.

Suporta sa kilid sa server

Sa pagkakaron, ang ESNI wala gisuportahan sa mga web server sama sa nginx/apache, ug uban pa, tungod kay nagtrabaho sila sa TLS pinaagi sa OpenSSL/BoringSSL, nga dili opisyal nga nagsuporta sa ESNI.

Busa, nakahukom kami sa paghimo sa among kaugalingong front-end component (ESNI reverse proxy), nga mosuporta sa TLS 1.3 nga pagtapos sa ESNI ug proxy HTTP(S) nga trapiko ngadto sa upstream, nga dili mosuporta sa ESNI. Gitugotan niini ang teknolohiya nga magamit sa naa na nga imprastraktura, nga wala magbag-o sa mga nag-unang sangkap - nga mao, gamit ang karon nga mga web server nga wala nagsuporta sa ESNI. 

Alang sa katin-awan, ania ang usa ka diagram:

Giunsa pagpanalipod ang imong publiko nga website gamit ang ESNI

Namatikdan nako nga ang proxy gidisenyo nga adunay katakus sa pagtapos sa koneksyon sa TLS nga wala ang ESNI, aron suportahan ang mga kliyente nga wala ang ESNI. Usab, ang protocol sa komunikasyon uban sa upstream mahimo nga HTTP o HTTPS nga adunay TLS nga bersyon nga ubos sa 1.3 (kung ang upstream dili mosuporta sa 1.3). Kini nga laraw naghatag labing taas nga pagka-flexible.

Pagpatuman sa suporta sa ESNI sa go nanghulam mi CloudFlare. Gusto nako nga timan-an dayon nga ang pagpatuman mismo dili kaayo hinungdanon, tungod kay naglambigit kini sa mga pagbag-o sa sukaranan nga librarya. crypto/tls ug busa nagkinahanglan og "patching" GOROOT sa wala pa ang asembliya.

Aron makamugna ang mga yawe sa ESNI nga among gigamit esnitool (usab ang brainchild sa CloudFlare). Kini nga mga yawe gigamit alang sa SNI encryption/decryption.
Gisulayan namo ang pagtukod gamit ang go 1.13 sa Linux (Debian, Alpine) ug MacOS. 

Pipila ka mga pulong mahitungod sa operational features

Ang ESNI reverse proxy naghatag ug metrics sa Prometheus format, sama sa rps, upstream latency & response codes, failed/successful TLS handshakes & TLS handshake duration. Sa una nga pagtan-aw, ingon og igo na kini aron mahibal-an kung giunsa pagdumala sa proxy ang trapiko. 

Naghimo usab kami og pagsulay sa pagkarga sa wala pa gamiton. Mga resulta sa ubos:

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 

Naghimo kami og puro qualitative load testing aron itandi ang scheme gamit ang ESNI reverse proxy ug wala. "Gibubo" namon ang trapiko sa lokal aron mawagtang ang "pagpanghilabot" sa mga intermediate nga sangkap.

Mao nga, uban ang suporta sa ESNI ug upstream proxying gikan sa HTTP, nakakuha kami mga ~ 550 rps gikan sa usa ka higayon, nga adunay kasagaran nga pagkonsumo sa CPU / RAM sa ESNI reverse proxy:

  • 80% Paggamit sa CPU (4 vCPU, 4 GB RAM host, Linux)
  • 130 MB Mem RSS

Giunsa pagpanalipod ang imong publiko nga website gamit ang ESNI

Alang sa pagtandi, ang RPS alang sa parehas nga nginx upstream nga wala’y pagtapos sa TLS (HTTP protocol) mao ang ~ 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 

Ang presensya sa mga timeout nagpakita nga adunay kakulang sa mga kapanguhaan (among gigamit ang 4 vCPUs, 4 GB RAM host, Linux), ug sa pagkatinuod ang potensyal nga RPS mas taas (nakadawat kami og mga numero nga hangtod sa 2700 RPS sa mas gamhanan nga mga kapanguhaan).

Sa konklusyon, akong namatikdan nga ang teknolohiya sa ESNI daw maayo kaayo. Adunay daghan pa nga bukas nga mga pangutana, pananglitan, ang mga isyu sa pagtipig sa publiko nga yawe sa ESNI sa DNS ug pag-rotate sa mga yawe sa ESNI - kini nga mga isyu aktibo nga gihisgutan, ug ang pinakabag-o nga bersyon sa draft sa ESNI (sa panahon sa pagsulat) anaa na. 7.

Source: www.habr.com

Idugang sa usa ka comment