Låter oss kryptera

Nginx Reverse Proxy med HTTPS via LetsEncrypt

Nginx Reverse Proxy med HTTPS via LetsEncrypt
Detta är en uppföljning av min tidigare inlägg där vi ställer in en enkel omvänd proxyserver med Nginx. I det här inlägget kommer vi att säkra anslutningen mellan klienten och den omvända proxyservern med gratis TLS (a.k.ett SSL) certifikat från LetsEncrypt. Jag uppmuntrar dig att kolla in ovannämnda inlägg om omvänd proxy för grunderna.

Förutsättningar

  1. En server med statisk offentlig IP. Det är här Nginx körs.
  2. Backend-servrar med den avsedda webbplatsen som körs över HTTP
  3. Ett registrerat domännamn. Jag kommer att använda ranvirslog.com som mitt primära domännamn och de två webbplatserna finns på FQDNs - ww1.ranvirslog.com och ww2ranvirslog.com

Uppstart

Så IP-adresserna har ändrats sedan förra gången, eftersom jag gör den här inställningen igen. Här är de nya IP-adresserna och värdnamnen.

VM / värdnamn Offentlig IP Privat IP Roll / funktion
ReverseProxy 68.183.214.151 10.135.127.136 TLS avslutningspunkt och omvänd proxyserver
webb1 Ej tillämpligt 10.135.126.102 Hosting ww1.ranvirslog.com

webbplats över port 80 HTTP

web2 Ej tillämpligt 10.135.126.187 Hosting

ww2.ranvirslog.com

webbplats över port 80 HTTP

DNS-posterna är inställda så att båda webbplatserna (olika underdomäner) pekar på samma statiska offentliga IP. Detta råkar vara vår Nginx omvända proxys IP-adress:

En skiva Värde
ww1.ranvirslog.com 68.183.214.151
ww2.ranvirslog.com 68.183.214.151

För att få vår omvända DNS att fungera över okrypterad HTTP skapade vi två filer i / etc / conf.d / heter ww1.conf och ww2.conf var och en med följande konfiguration:

/ etc / conf.d / ww1.konf

server
lyssna 80;
lyssna [::]: 80;
server_namn ww1.ranvirslog.com;
plats /
proxy_pass http: // 10.135.126.102 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;

/ etc / conf.d / ww2.konf

server
lyssna 80;
lyssna [::]: 80;
server_namn ww2.ranvirslog.com;
plats /
proxy_pass http: // 10.135.126.187 /;
proxy_buffering off;
proxy_set_header X-Real-IP $ remote_addr;

Operativsystemet vi använder är Ubuntu 18.04 LTS och vi har tog bort filen / etc / nginx / sites-enabled / default så att Nginx kan fungera som en omvänd DNS med hjälp av konfigurationerna som visas ovan.

Mål

Med omvänd DNS (och backendwebbplatserna) redan igång är vårt mål att installera ett enda TLS-certifikat för båda FQDN: erna (det är ww1.ranvirslog.com och ww2.ranvirslog.com) på vår Nginx omvänd proxy.

Trafiken mellan vilken klient som helst och den omvända proxyn kommer att krypteras men trafiken mellan den omvända proxyn och backend-servrarna krypteras inte. Detta är dock fortfarande ett oändligt säkrare alternativ än att inte ha HTTPS alls. För fall där den omvända proxyn och de olika webbservrarna är på samma värd, säg om du använder Docker-behållare för att vara värd för alla på samma VPS, så till och med denna okrypterade trafik finns på en enda värd.

Installera Certbot

Certbot är ett klientprogram som körs på vår omvända proxyserver och förhandlar om ett TLS-certifikat med LetsEncrypt. Det kommer att bevisa för LetsEncrypt att servern faktiskt har kontroll över FQDN: erna som den påstår sig ha kontroll över. Vi kommer inte att oroa oss för hur Certbot gör det.

Traditionellt kan du använda Certbot som en fristående programvara som bara kommer att få certifikaten (som i grunden bara är långa kryptografiska nycklar) och spara det på servern. Men tack och lov, för de flesta operativsystem finns anpassade plugins för Nginx, Apache och andra programvaror. Vi installerar Certbot med Nginx-plugin. Detta konfigurerar Nginx automatiskt för att använda nycklarna och bli av med osäkra regler som att lyssna på HTTP på port 80.

Om du använder Debian-baserade system, som i mitt fall använder jag Ubuntu 18.04 LTS, då är installationen en lek.

$ sudo apt uppdatering
$ sudo apt installera programvaruegenskaper-gemensamma
$ sudo add-apt-repository-universum
$ sudo add-apt-repository ppa: certbot / certbot
$ sudo apt uppdatering
$ sudo apt installera python-certbot-nginx

Andra operativsystem, din RedHat, Gentoo, Fedora kan följa de officiella instruktionerna som anges här.

När du har installerat Certbot med Nginx Plugin för din kombination av operativsystem kan vi komma igång.

Få TLS-certifikat

För att få TLS-certifikatet för första gången kör du följande kommando:

$ sudo certbot --nginx

Detta kommer att gå igenom en serie interaktiva frågor, som visas nedan:

  1. Skriv in din e-postadress

Sparar felsökningslogg till / var / log / letsencrypt / letsencrypt.logga
Insticksprogram valda: Authenticator nginx, Installer nginx
Ange e-postadress (används för brådskande förnyelse och säkerhetsmeddelanden) (Ange 'c' för att avbryta): [e-postskyddad]

  1. Håller med TOS

Läs användarvillkoren på https: // letsencrypt.org / dokument / LE-SA-v1.2 november-15-2017.pdf. Du måste godkänna för att registrera dig hos ACME-servern på https: // acme-v02.api.letsencrypt.org / katalog
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) ancel: A

  1. Valfritt nyhetsbrev

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Skulle du vara villig att dela din e-postadress med Electronic Frontier Foundation, en grundare av Let's Encrypt-projektet och den ideella organisationen som utvecklar Certbot? Vi vill skicka e-post om vårt arbete med att kryptera nätet, EFF-nyheter, kampanjer och sätt att stödja digital frihet.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y) es / (N) o: Y

  1. Det kommer då att upptäcka domännamnen på din server, och om du vill välja alla domäner trycker du helt enkelt på

Vilka namn vill du aktivera HTTPS för?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ww1.ranvirslog.com
2: ww2.ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Välj lämpliga siffror åtskilda av komma och / eller mellanslag, eller lämna inmatningen tom för att välja alla alternativ som visas (Ange 'c' för att avbryta):

  1. Omdirigera allt till TLS. Jag valde alternativ 2 för att omdirigera allt till SSL men ditt användningsfall kan skilja sig åt. För nya backendinstallationer är det säkert att välja alternativ 2.

Välj om du vill omdirigera HTTP-trafik till HTTPS eller ta bort HTTP-åtkomst.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: Ingen omdirigering - Gör inga ytterligare ändringar i webbserverns konfiguration.
2: omdirigering - Gör alla begäranden omdirigera för att säkerställa HTTPS-åtkomst. Välj detta för nya webbplatser, eller om du är säker på att din webbplats fungerar på HTTPS. Du kan ångra denna ändring genom att redigera din webbservers konfiguration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Välj lämpligt nummer [1-2] och sedan [enter] (tryck på 'c' för att avbryta): 2

Om allt gick bra kommer det att visa dig det här meddelandet, bara för dina domännamn istället.

Grattis! Du har aktiverat https: // ww1.ranvirslog.com och https: // ww2.ranvirslog.com Du kan besöka FQDN: erna och märka att webbplatserna nu har hänglåsskylt som tyder på att allt är krypterat.

Titta på konfigurationsfilerna

Om du visar konfigurationsfilerna vi skapade tidigare, nämligen / etc / conf.d / ww1.conf och / etc / conf.d / ww2.conf, kommer du att märka att alla "Lyssna 80" -reglerna har försvunnit och några nya rader har lagts till berättar för servern att kommunikationen måste krypteras och platsen för certifikaten och nycklarna för att utföra nämnda kryptering.

Jag rekommenderar starkt att du tittar igenom konfigurationsfilerna, eftersom det också kan lära dig hur du korrekt installerar certifikat och skriver konfigurationsfiler.

Förnyelse av certifiering

Typiska LetsEncrypt-certifikat är giltiga i 90 dagar och innan de går ut måste du förnya dem. Du kan använda Certbot för att först köra förnyelsen genom att köra kommandot:

$ sudo certbot förnya - torrkörning

Om åtgärden lyckas ser du följande meddelande:

Grattis, alla förnyelser lyckades. Följande certifikat har förnyats:

/ etc / letsencrypt / live / ww1.ranvirslog.com / fullchain.pem (framgång)
** DRY RUN: simulering av "certbot förnyelse" nära cert utgång
** (Testcertifikaten ovan har inte sparats.)

Nu kan du lägga till ett Cron-jobb som kommer att försöka förnyas varje vecka eller så. Certbot förnyar inte certsna om de inte beror på det, så du behöver inte oroa dig. Kommandot för faktisk förnyelse är:

$ certbot förnya

Lägg till det i root's cron-jobb genom att använda:

$ sudo crontab -e

I följande fråga väljer du din favoritredigerare (Välj Nano om du är osäker) och lägg till följande rader i slutet av den nu öppnade filen:

..
# Du kan till exempel köra en säkerhetskopia av alla dina användarkonton
# vid 5 a.m varje vecka med:
# 0 5 * * 1 tjära -zcf / var / säkerhetskopior / hem.tgz / hem /
#
# För mer information, se manualsidorna för crontab (5) och cron (8)
#
# m h dom mon dow kommando
* 2 * * 2 certbot förnyas

Detta kör certbot-förnyelsekommandot klockan 2 på morgonen vid vilken slumpmässig minut som helst, den andra dagen i varje vecka.

Slutsats

Om du inte är ny på TLS-certifikat kan det vara riskabelt att experimentera med saker som HSTS. Eftersom dessa förändringar är oåterkalleliga. Men om du vill gå ner i kaninhålet av säkerhet kan jag starkt rekommendera Troy Hunts blogg som är en av huvudinspirationerna bakom denna skrivning.

Vulkan för Linux-användare
Med varje ny generation grafikkort ser vi spelutvecklare driva gränserna för grafisk trohet och komma ett steg närmare fotorealism. Men trots all kred...
OpenTTD vs Simutrans
Att skapa din egen transportsimulering kan vara rolig, avkopplande och extremt lockande. Det är därför du måste se till att du testar så många spel so...
OpenTTD-handledning
OpenTTD är ett av de mest populära affärssimuleringsspelen där ute. I det här spelet måste du skapa en underbar transportaffär. Du kommer dock att bör...