Omogućuje šifriranje

Nginx obrnuti proxy s HTTPS-om putem LetsEncrypt

Nginx obrnuti proxy s HTTPS-om putem LetsEncrypt
Ovo je nastavak mog prethodni post gdje postavljamo jednostavni obrnuti proxy poslužitelj pomoću Nginxa. U ovom ćemo postu osigurati vezu između klijenta i obrnutog proxy poslužitelja pomoću besplatnog TLS-a (a.k.SSL) certifikat od LetsEncrypt. Pozivam vas da pogledate gore spomenuti post o obrnutom proxyju za osnove.

Preduvjeti

  1. Poslužitelj sa statičnom javnom IP adresom. Ovdje radi Nginx.
  2. Backend poslužitelji s predviđenom web stranicom koja radi preko HTTP-a
  3. Registrirano ime domene. Koristit ću ranvirslog.com kao moje primarno ime domene, a dva su web mjesta na FQDN-ovima - ww1.ranvirslog.com i ww2ranvirslog.com

Postaviti

Dakle, IP adrese su se promijenile od posljednjeg puta, budući da ponovno radim ovo postavljanje. Evo novih IP-ova i imena hostova.

VM / Ime hosta Javna IP Privatna IP Uloga / funkcija
ReverseProxy 68.183.214.151 10.135.127.136 TLS završna točka i obrnuti proxy poslužitelj
web1 N / A 10.135.126.102 Hosting ww1.ranvirslog.com

web mjesto preko porta 80 HTTP

web2 N / A 10.135.126.187 Usluge poslužitelja

ww2.ranvirslog.com

web mjesto preko porta 80 HTTP

DNS zapisi postavljeni su kao takvi, što obje web stranice (različite poddomene) vode na istu statičku javnu IP adresu. To je slučajno IP adresa našeg Nginx obrnutog proxyja:

Zapis Vrijednost
ww1.ranvirslog.com 68.183.214.151
ww2.ranvirslog.com 68.183.214.151

Da bi naš obrnuti DNS radio preko nešifriranog HTTP-a, stvorili smo dvije datoteke u / etc / conf.d / nazvano ww1.conf i ww2.konfigurirajte svaku sa sljedećom konfiguracijom:

/ etc / conf.d / ww1.konf

poslužitelj
slušati 80;
poslušajte [::]: 80;
ime_poslužitelja ww1.ranvirslog.com;
lokacija /
proxy_pass http: // 10.135.126.102 /;
isključeno proxy_buffering;
proxy_set_header X-Real-IP $ remote_addr;

/ etc / conf.d / w2.konf

poslužitelj
slušati 80;
poslušajte [::]: 80;
ime_poslužitelja ww2.ranvirslog.com;
lokacija /
proxy_pass http: // 10.135.126.187 /;
isključeno proxy_buffering;
proxy_set_header X-Real-IP $ remote_addr;

Operativni sustav koji koristimo je Ubuntu 18.04 LTS i imamo uklonjen datoteka / etc / nginx / sites-enabled / default, tako da Nginx može djelovati čisto kao obrnuti DNS koristeći gore prikazane konfiguracije.

Cilj

S obrnutim DNS-om (i pozadinskim web mjestima) koji su već pokrenuti i rade, naš je cilj instalirati jedan TLS certifikat za oba FQDN-a (to je ww1.ranvirslog.com i ww2.ranvirslog.com) na našem obrnutom proxyju Nginx.

Promet između bilo kojeg klijenta i obrnutog proxyja bit će šifriran, ali promet između obrnutog proxyja i pozadinskih poslužitelja nije šifriran. Međutim, ovo je još uvijek beskrajno sigurnija opcija nego što uopće nema HTTPS. U slučajevima kada su obrnuti proxy i različiti web poslužitelji na istom hostu, recimo ako koristite Docker spremnike za hostiranje svih na istom VPS-u, tada je čak i taj nešifrirani promet sadržan na jednom hostu.

Instaliranje Certbota

Certbot je klijentski program koji će se izvoditi na našem obrnutom proxy poslužitelju i dogovarati TLS certifikat s LetsEncrypt. LetsEncrypt-u će dokazati da poslužitelj u stvari ima kontrolu nad FQDN-ovima za koje tvrdi da imaju kontrolu nad. Nećemo se brinuti kako Certbot to radi.

Tradicionalno Certbot možete koristiti kao samostalni softver koji će samo dobiti certifikate (koji su u osnovi samo dugi kriptografski ključevi) i spremiti ih na poslužitelj. Ali srećom, za većinu operativnih sustava postoje prilagođeni dodaci za Nginx, Apache i druge softverske programe. Instalirat ćemo Certbot s dodatkom Nginx. Ovo će automatski konfigurirati Nginx da koristi novonabavljene ključeve i riješi se nesigurnih pravila poput preslušavanja HTTP-a na portu 80.

Ako koristite sustave temeljene na Debianu, kao u mom slučaju, koristim Ubuntu 18.04 LTS, tada je instalacija povjetarac.

$ sudo apt ažuriranje
$ sudo apt instalirati svojstva softvera-zajednička
$ sudo add-apt-repozitorij svemir
$ sudo add-apt-repository ppa: certbot / certbot
$ sudo apt ažuriranje
$ sudo apt instalirajte python-certbot-nginx

Ostali operativni sustavi, vaš RedHat, Gentoo i Fedora mogu slijediti službene upute kako su ovdje navedene.

Nakon što instalirate Certbot s dodatkom Nginx za vašu kombinaciju OS-a možemo prijeći na posao.

Dobivanje TLS certifikata

Da biste prvi put dobili TLS certifikat, pokrenite sljedeću naredbu:

$ sudo certbot --nginx

Ovo će se provoditi kroz niz interaktivnih pitanja, kao što je prikazano u nastavku:

  1. Unesi svoj email

Spremanje dnevnika ispravljanja pogrešaka u / var / log / letsencrypt / letsencrypt.zapisnik
Odabrani dodaci: Autentifikator nginx, Instalacijski nginx
Unesite adresu e-pošte (koristi se za hitne obnove i sigurnosne obavijesti) (unesite 'c' za otkazivanje): [e-pošta zaštićena]

  1. Pristanite na TOS

Molimo pročitajte Uvjete pružanja usluge na https: // letsencrypt.org / documents / LE-SA-v1.2. studenoga-15-2017.pdf. Morate se složiti kako biste se registrirali na ACME poslužitelju na https: // acme-v02.api.letsencrypt.org / direktorij
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) predak: A

  1. Neobvezni bilten

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Biste li voljni podijeliti svoju adresu e-pošte s Electronic Frontier Foundation, osnivačem projekta Let's Encrypt i neprofitnom organizacijom koja razvija Certbot? Željeli bismo vam poslati e-poštu o našem radu na šifriranju weba, EFF vijestima, kampanjama i načinima za podršku digitalnoj slobodi.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y) es / (N) o: Y

  1. Zatim će otkriti imena domena na vašem poslužitelju, a ako želite odabrati sve domene, jednostavno pritisnite

Za koja imena biste željeli aktivirati HTTPS?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ww1.ranvirslog.com
2: ww2.ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Odaberite odgovarajuće brojeve odvojene zarezima i / ili razmacima ili ostavite unos prazan da biste odabrali sve prikazane opcije (unesite 'c' da biste odustali):

  1. Sve preusmjerite na TLS. Odabrao sam opciju 2, da sve preusmjerim na SSL, ali vaš se slučaj korištenja može razlikovati. Za nove pozadinske instalacije sigurno je odabrati opciju 2.

Odaberite hoćete li HTTP promet preusmjeriti na HTTPS uklanjanjem HTTP pristupa.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: Bez preusmjeravanja - Ne mijenjajte daljnje konfiguracije web poslužitelja.
2: Preusmjeravanje - Neka svi zahtjevi budu preusmjereni kako bi se osigurao HTTPS pristup. Odaberite ovo za nove web lokacije ili ako ste sigurni da vaša web lokacija radi na HTTPS-u. Ovu promjenu možete poništiti uređivanjem konfiguracije web poslužitelja.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Odaberite odgovarajući broj [1-2], a zatim [unesite] (pritisnite 'c' da biste odustali): 2

Ako je sve prošlo u redu, prikazat će vam ovu poruku, samo za imena vaših domena.

Čestitamo! Uspješno ste omogućili https: // ww1.ranvirslog.com i https: // ww2.ranvirslog.com Možete posjetiti FQDN-ove i primijetiti da web stranice sada imaju znak lokota koji sugerira da je sve šifrirano.

Pogledajte konfiguracijske datoteke

Ako pregledate konfiguracijske datoteke koje smo stvorili ranije, odnosno / etc / conf.d / ww1.conf i / etc / conf.d / w2.conf, primijetit ćete da su sva pravila "Listen 80" nestala i dodano je nekoliko novih redaka i recite poslužitelju da komunikacija treba biti šifrirana i mjesto certova i ključeva za izvođenje spomenute enkripcije.

Toplo preporučujem pregledavanje konfiguracijskih datoteka, jer vas to također može naučiti kako pravilno instalirati certove i pisati konfiguracijske datoteke.

Obnova certifikata

Uobičajeni LetsEncrypt certifikati vrijede 90 dana i prije isteka trebate ih obnoviti. Certbot možete koristiti za prvo suho pokretanje obnove, pokretanjem naredbe:

$ sudo certbot obnovi --dry-run

Ako operacija uspije, vidjet ćete sljedeću poruku:

Čestitamo, sve obnove su uspjele. Obnovljeni su sljedeći certifikati:

/ etc / letsencrypt / live / ww1.ranvirslog.com / puni lanac.pem (uspjeh)
** SUHO RUN: simuliranje 'obnove certbota' blizu isteka certbota
** (Gore navedeni certifikati nisu spremljeni.)

Sada možete dodati posao Cron koji će pokušati obnoviti svaki tjedan ili tako nekako. Certbot neće obnoviti certifikate ako za to zaista ne trebaju, tako da ne morate brinuti. Naredba za stvarnu obnovu je:

$ certbot obnovi

Dodajte ga u root-ov cron posao pomoću:

$ sudo crontab -e

U sljedećem odzivu odaberite svoj omiljeni uređivač (Pick Nano ako niste sigurni) i dodajte sljedeće retke na kraj sada otvorene datoteke:

..
# Na primjer, možete pokrenuti sigurnosnu kopiju svih svojih korisničkih računa
# u 5 a.m svaki tjedan sa:
# 0 5 * * 1 tar -zcf / var / sigurnosne kopije / home.tgz / home /
#
# Za više informacija pogledajte stranice priručnika za crontab (5) i cron (8)
#
# m h dom mon dow naredba
* 2 * * 2 obnova certbota

Ovo će pokrenuti naredbu za obnavljanje certbota u 2 ujutro u bilo kojoj slučajnoj minuti, drugog dana svakog tjedna.

Zaključak

Ako ste novi u TLS certifikatima, eksperimentiranje sa stvarima poput HSTS-a može biti rizično. Budući da su ove promjene nepovratne. Međutim, ako se želite spustiti kroz zečju rupu sigurnosti, toplo preporučujem blog Troy Hunt-a koji je jedna od glavnih inspiracija za ovo pisanje.

Kako koristiti AutoKey za automatizaciju Linux igara
AutoKey je uslužni program za automatizaciju radne površine za Linux i X11, programiran na Python 3, GTK i Qt. Koristeći njegovu skriptiranje i MACRO ...
Kako prikazati brojač FPS-a u Linux igrama
Linux gaming dobio je velik poticaj kada je Valve najavio Linux podršku za Steam klijent i njihove igre 2012. godine. Od tada su mnoge AAA i indie igr...
Kako preuzeti i igrati Sid Meier's Civilization VI na Linuxu
Uvod u igru Civilization 6 moderan je pogled na klasični koncept predstavljen u seriji igara Age of Empires. Ideja je bila prilično jednostavna; započ...