Quam cum ESNI . tuearis website

Salve Habr, nomen meum Ilya est, in suggestu manipulus Exness laboro. Coram infrastructuram partium explicamus et efficimus, quibus iugis nostri producti progressionis utuntur.

In hoc articulo, experientiam meam communicare vellem SNI (ESNI) technologiae in infrastructura publici websites fovendi.

Quam cum ESNI . tuearis website

Usus technologiae huius technologiae aequationem securitatis augebit cum operando cum loco publico et rationibus securitatis internis a Societate adhibitis obtempero.

Imprimis notare libet technologiam non normatum et adhuc in captura esse, sed CloudFlare et Mozilla iam eam tuebitur (in draft01). Hoc nos ad tale experimentum moverunt.

A frenum in doctrina

ESNI extensio ad TLS 1.3 protocollum est quod encryption SNI in TLS handshake "Client Hello" concedit. Hic est quod Client Salve similis cum auxilio ESNI (pro solito SNI ESNI videmus);

Quam cum ESNI . tuearis website

 Uti ESNI, tria elementa debes:

  • DNS; 
  • Clientem suscipio;
  • Servo latus suscipio.

DNS

Duo DNS records addere debes - Aet txt (TXT record continens clavem publicam cum qua client encrypt SNI potest) vide infra. Praeterea subsidium esse debet DoH (DNS super HTTPS) quod clientes praesto (vide infra) ESNI subsidium sine DoH non efficiunt. Hoc logicum est, quia ESNI encryptionem importat nominis subsidii quam accessimus, hoc est, nihil sensum DNS super UDP accedere. Praeterea, usus DNSSEC sino vos contra veneficiorum impetus in hac missione protegere.

Currently praesto pluribus DoH providers, inter eos:

CloudFlare civitatibus (Reprehendo navigatrum meum β†’ Encrypted SNI β†’ Disce More) suos ministros iam ESNI sustentant, id est, pro servitoribus CloudFlare in DNS habemus saltem duas tabulas - A et TXT. In exemplo infra quaesivimus Google DNS (super HTTPS); 

А ingressum:

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 recordum, petitio generatur secundum exemplum _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."
}

Itaque, per DNS prospectum, DoH (potius cum DNSSEC) utendum est et duos introitus adiiciemus. 

Cliens auxilia

Si de navigatoribus loquimur, tunc in momento firmamentum effectum est in FireFox. est Hic sunt instructiones quomodo ESNI et DoH subsidium in FireFox excitant. Post configuratur navigatrum, aliquid simile hoc videre debemus;

Quam cum ESNI . tuearis website

Link ad reprimendam pasco.

Utique, TLS 1.3 fulciri debet ESNI, cum ESNI extensio ad TLS 1.3.

Ad probationem tergum cum ESNI auxilio, clientem in effectum adduximus go, Sed de his plura postea.

Servo parte firmamentum

In statu, ESNI servientibus interretialibus ut nginx/apache, etc. non praebetur, cum TLS per OpenSSL/BoringSSL laborant, quae ESNI publice non sustinent.

Ideo constituimus ut componentium nostrum ante-finem (ESNI vicissim procuratorem), quae TLS 1.3 terminationem sustineat cum ESNI et procuratorio HTTP(S) mercaturae adverso flumine, quae ESNI non sustinet. Hoc permittit technicae usus in infrastructura iam existente, sine mutationibus principalium partium - hoc est, adhibitis servientibus interretialibus qui ESNI non sustinent. 

Ad evidentiam, hic figura est;

Quam cum ESNI . tuearis website

Adverto procuratorem designatum cum facultate TLS nexum sine ESNI terminandi, clientes alere sine ESNI. Communicatio cum flumine etiam potest esse vel HTTP vel HTTPS cum TLS versione minore quam 1.3 (si adverso flumine 1.3) non sustinet. Quae res maximam flexibilitatem dat.

Exsequendam ESNI auxilio go nos mutuo acceperam CloudFlare. Libet statim notare ipsam exsecutionem plane non levis esse, cum in bibliotheca normarum mutationes involvit. crypto / tls et ideo requirit "inaequalem" GOROOT ante ecclesiam.

Ad generate ESNI claves nos utendum est esnitool (etiam cerebrum CloudFlare). Hae claves pro SNI encryption/decryption adhibentur.
Imus 1.13 in Linux (Debian, Alpine) et MacOS usus aedificandi probavimus. 

Paucis verbis de operational features

ESNI procurator in contrarium metrics in forma Promethei praebet, sicut rps, fluminis latency & responsionis codicibus, defecit/succedens TLS handshakes & TLS handshake duratione. Primo aspectu, hoc satis visum est aestimare quomodo procurator negotiationis tractat. 

Nos quoque onus probatio ante usum praestitit. Proventus infra:

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 

Nos onere mere qualitative onere temptantes comparamus schema utens ESNI vicissim procuratorem et sine. Commercium localiter fundimus ad tollendum "impedimentum" in componentibus intermediis.

Itaque, cum ESNI auxilio et cum HTTP ad flumen accessimus, ab uno instantia circa DL rps venimus, cum CPU/RAM consumptio mediocris procuratoris ESNI contrarii:

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

Quam cum ESNI . tuearis website

Comparatio RPS pro nginx ejusdem fluminis sine TLS (protocollo HTTP) terminatio est ~MC;

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 

Praesentia temporis indicat inopiam opum (usivimus 4 vCPUs, 4 GB RAM exercituum, Linux), et re vera potentia RPS altior est (recepimus figuras usque ad 2700 RPS in opibus potioribus).

In fine noto id ESNI technologia satis pollicetur. Multae adhuc exstant quaestiones apertae, exempli gratia, quaestiones deponendae clavis publicae ESNI in DNS et claves ESNI rotatae β€” his rebus actuose agitantur et postrema versio ESNI schematis iam (tempore scribendi) iam est. 7.

Source: www.habr.com