Giver mulighed for at kryptere

Nginx Reverse Proxy med HTTPS via LetsEncrypt

Nginx Reverse Proxy med HTTPS via LetsEncrypt
Dette er en opfølgning på min forrige indlæg hvor vi opsætter en simpel omvendt proxyserver ved hjælp af Nginx. I dette indlæg vil vi sikre forbindelsen mellem klienten og den omvendte proxyserver ved hjælp af gratis TLS (a.k.et SSL) certifikat fra LetsEncrypt. Jeg opfordrer dig til at tjekke det førnævnte indlæg om omvendt proxy for det grundlæggende.

Forudsætninger

  1. En server med statisk offentlig IP. Det er her, Nginx kører.
  2. Backend-servere med det tilsigtede websted, der kører via HTTP
  3. 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

server
lyt 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

server
lyt 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 --nginx

Dette løber gennem en række interaktive spørgsmål som vist nedenfor:

  1. 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]

  1. 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

  1. 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

  1. 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):

  1. 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øre

Hvis 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 forny

Føj det til root's cron-job ved at bruge:

$ sudo crontab -e

I 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.

Sådan installeres og afspilles Doom på Linux
Introduktion til undergang Doom-serien opstod i 90'erne efter frigivelsen af ​​den originale Doom. Det var et øjeblikkeligt hit, og fra den tid af har...
Vulkan til Linux-brugere
Med hver nye generation af grafikkort ser vi spiludviklere skubbe grænserne for grafisk troskab og komme et skridt tættere på fotorealisme. Men på tro...
OpenTTD vs Simutrans
Oprettelse af din egen transportsimulering kan være sjovt, afslappende og ekstremt lokkende. Derfor skal du sørge for at prøve så mange spil som mulig...