Ahoana ny fiarovana ny tranokalanao ho an'ny daholobe amin'ny ESNI

Salama Habr, Ilya no anarako, miasa ao amin'ny ekipan'ny sehatra ao amin'ny Exness aho. Mamolavola sy mampihatra ireo singa fotodrafitrasa fototra ampiasain'ny ekipa mpamolavola vokatra izahay.

Amin'ity lahatsoratra ity, tiako ny hizara ny traikefako amin'ny fampiharana ny teknolojia SNI (ESNI) encrypted amin'ny fotodrafitrasa tranokalam-bahoaka.

Ahoana ny fiarovana ny tranokalanao ho an'ny daholobe amin'ny ESNI

Ny fampiasana an'io teknolojia io dia hampitombo ny haavon'ny fiarovana rehefa miasa amin'ny tranokalam-bahoaka ary hanaraka ny fenitra fiarovana anatiny nolanian'ny Orinasa.

Voalohany indrindra, tiako ny manamarika fa ny teknolojia dia tsy manara-penitra ary mbola ao anatin'ny drafitra, fa ny CloudFlare sy Mozilla dia efa manohana azy (amin'ny drafitra01). Izany no nanosika anay hanao fanandramana toy izany.

Fomba teoria

ESNI dia fanitarana ny protocol TLS 1.3 izay mamela ny fanafenana SNI ao amin'ny hafatra "Client Hello" TLS handshake. Toy izao ny endriky ny Client Hello miaraka amin'ny fanohanan'ny ESNI (fa tsy ny SNI mahazatra hitantsika ESNI):

Ahoana ny fiarovana ny tranokalanao ho an'ny daholobe amin'ny ESNI

 Mba hampiasana ny ESNI dia mila singa telo ianao:

  • DNS; 
  • Fanohanana ny mpanjifa;
  • Fanohanana amin'ny lafiny server.

DNS

Mila manampy rakitra DNS roa ianao - Aary TXT (Ny firaketana TXT dia misy ny fanalahidin'ny daholobe izay ahafahan'ny mpanjifa manidy SNI) - jereo eto ambany. Ankoatra izany, tsy maintsy misy ny fanohanana DoH (DNS amin'ny HTTPS) satria ny mpanjifa misy (jereo eto ambany) dia tsy mamela ny fanohanana ESNI tsy misy DoH. Lojika izany, satria ny ESNI dia midika fanafenana ny anaran'ny loharano idirantsika, izany hoe tsy misy dikany ny fidirana DNS amin'ny UDP. Ankoatra izany, ny fampiasana DNSSEC mamela anao hiaro amin'ny fanafihana fanapoizinana cache amin'ity toe-javatra ity.

Misy amin'izao fotoana izao mpamatsy DoH maromaro, anisan-dry zareo:

CloudFlare hoy (Jereo ny My Browser β†’ Encrypted SNI β†’ Learn More) fa efa manohana ny ESNI ny mpizara azy ireo, izany hoe ho an'ny mpizara CloudFlare ao amin'ny DNS manana firaketana roa farafahakeliny isika - A sy TXT. Amin'ity ohatra etsy ambany ity dia manontany Google DNS izahay (amin'ny HTTPS): 

А fidirana:

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 firaketana, ny fangatahana dia avoaka araka ny mΓ΄dely _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."
}

Noho izany, amin'ny fomba fijery DNS, tokony hampiasa ny DoH (tsara indrindra amin'ny DNSSEC) isika ary ampio ny fidirana roa. 

Fanohanana ny mpanjifa

Raha miresaka momba ny navigateur isika, dia amin'izao fotoana izao Ny fanohanana dia ampiharina amin'ny FireFox ihany. izany Ireto misy torolalana momba ny fomba fampahavitrihana ny fanohanana ESNI sy DoH ao amin'ny FireFox. Rehefa voarindra ny navigateur dia tokony hahita zavatra toy izao isika:

Ahoana ny fiarovana ny tranokalanao ho an'ny daholobe amin'ny ESNI

rohy mba hijery ny navigateur.

Mazava ho azy fa ny TLS 1.3 dia tsy maintsy ampiasaina hanohanana ny ESNI, satria ny ESNI dia fanitarana ny TLS 1.3.

Mba hanaovana fitiliana ny backend miaraka amin'ny fanohanan'ny ESNI, dia nampihatra ny mpanjifa izahay go, Fa bebe kokoa momba izany taty aoriana.

Fanohanana amin'ny lafiny server

Amin'izao fotoana izao, ny ESNI dia tsy tohanan'ny mpizara tranonkala toa ny nginx/apache, sns., satria miara-miasa amin'ny TLS amin'ny alΓ lan'ny OpenSSL/BoringSSL izy ireo, izay tsy manohana amin'ny fomba ofisialy ny ESNI.

Noho izany, nanapa-kevitra izahay fa hamorona ny singa voalohany amin'ny farany (ESNI reverse proxy), izay hanohana ny fampitsaharana TLS 1.3 miaraka amin'ny ESNI sy proxy HTTP(S) fifamoivoizana mankany amin'ny upstream, izay tsy manohana ny ESNI. Izany dia ahafahan'ny teknolojia ampiasaina amin'ny fotodrafitrasa efa misy, tsy manova ny singa fototra - izany hoe, mampiasa ireo mpizara tranonkala ankehitriny izay tsy manohana ny ESNI. 

Mba hanazavana dia ity misy kisary:

Ahoana ny fiarovana ny tranokalanao ho an'ny daholobe amin'ny ESNI

Marihiko fa ny proxy dia novolavolaina miaraka amin'ny fahafahana manafoana fifandraisana TLS tsy misy ESNI, hanohanana mpanjifa tsy misy ESNI. Ary koa, ny protocole fifandraisana amin'ny upstream dia mety ho HTTP na HTTPS miaraka amin'ny version TLS ambany noho ny 1.3 (raha tsy manohana ny 1.3 ny upstream). Ity rafitra ity dia manome flexibility ambony indrindra.

Fampiharana ny fanohanan'ny ESNI amin'ny go nindraminay CloudFlare. Tiako ny manamarika avy hatrany fa ny fampiharana azy dia tsy dia misy dikany loatra, satria misy fiovana ao amin'ny tranomboky mahazatra. crypto/tls ary noho izany dia mila "patch" GOROOT alohan’ny fivoriambe.

Mba hamoronana fanalahidy ESNI dia nampiasainay esnitool (ary ny atidohan'ny CloudFlare). Ireo fanalahidy ireo dia ampiasaina amin'ny SNI encryption/decryption.
Nanandrana ny fananganana izahay tamin'ny alΓ lan'ny go 1.13 amin'ny Linux (Debian, Alpine) ary MacOS. 

Teny vitsivitsy momba ny fiasa miasa

Ny proxy reverse ESNI dia manome metrika amin'ny endrika Prometheus, toy ny rps, ny fahatarana ambony sy ny kaody famaliana, ny fifanomezan-tanana TLS tsy nahomby/nahombiazana & ny faharetan'ny fifampikasohana TLS. Raha vao jerena dia toa ampy hanombanana ny fomba itondran'ny proxy ny fifamoivoizana. 

Nanao fitiliana entana ihany koa izahay alohan'ny hampiasana azy. Vokatra eto ambany:

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 

Nanao fitiliana entana feno kalitao izahay mba hampitahana ny tetika amin'ny alΓ lan'ny proxy reverse ESNI ary tsy misy. "Nandraraka" fifamoivoizana teo an-toerana izahay mba hanafoanana ny "fanelingelenana" amin'ny singa mpanelanelana.

Noho izany, miaraka amin'ny fanohanan'ny ESNI sy ny proxy mankany ambony avy amin'ny HTTP, dia nahazo manodidina ny ~ 550 rps izahay tamin'ny fotoana iray, miaraka amin'ny salan'isa CPU/RAM amin'ny ESNI reverse proxy:

  • Fampiasana CPU 80% (4 vCPU, mpampiantrano RAM 4 GB, Linux)
  • 130 MB Mem RSS

Ahoana ny fiarovana ny tranokalanao ho an'ny daholobe amin'ny ESNI

Raha ampitahaina, ny RPS ho an'ny nginx mitovy amin'ny tsy misy TLS (HTTP protocol) famaranana dia ~ 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 

Ny fisian'ny fe-potoana dia manondro fa misy ny tsy fahampian'ny loharanon-karena (nampiasa vCPU 4 izahay, mpampiantrano 4 GB RAM, Linux), ary raha ny marina dia ambony kokoa ny mety ho RPS (nahazo tarehimarika hatramin'ny 2700 RPS izahay amin'ny loharano matanjaka kokoa).

Fehiny, marihiko fa ny teknolojia ESNI dia toa tena mampanantena. Mbola maro ny fanontaniana misokatra, ohatra, ny olana momba ny fitehirizana ny fanalahidin'ny ESNI ho an'ny daholobe ao amin'ny DNS sy ny fanodinkodinana ny fanalahidin'ny ESNI - ireo olana ireo dia dinihina mavitrika, ary ny dika farany amin'ny drafitra ESNI (tamin'ny fotoana nanoratana) 7.

Source: www.habr.com

Add a comment