Cum să securizez Nginx cu Let’s Encrypt pe Ubuntu 18.04
Introducere
Let’s Encrypt este o autoritate pentru certificate (Certificate Authority CA) care furnizează o metodă ușoară de obținere și intalare a certificatelor TLS/SSL gratuite, astfel permițând folosirea protocolului criptat HTTPS pe servere web. Acest serviciu simplifică procesul, prin furnizarea unui client software, denumit Certbot, care încearcă să automatizeze cei mai mulți (dacă nu toți) pașii necesari. La momentul actual, întregul procesul de obținere și instalare este automatizat complet pentru serverele web Apache și Nginx.
În acest tutorial veți folosi Certbot-ul pentru a obține un certificat SSL gratuit pentru Nginx, instalat pe Ubuntu 18.04 și, deasemenea, configurarea acestuia pentru reînnoirea automată.
Acest tutorial va folosi fișiere separate tip bloc de configurare în locul fișierului implicit. Recomand creerea unui nou fișier de configurare tip bloc Ngnix pentru fiecare domeniu, deoarece ajută, cu siguranță, la evitarea greșelilor obișnuite și menține fișierele implicite ca și configurație de rezervă, în cazul unor erori.
De ce veți avea nevoie?
Pentru a putea termina cu succes acest tutorial, veți avea nevoie de următoarele:
- Un server cu Ubuntu 18.04 configurat urmărind acest tutorial setările inițiale pentru un server cu Ubuntu 18.04, inclusiv un utilizator non-root cu privilegii sudo și un firewall, de preferință ufw.
- Un nume de domeniu complet înregistrat. În acest tutorial vom folosi pe tot parcursul exemplu.ro. Puteți cumpăra un nume de domeniu de la Namecheap, RoTLD, sau puteți obține unul gratuit de la Freenom, sau, dacă nu agreați nici una din opțiunile enumerate, puteți folosi un registrar care vă convine.
- Ambele intrări DNS trebuie configurate pentru a indica serverul dvs. Voi încerca să fac un tutorial despre cum adăugăm aceste intrări DNS pentru platforma Freenom, asta pentru că domeniile sunt gratuite, deci accesibile oricui, iar principiul se poate aplica oricărei platforme.
- O intrare tip A cu
exemplu.ro
care indică adresa publică a serverului dvs. - O intrare tip A cu
www.exemplu.ro
care indică adresa publică a serverului dvs.
- O intrare tip A cu
- Nginx instalat urmărind tutorialul cum să instalezi Nginx pe Ubuntu 18.04. Asigurați-vă că aveți un fișier bloc de configurare pentru domeniul dvs. Acest tutorial va folosi
/etc/nginx/sites-available/exemplu.ro
ca și exemplu.
Pasul 1 — Instalarea Certbot
Primul pas pentru utilizarea Let’s Encrypt, în scopul obținerii certificatului SSL, este instalarea programului (aplicației) Certbot pe serverul dvs.
Certbot este dezvoltat în mod activ, din acest motiv pachetele software pentru Certbot pe care Ubuntu le oferă tind să fie versiuni mai vechi. În orice caz, dezvoltatorii Certbot mențin un repo software cu versiuni actualizate, așa că îl vom folosi pe acesta.
Mai întâi să adăugăm repo-ul:
$ sudo add-apt-repository ppa:certbot/certbot
Va trebui să apăsați ENTER
pentru a accepta.
Instalați pachetul software Certbot pentru Nginx cu ajutorulapt
:
sudo apt install python-certbot-nginx
Certbot este acum gata de a fi folosit, dar pentru a configura SSL pentru Nginx, avem nevoie să verificăm câteva din configurările acestuia.
Pasul 2 — Confirmarea configurației Nginx
Certbot are nevoie să fie capabil să localizeze fișierul bloc server în configurația Nginx pentru a fi în măsură să configureze SSL. Mai exact, face asta prin căutarea directivei server_name
care se potrivește numelui de domeniu pentru care ați cerut un certificat.
Dacă ați urmat pasul referitor la setarea unui fișier bloc server din tutorialul de instalare Nginx, ar trebui să aveți un fișier bloc server pentru domeniul dvs. /etc/nginx/sites-available/exemplu.ro
cu directiva server_name
deja configurată corespunzător.
Pentru a verifica, deschideți fișierul bloc server pentru domeniul dvs. folosind nano
sau alt editor de text favorit:
$ sudo nano /etc/nginx/sites-available/exemplu.ro
Găsiți linia în care există directiva server_name.
Ar trebui să arate ceva de genul:
/etc/nginx/sites-available/example.com
...
server_name example.com www.example.com;
...
Dacă este așa, ieșiți din editor și mergeți la următorul pas.
Dacă nu, actualizați în așa fel încât să se potrivească cu exemplul sau cu numele dvs de domeniu. Apoi salvați fișierul, ieșiți din editor și verificați sintaxa configurației Nginx:
$ sudo nginx -t
Dacă vedeți afișată vreo eroare, redeschideți fișierul de configurare bloc server și verificați dacă sunt greșeli de tastare sau caractere lipsă. Imediat ce sintaxa fișierului de configurare este corectă, reîncărcați Nginx pentru a intra în funcțiune noua configurație:
$ sudo systemctl reload nginx
Certbot poate acum găsi blocul server de configurare și îl poate actualiza.
Acum, haideți să actualizăm firewall-ul pentru a permite traficul HTTPS.
Pasul 3 — Permiterea protocolului HTTPS prin Firewall
Dacă aveți firewall-ul ufw
activat, așa cum am recomandat la începutul tutorialului, veți avea nevoie să ajustați setările pentru a permite traficul HTTPS. Din fericire, Nginx se înregistrază cu câteva profile pentru ufw
la instalare.
Puteți vizualiza setările curente tastând:
$ sudo ufw status
Probabil mesajul afișat va arăta ceva de genul textului de mai jos, ceea ce înseamnă că numai traficul HTTP este permis pentru serverul web:
Mesaj afișat:
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Pentru a permite trafic HTTPS adițional, activați profilul Nginx Full și stergeți profilul Nginx HTTP care deja devine redundant:
$ sudo ufw allow 'Nginx Full'
$ sudo ufw delete allow 'Nginx HTTP'
Status-ul firewall-ului ar trebui să arate cam așa:
$ sudo ufw status
Mesaj afișat:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Următorul pas, ar fi să rulăm Certbot-ul pentru a crea certificatele necesare.