Lets Encrypt

Povratni proxy Nginx s HTTPS prek LetsEncrypt

Povratni proxy Nginx s HTTPS prek LetsEncrypt
To je nadaljevanje mojega prejšnja objava kjer z uporabo Nginxa nastavimo preprost povratni proxy strežnik. V tem prispevku bomo zagotovili povezavo med odjemalcem in obratnim strežnikom proxy z uporabo brezplačnega TLS (a.k.potrdilo SSL) podjetja LetsEncrypt. Svetujem vam, da si za osnove ogledate zgoraj omenjeno objavo o obratnem proxyju.

Pogoji

  1. Strežnik s statičnim javnim IP-jem. Tu se izvaja Nginx.
  2. Backend strežniki s predvidenim spletnim mestom, ki se izvaja prek HTTP
  3. Registrirano ime domene. Uporabljal bom ranvirslog.com kot moje primarno domensko ime in dve spletni strani sta v FQDN-jih - ww1.ranvirslog.com in ww2ranvirslog.com

Nastaviti

IP naslovi so se torej spremenili od zadnjega, odkar ponovno izvajam to nastavitev. Tu so novi IP-ji in imena gostiteljev.

VM / ime gostitelja Javni IP Zasebni IP Vloga / funkcija
ReverseProxy 68.183.214.151 10.135.127.136 Končna točka TLS in povratni strežnik proxy
splet1 N / A 10.135.126.102 Gostovanje ww1.ranvirslog.com

spletno mesto prek vrat 80 HTTP

splet2 N / A 10.135.126.187 Gostovanje

ww2.ranvirslog.com

spletno mesto prek vrat 80 HTTP

Zapisi DNS so nastavljeni kot taki, tako da spletna mesta (različne poddomene) kažejo na isti statični javni IP. To je IP naslov našega povratnega strežnika Nginx:

Zapis Vrednost
ww1.ranvirslog.com 68.183.214.151
ww2.ranvirslog.com 68.183.214.151

Da bi naš povratni DNS deloval prek nešifriranega HTTP-ja, smo v / etc / conf ustvarili dve datoteki.d / z imenom ww1.conf in ww2.konfigurirajte vsakega z naslednjo konfiguracijo:

/ etc / conf.d / w1.conf

strežnik
poslušaj 80;
poslušaj [::]: 80;
ime_strežnika ww1.ranvirslog.com;
lokacija /
proxy_pass http: // 10.135.126.102 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;

/ etc / conf.d / w2.conf

strežnik
poslušaj 80;
poslušaj [::]: 80;
ime_strežnika ww2.ranvirslog.com;
lokacija /
proxy_pass http: // 10.135.126.187 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;

Operacijski sistem, ki ga uporabljamo, je Ubuntu 18.04 LTS in že imamo odstranjena datoteko / etc / nginx / sites-enabled / default, tako da lahko Nginx deluje zgolj kot povratni DNS z zgoraj prikazanimi konfiguracijami.

Cilj

Ker je obratni DNS (in zaledna spletna mesta) že v teku in deluje, je naš cilj namestiti eno potrdilo TLS za oba FQDN-ja (to je ww1.ranvirslog.com in ww2.ranvirslog.com) na našem povratnem strežniku Nginx.

Promet med katerim koli odjemalcem in povratnim strežnikom proxy bo šifriran, promet med obratnim strežnikom proxy in zalednim strežnikom pa ni šifriran. Vendar je to še vedno neskončno varnejša možnost, kot da sploh ne bi imeli HTTPS. V primerih, ko sta obratni strežnik proxy in različni spletni strežniki na istem gostitelju, recimo, če uporabljate Dockerjeve vsebnike za gostovanje vseh na istem VPS, potem je tudi ta nekodiran promet na enem gostitelju.

Namestitev Certbota

Certbot je odjemalski program, ki se bo zagnal na našem povratnem strežniku proxy in se z LetsEncrypt pogajal o potrdilu TLS. LetsEncrypt-u bo dokazal, da strežnik dejansko nadzoruje FQDN-je, za katere trdi, da imajo nadzor nad. Ne bo nas skrbelo, kako to počne Certbot.

Običajno lahko Certbot uporabite kot samostojno programsko opremo, ki bo samo dobila potrdila (ki so v bistvu le dolgi kriptografski ključi) in jih shranila na strežnik. Na srečo pa za večino operacijskih sistemov obstajajo vtičniki po meri za Nginx, Apache in druge programe. Certbot bomo namestili z vtičnikom Nginx. S tem bo Nginx samodejno konfiguriran za uporabo novo pridobljenih ključev in se znebil negotovih pravil, kot je poslušanje HTTP na vratih 80.

Če uporabljate sisteme, ki temeljijo na Debianu, tako kot v mojem primeru, uporabljam Ubuntu 18.04 LTS, potem je namestitev prepih.

$ sudo apt posodobitev
$ sudo apt namestite programske lastnosti-skupne
$ sudo add-apt-repository vesolje
$ sudo add-apt-repository ppa: certbot / certbot
$ sudo apt posodobitev
$ sudo apt namestite python-certbot-nginx

Drugi operacijski sistemi, vaši RedHat, Gentoo in Fedora, lahko sledijo uradnim navodilom, navedenim tukaj.

Ko namestite Certbot z vtičnikom Nginx za vašo kombinacijo OS se lahko lotimo posla.

Pridobivanje potrdil TLS

Če želite prvič pridobiti potrdilo TLS, zaženite naslednji ukaz:

$ sudo certbot --nginx

To bo potekalo skozi vrsto interaktivnih vprašanj, kot je prikazano spodaj:

  1. Vpišite svoj elektronski naslov

Shranjevanje dnevnika odpravljanja napak v / var / log / letsencrypt / letsencrypt.log
Izbrani vtičniki: Authenticator nginx, Installer nginx
Vnesite e-poštni naslov (uporablja se za nujna obvestila o podaljšanju in varnost) (za preklic vnesite 'c'): [e-pošta zaščitena]

  1. Strinjam se s TOS

Prosimo, preberite Pogoje storitve na https: // letsencrypt.org / documents / LE-SA-v1.2. november-15-2017.pdf. Za registracijo s strežnikom ACME na https: // acme-v02 se morate strinjati.api.letsencrypt.org / imenik
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) ancel: A

  1. Izbirno glasilo

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Bi bili pripravljeni svoj elektronski naslov deliti z Electronic Frontier Foundation, ustanovnim partnerjem projekta Let's Encrypt in neprofitno organizacijo, ki razvija Certbot? Radi bi vam poslali e-pošto o našem delu, ki šifrira splet, novice EFF, kampanje in načine za podporo digitalni svobodi.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y) es / (N) o: Y

  1. Nato bo zaznal imena domen na vašem strežniku in če želite izbrati vse domene, preprosto pritisnite

Za katera imena bi radi aktivirali HTTPS?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ww1.ranvirslog.com
2: ww2.ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Izberite ustrezne številke, ločene z vejicami in / ali presledki, ali pustite vnos prazen, da izberete vse prikazane možnosti (za preklic vnesite 'c'):

  1. Vse preusmerite na TLS. Izbral sem možnost 2, da vse preusmerim na SSL, vendar se vaš primer uporabe lahko razlikuje. Za nove zaledne namestitve je varno izbrati možnost 2.

Izberite, ali želite preusmeriti promet HTTP na HTTPS, tako da odstranite dostop HTTP.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: Brez preusmeritve - ne spreminjajte konfiguracije spletnega strežnika.
2: Preusmeritev - preusmerite vse zahteve, da zaščitite dostop HTTPS. Izberite to za nova spletna mesta ali če ste prepričani, da vaše spletno mesto deluje na HTTPS. To spremembo lahko razveljavite z urejanjem konfiguracije spletnega strežnika.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Izberite ustrezno številko [1-2] in nato [enter] (za preklic pritisnite 'c'): 2

Če je šlo vse v redu, vam bo to sporočilo prikazalo samo za imena domen.

Vse čestitke! Uspešno ste omogočili https: // ww1.ranvirslog.com in https: // ww2.ranvirslog.com Lahko obiščete FQDN-je in opazite, da imajo spletna mesta zdaj znak ključavnice, ki kaže, da je vse šifrirano.

Poglejte konfiguracijske datoteke

Če si ogledate konfiguracijske datoteke, ki smo jih ustvarili prej, in sicer / etc / conf.d / w1.conf in / etc / conf.d / w2.conf, boste opazili, da so vsa pravila »Listen 80« izginila in dodanih je nekaj novih vrstic, ki strežniku sporočajo, da je treba komunikacijo šifrirati in lokacijo certifikatov in ključev za izvedbo omenjenega šifriranja.

Močno priporočam, da si ogledate konfiguracijske datoteke, saj vas lahko tudi naučite, kako pravilno namestiti certifikate in pisati konfiguracijske datoteke.

Podaljšanje certifikata

Tipična potrdila LetsEncrypt so veljavna 90 dni in preden potečejo, jih morate obnoviti. Certbot lahko uporabite za prvo suho zagon obnove, tako da zaženete ukaz:

$ sudo certbot renew --dry-run

Če je operacija uspela, boste videli naslednje sporočilo:

Čestitamo, vse obnovitve so uspele. Obnovljeni so bili naslednji certifikati:

/ etc / letsencrypt / live / ww1.ranvirslog.com / polna veriga.pem (uspeh)
** DRY RUN: simuliranje "obnavljanja certbota" blizu izteka veljavnosti certbota
** (Zgornja preizkusna potrdila niso bila shranjena.)

Zdaj lahko dodate opravilo Cron, ki se bo poskušalo podaljšati vsak teden. Certbot certifikatov ne bo podaljšal, razen če za to resnično plačajo, zato vam ni treba skrbeti. Ukaz za dejansko podaljšanje je:

$ certbot obnovi

Dodajte ga v korenovo opravilo cron z uporabo:

$ sudo crontab -e

V naslednjem pozivu izberite svoj najljubši urejevalnik (izberite Nano, če niste prepričani) in dodajte naslednje vrstice na konec zdaj odprte datoteke:

..
# Na primer, lahko zaženete varnostno kopijo vseh svojih uporabniških računov
# ob 5 a.m vsak teden z:
# 0 5 * * 1 tar -zcf / var / varnostne kopije / home.tgz / domov /
#
# Za več informacij glejte strani z navodili za crontab (5) in cron (8)
#
# m h dom mon dow ukaz
* 2 * * 2 certbot podaljša

To bo zagnalo ukaz za obnovo certbota ob 2. uri zjutraj ob kateri koli naključni minuti, drugi dan v tednu.

Zaključek

Če certifikate TLS ne poznate, je lahko eksperimentiranje s stvarmi, kot je HSTS, tvegano. Ker so te spremembe nepovratne. Če pa se želite spustiti po zajčji luknji varnosti, vam toplo priporočam blog Troy Hunt, ki je eden glavnih navdihov tega pisanja.

Kako spremeniti levi in ​​desni gumb miške na računalniku z operacijskim sistemom Windows 10
Povsem normalno je, da so vse naprave računalniške miške ergonomsko zasnovane za desničarje. Na voljo pa so miške, ki so posebej zasnovane za levičarj...
Posnemajte klike miške tako, da v Windows 10 lebdite z miško Clickless Mouse
Uporaba miške ali tipkovnice v napačni drži čezmerne uporabe lahko povzroči veliko zdravstvenih težav, vključno s sevom, sindromom karpalnega kanala i...
S temi brezplačnimi orodji dodajte gibe miške v sistem Windows 10
V zadnjih letih so se računalniki in operacijski sistemi močno razvili. Včasih so morali uporabniki uporabljati ukaze za krmarjenje po upraviteljih da...