Forudsætninger
- En server med statisk offentlig IP. Det er her, Nginx kører.
- Backend-servere med det tilsigtede websted, der kører via HTTP
- Et registreret domænenavn. Jeg bruger ranvirslog.com som mit primære domænenavn og de to websteder er på FQDNs - ww1.ranvirslog.com og ww2ranvirslog.com
Opsætning
Så IP-adresserne er ændret siden sidste gang, da jeg laver denne opsætning igen. Her er de nye IP'er og værtsnavne.
VM / værtsnavn | Offentlig IP | Privat IP | Rolle / funktion |
ReverseProxy | 68.183.214.151 | 10.135.127.136 | TLS-termineringspunkt og reverse proxyserver |
web1 | Ikke relevant | 10.135.126.102 | Hosting ww1.ranvirslog.com websted via port 80 HTTP |
web2 | Ikke relevant | 10.135.126.187 | Hosting 2. verdenskrig.ranvirslog.com websted via port 80 HTTP |
DNS-posterne er opsat som sådan begge websteder (forskellige underdomæner) peger på den samme statiske offentlige IP. Dette er tilfældigvis vores Nginx reverse proxy's IP-adresse:
En post | Værdi |
ww1.ranvirslog.com | 68.183.214.151 |
2. verdenskrig.ranvirslog.com | 68.183.214.151 |
For at få vores omvendte DNS til at fungere over ukrypteret HTTP oprettede vi to filer i / etc / conf.d / navngivet ww1.conf og ww2.conf hver med følgende konfiguration:
/ etc / conf.d / ww1.konf
serverlyt 80;
lyt [::]: 80;
servernavn ww1.ranvirslog.com;
Beliggenhed /
proxy_pass http: // 10.135.126.102 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;
/ etc / conf.d / ww2.konf
serverlyt 80;
lyt [::]: 80;
servernavn ww2.ranvirslog.com;
Beliggenhed /
proxy_pass http: // 10.135.126.187 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;
Det operativsystem, vi bruger, er Ubuntu 18.04 LTS og vi har fjernet filen / etc / nginx / sites-enabled / default, så Nginx kan fungere udelukkende som en omvendt DNS ved hjælp af konfigurationerne vist ovenfor.
Objektiv
Med det omvendte DNS (og backend-webstederne), der allerede er i gang, er vores mål at installere et enkelt TLS-certifikat til begge FQDN'er (det er ww1.ranvirslog.com og ww2.ranvirslog.com) på vores Nginx omvendte proxy.
Trafikken mellem enhver klient og den omvendte proxy bliver krypteret, men trafikken mellem den omvendte proxy og backend-serverne er ikke krypteret. Dette er dog stadig en uendeligt mere sikker mulighed end slet ikke at have HTTPS. I tilfælde, hvor den omvendte proxy og de forskellige webservere er på den samme vært, skal du sige, at hvis du bruger Docker-containere til at være vært for alle på den samme VPS, er selv denne ukrypterede trafik indeholdt på en enkelt vært.
Installation af Certbot
Certbot er et klientprogram, der kører på vores reverse proxyserver og forhandler et TLS-certifikat med LetsEncrypt. Det vil bevise for LetsEncrypt, at serveren faktisk har kontrol over de FQDN'er, som den hævder at have kontrol over. Vi bekymrer os ikke om, hvordan Certbot gør det.
Traditionelt kan du bruge Certbot som en enkeltstående software, der bare får certifikaterne (som stort set kun er lange kryptografiske nøgler) og gemmer det på serveren. Men heldigvis er der for de fleste operativsystemer brugerdefinerede plugins til Nginx, Apache og andre software. Vi installerer Certbot med Nginx-plugin. Dette konfigurerer automatisk Nginx til at bruge de nyligt opnåede nøgler og slippe af med usikre regler som at lytte til HTTP på port 80.
Hvis du bruger Debian-baserede systemer, som i mit tilfælde bruger jeg Ubuntu 18.04 LTS, så er installationen en leg.
$ sudo apt opdatering$ sudo apt installere software-egenskaber-fælles
$ sudo add-apt-repository univers
$ sudo add-apt-repository ppa: certbot / certbot
$ sudo apt opdatering
$ sudo apt installere python-certbot-nginx
Andre operativsystemer, din RedHat, Gentoo, Fedora kan følge de officielle instruktioner som angivet her.
Når du har installeret Certbot med Nginx-plugin for din kombination af OS kan vi komme i gang.
Få TLS-certifikater
For at få TLS-certifikatet for første gang skal du køre følgende kommando:
$ sudo certbot --nginxDette løber gennem en række interaktive spørgsmål som vist nedenfor:
- Indtast din e-mail
Gemmer fejllog til / var / log / letsencrypt / letsencrypt.log
Valgte plugins: Authenticator nginx, Installer nginx
Indtast e-mail-adresse (bruges til presserende fornyelse og sikkerhedsmeddelelser) (Indtast 'c' for at annullere): [e-mail beskyttet]
- Enig om TOS
Læs servicevilkårene på https: // letsencrypt.org / dokumenter / LE-SA-v1.2. november-15-2017.pdf. Du skal acceptere for at kunne registrere dig hos ACME-serveren på https: // acme-v02.api.letsencrypt.org / bibliotek
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) ancel: A
- Valgfrit nyhedsbrev
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Vil du være villig til at dele din e-mail-adresse med Electronic Frontier Foundation, en grundlæggende partner for Let's Encrypt-projektet og den nonprofitorganisation, der udvikler Certbot? Vi vil gerne sende dig e-mail om vores arbejde med at kryptere internettet, EFF-nyheder, kampagner og måder at understøtte digital frihed på.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y) es / (N) o: Y
- Det registrerer derefter domænenavne på din server, og hvis du vil vælge alle domæner, skal du blot trykke på
Hvilke navne vil du aktivere HTTPS til?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ww1.ranvirslog.com
2: ww2.ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Vælg de relevante tal adskilt af kommaer og / eller mellemrum, eller lad input være tomt for at vælge alle viste indstillinger (Indtast 'c' for at annullere):
- Omdiriger alt til TLS. Jeg valgte mulighed 2 for at omdirigere alt til SSL, men din brugssag kan variere. For nye backend-installationer er det sikkert at vælge mulighed 2.
Vælg om HTTP-trafik skal omdirigeres til HTTPS eller ej, fjernelse af HTTP-adgang.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Ingen omdirigering - Foretag ingen yderligere ændringer i webserverkonfigurationen.
2: Omdirigering - Foretag alle anmodninger omdirigeret for at sikre HTTPS-adgang. Vælg dette til nye websteder, eller hvis du er sikker på, at dit websted fungerer på HTTPS. Du kan fortryde denne ændring ved at redigere konfigurationen af din webserver.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Vælg det passende nummer [1-2] og derefter [enter] (tryk på 'c' for at annullere): 2
Hvis alt gik godt, viser det dig denne besked, bare for dine domænenavne i stedet.
Tillykke! Du har aktiveret https: // ww1.ranvirslog.com og https: // ww2.ranvirslog.com Du kan besøge FQDN'erne og bemærke, at webstederne nu har hængelåstegnet, der tyder på, at alt er krypteret.
Se på konfigurationsfilerne
Hvis du ser de konfigurationsfiler, vi oprettede tidligere, nemlig / etc / conf.d / ww1.conf og / etc / conf.d / ww2.conf, vil du bemærke, at alle "Lyt 80" -reglerne er forsvundet, og et par nye linjer er blevet tilføjet, fortæller serveren, at kommunikationen skal krypteres, og placeringen af certifikaterne og nøglerne for at udføre den nævnte kryptering.
Jeg anbefaler på det kraftigste at gennemse config-filerne, da det også kan lære dig, hvordan du korrekt installerer certs og skriver konfigurationsfiler.
Fornyelse af certificering
Typiske LetsEncrypt-certifikater er gyldige i 90 dage, og inden de udløber, skal du forny dem. Du kan bruge Certbot til først at tørre køre fornyelsen ved at køre kommandoen:
$ sudo certbot fornye - tørre-køreHvis handlingen lykkes, vises følgende meddelelse:
Tillykke, alle fornyelser lykkedes. Følgende certer er fornyet:
/ etc / letsencrypt / live / ww1.ranvirslog.com / fullchain.pem (succes)** TØR KØR: simulering af 'certbot-fornyelse' tæt på certifikatudløb
** (Testcertifikaterne ovenfor er ikke gemt.)
Nu kan du tilføje et Cron-job, der forsøger at forny hver uge eller deromkring. Certbot fornyer ikke certerne, medmindre de virkelig skyldes det, så du behøver ikke bekymre dig. Kommandoen for faktisk fornyelse er:
$ certbot fornyFøj det til root's cron-job ved at bruge:
$ sudo crontab -eI den følgende prompt skal du vælge din yndlingseditor (Vælg Nano, hvis du er usikker) og tilføje følgende linjer i slutningen af den nu åbnede fil:
..# For eksempel kan du køre en sikkerhedskopi af alle dine brugerkonti
# ved 5 a.m hver uge med:
# 0 5 * * 1 tjære -zcf / var / sikkerhedskopier / hjem.tgz / hjem /
#
# For mere information se manualsiderne for crontab (5) og cron (8)
#
# m h dom mon dow kommando
* 2 * * 2 certbot fornye
Dette kører certbot-forny-kommandoen 2 om morgenen på ethvert tilfældigt minut den anden dag i hver uge.
Konklusion
Hvis du er ny på TLS-certifikater, kan det være risikabelt at eksperimentere med ting som HSTS. Da disse ændringer er irreversible. Men hvis du ønsker at gå ned i kaninhullet af sikkerhed, kan jeg varmt anbefale Troy Hunts blog, som er en af de vigtigste inspiration bag denne opskrivning.