Mar a dhìonas tu an làrach-lìn poblach agad le ESNI

Halo Habr, is e Ilya an t-ainm a th’ orm, tha mi ag obair ann an sgioba àrd-ùrlar Exness. Bidh sinn a’ leasachadh agus a’ buileachadh nam prìomh phàirtean bun-structair a bhios na sgiobaidhean leasachadh toraidh againn a’ cleachdadh.

San artaigil seo, bu mhath leam an t-eòlas agam air a bhith a’ cur an gnìomh teicneòlas crioptaichte SNI (ESNI) a cho-roinn ann am bun-structar làraich-lìn poblach.

Mar a dhìonas tu an làrach-lìn poblach agad le ESNI

Meudaichidh cleachdadh an teicneòlais seo an ìre de thèarainteachd nuair a bhios tu ag obair le làrach-lìn poblach agus gèilleadh ri inbhean tèarainteachd a-staigh ris an do ghabh a’ Chompanaidh.

An toiseach, bu mhath leam a chomharrachadh nach eil an teicneòlas àbhaisteach agus gu bheil e fhathast san dreach, ach tha CloudFlare agus Mozilla a’ toirt taic dha mu thràth (ann an dreach01). Thug seo brosnachadh dhuinn airson a leithid de dheuchainn.

Pàirt de theòiridh

ESNI na leudachadh air a’ phròtacal TLS 1.3 a leigeas le crioptachadh SNI anns an teachdaireachd crathadh làimhe TLS “Cliant Hello”. Seo cò ris a tha Client Hello coltach le taic ESNI (an àite an SNI àbhaisteach a chì sinn ESNI):

Mar a dhìonas tu an làrach-lìn poblach agad le ESNI

 Gus ESNI a chleachdadh, feumaidh tu trì pàirtean:

  • DNS; 
  • taic teachdaiche;
  • Taic taobh frithealaiche.

DNS

Feumaidh tu dà chlàr DNS a chur ris - Aagus TXT (Tha an iuchair phoblach anns a’ chlàr TXT leis an urrainn don neach-dèiligidh SNI a chrioptachadh) - faic gu h-ìosal. A bharrachd air an sin, feumaidh taic a bhith ann DoH (DNS thairis air HTTPS) leis nach eil teachdaichean a tha rim faighinn (faic gu h-ìosal) a’ comasachadh taic ESNI às aonais DoH. Tha seo loidsigeach, leis gu bheil ESNI a’ ciallachadh gun tèid ainm a’ ghoireas air a bheil sinn a’ faighinn a chrioptachadh, is e sin, chan eil e ciallach faighinn gu DNS thairis air UDP. A bharrachd air an sin, cleachdadh DNSSEC a’ leigeil leat dìon an aghaidh ionnsaighean puinnseanachadh tasgadan san t-suidheachadh seo.

Ri fhaighinn an-dràsta grunn sholaraichean DoH, nam measg:

CloudFlare a 'dearbhadh (Thoir sùil air a’ bhrabhsair agam → SNI crioptaichte → Ionnsaich barrachd) gu bheil na frithealaichean aca mu thràth a’ toirt taic do ESNI, is e sin, airson frithealaichean CloudFlare anns an DNS tha co-dhiù dà chlàr againn - A agus TXT. Anns an eisimpleir gu h-ìosal bidh sinn a’ ceasnachadh Google DNS (thairis air HTTPS): 

А inntrigeadh:

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 clàr, tha iarrtas air a chruthachadh a rèir teamplaid _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."
}

Mar sin, bho shealladh DNS, bu chòir dhuinn DoH a chleachdadh (le DNSSEC mas fheàrr) agus dà inntrig a chur ris. 

Taic teachdaiche

Ma tha sinn a 'bruidhinn mu dheidhinn brobhsairean, an uairsin an-dràsta chan eil taic air a chuir an gnìomh ach ann am FireFox. tha e Seo stiùireadh air mar a chuireas tu taic ESNI agus DoH an gnìomh ann an FireFox. Às deidh don bhrobhsair a bhith air a rèiteachadh, bu chòir dhuinn rudeigin mar seo fhaicinn:

Mar a dhìonas tu an làrach-lìn poblach agad le ESNI

cheangal gus am brabhsair a sgrùdadh.

Gu dearbh, feumar TLS 1.3 a chleachdadh airson taic a thoirt do ESNI, leis gu bheil ESNI na leudachadh air TLS 1.3.

Airson adhbhar deuchainn a dhèanamh air an backend le taic ESNI, chuir sinn an gnìomh an neach-dèiligidh air adhart go, Ach barrachd air sin nas fhaide air adhart.

Taic taobh frithealaiche

An-dràsta, chan eil ESNI a’ faighinn taic bho luchd-frithealaidh lìn leithid nginx/apache, msaa, leis gu bheil iad ag obair le TLS tro OpenSSL/BoringSSL, nach eil a’ toirt taic oifigeil do ESNI.

Mar sin, chuir sinn romhainn ar pàirt aghaidh fhèin a chruthachadh (neach-ionaid cùil ESNI), a bheireadh taic do chrìochnachadh TLS 1.3 le trafaic ESNI agus neach-ionaid HTTP(S) chun an abhainn shuas, nach eil a’ toirt taic do ESNI. Leigidh seo leis an teicneòlas a chleachdadh ann am bun-structar a th’ ann mar-thà, gun a bhith ag atharrachadh nam prìomh phàirtean - is e sin, a’ cleachdadh frithealaichean lìn gnàthach nach eil a’ toirt taic do ESNI. 

Airson soilleireachd, seo diagram:

Mar a dhìonas tu an làrach-lìn poblach agad le ESNI

Tha mi a’ toirt fa-near gun deach an neach-ionaid a dhealbhadh leis a’ chomas crìoch a chuir air ceangal TLS às aonais ESNI, gus taic a thoirt do luchd-dèiligidh às aonais ESNI. Cuideachd, faodaidh am protocol conaltraidh le suas an abhainn a bhith an dàrna cuid HTTP no HTTPS le dreach TLS nas ìsle na 1.3 (mura h-eil suas an abhainn a’ toirt taic do 1.3). Tha an sgeama seo a’ toirt seachad an sùbailteachd as motha.

Cur an gnìomh taic ESNI air go fhuair sinn iasad bho CloudFlare. Bu mhath leam a thoirt fa-near sa bhad gu bheil am buileachadh fhèin gu math neo-bheag, leis gu bheil e a’ toirt a-steach atharrachaidhean anns an leabharlann àbhaisteach crypto/tls agus mar sin feumar “patching” GROOT ron cho-chruinneachadh.

Airson iuchraichean ESNI a ghineadh chleachd sinn esnitool (cuideachd beachd CloudFlare). Tha na h-iuchraichean sin air an cleachdadh airson crioptachadh/dì-chrioptachadh SNI.
Rinn sinn deuchainn air an togalach le bhith a’ cleachdadh go 1.13 air Linux (Debian, Alpine) agus MacOS. 

Beagan fhaclan mu fheartan obrachaidh

Bidh neach-ionaid cùil ESNI a’ toirt seachad meatrach ann an cruth Prometheus, leithid rps, latency shuas an abhainn & còdan freagairt, crathadh làimhe TLS air fàiligeadh / soirbheachail & fad crathadh làimhe TLS. Aig a’ chiad sealladh, bha coltas gu robh seo gu leòr airson measadh a dhèanamh air mar a làimhsicheas an neach-ionaid trafaic. 

Rinn sinn cuideachd deuchainn luchdan mus deach a chleachdadh. Toraidhean gu h-ìosal:

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 

Rinn sinn deuchainn luchdan càileachd a-mhàin gus coimeas a dhèanamh eadar an sgeama a’ cleachdadh proxy cùl ESNI agus às aonais. Tha sinn "a' dòrtadh" trafaig gu h-ionadail gus cuir às do "bacadh" ann am pàirtean eadar-mheadhanach.

Mar sin, le taic ESNI agus proxying gu suas an abhainn bho HTTP, fhuair sinn timcheall air ~ 550 rps bho aon eisimpleir, le caitheamh cuibheasach CPU / RAM de neach-ionaid cùil ESNI:

  • Cleachdadh CPU 80% (4 vCPU, luchd-aoigheachd 4 GB RAM, Linux)
  • 130 MB Mem RSS

Mar a dhìonas tu an làrach-lìn poblach agad le ESNI

Airson coimeas a dhèanamh, tha RPS airson an aon nginx shuas an abhainn às aonais crìochnachadh TLS (protocol 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 

Tha làthaireachd amannan-ama a’ nochdadh gu bheil gainnead ghoireasan ann (chleachd sinn 4 vCPUs, 4 GB RAM hosts, Linux), agus gu dearbh tha an RPS comasach nas àirde (fhuair sinn figearan suas ri 2700 RPS air goireasan nas cumhachdaiche).

Ann an co-dhùnadh, tha mi a 'toirt fa-near gu bheil teicneòlas ESNI a’ coimhead gu math gealltanach. Tha mòran cheistean fosgailte ann fhathast, mar eisimpleir, cùisean a thaobh a bhith a’ stòradh iuchair ESNI poblach anns an DNS agus a’ cuairteachadh iuchraichean ESNI - thathas gu gnìomhach a’ bruidhinn air na cùisean sin, agus tha an dreach as ùire de dhreach ESNI (aig àm sgrìobhaidh) mu thràth 7.

Source: www.habr.com

Cuir beachd ann