Laten we versleutelen

Nginx Reverse Proxy met HTTPS via LetsEncrypt

Nginx Reverse Proxy met HTTPS via LetsEncrypt
Dit is een vervolg op mijn vorige post waar we een eenvoudige reverse proxy-server opzetten met Nginx. In dit bericht zullen we de verbinding tussen de client en de reverse proxy-server beveiligen met behulp van gratis TLS (a.k.een SSL) certificaat van LetsEncrypt. Ik moedig je aan om het bovengenoemde bericht over reverse proxy te bekijken voor de basis.

Vereisten

  1. Een server met een statisch openbaar IP. Dit is waar Nginx draait.
  2. Backend-servers met de beoogde website die over HTTP draait
  3. Een geregistreerde domeinnaam. Ik zal ranvirslog gebruiken.com als mijn primaire domeinnaam en de twee websites zijn op FQDN's - ww1.ranvirslog.com en ww2ranvirslog.com

Opstelling

Dus de IP-adressen zijn veranderd sinds de laatste keer, aangezien ik deze setup opnieuw doe. Dit zijn de nieuwe IP's en hostnamen.

VM/hostnaam Openbare IP Privé IP Rol/functie
ReverseProxy 68.183.214.151 10.135.127.136 TLS-aansluitpunt en reverse proxy-server proxy
web1 Nvt 10.135.126.102 Hosting ww1.ranvirslog.com

website via poort 80 HTTP

web2 Nvt 10.135.126.187 Hosting

ww2.ranvirslog.com

website via poort 80 HTTP

De DNS-records zijn zo ingesteld dat beide websites (verschillende subdomeinen) naar hetzelfde statische openbare IP verwijzen. Dit is toevallig het IP-adres van onze Nginx reverse proxy:

Een opname Waarde
ww1.ranvirslog.com 68.183.214.151
ww2.ranvirslog.com 68.183.214.151

Om onze reverse DNS te laten werken via niet-versleutelde HTTP, hebben we twee bestanden gemaakt in /etc/conf.d/ genaamd ww1.conf en ww2.conf elk met de volgende configuratie:

/etc/conf.d/ww1.conf

server
luister 80;
luister [::]:80;
servernaam ww1.ranvirslog.com;
plaats /
proxy_pass http://10.135.126.102/;
proxy_buffering uit;
proxy_set_header X-Real-IP $remote_addr;

/etc/conf.d/ww2.conf

server
luister 80;
luister [::]:80;
servernaam ww2.ranvirslog.com;
plaats /
proxy_pass http://10.135.126.187/;
proxy_buffering uit;
proxy_set_header X-Real-IP $remote_addr;

Het besturingssysteem dat we gebruiken is Ubuntu 18.04 LTS en we hebben verwijderd het bestand /etc/nginx/sites-enabled/default zodat Nginx puur als een reverse DNS kan fungeren met behulp van de hierboven getoonde configuraties.

Objectief

Nu de reverse DNS (en de backend-websites) al actief zijn, is ons doel om een ​​enkel TLS-certificaat te installeren voor beide FQDN's (dat is ww1.ranvirslog.com en ww2.ranvirslog.com)  op onze Nginx reverse proxy.

Het verkeer tussen elke client en de reverse proxy wordt versleuteld, maar het verkeer tussen de reverse proxy en de backend-servers is niet versleuteld. Dit is echter nog steeds een oneindig veel veiligere optie dan helemaal geen HTTPS hebben. Voor gevallen waarin de reverse proxy en de verschillende webservers zich op dezelfde host bevinden, bijvoorbeeld als u Docker-containers gebruikt om ze allemaal op dezelfde VPS te hosten, dan bevindt zelfs dit niet-versleutelde verkeer zich op een enkele host.

Certbot installeren

Certbot is een clientprogramma dat op onze reverse proxy-server draait en een TLS-certificaat onderhandelt met LetsEncrypt. Het zal LetsEncrypt bewijzen dat de server in feite controle heeft over de FQDN's waarover hij beweert controle te hebben. We maken ons geen zorgen over hoe Certbot het doet.

Traditioneel kunt u Certbot gebruiken als zelfstandige software die alleen de certificaten (die in feite gewoon lange cryptografische sleutels zijn) zal ophalen en op de server opslaan. Maar gelukkig zijn er voor de meeste besturingssystemen aangepaste plug-ins voor Nginx, Apache en andere software. We zullen de Certbot met Nginx-plug-in installeren. Dit zal Nginx automatisch configureren om de nieuw verkregen sleutels te gebruiken en onveilige regels zoals luisteren naar HTTP op poort 80 te verwijderen.

Als u op Debian gebaseerde systemen gebruikt, zoals in mijn geval, gebruik ik Ubuntu 18.04 LTS, dan is de installatie een fluitje van een cent.

$ sudo apt-update
$ sudo apt install software-properties-common
$ sudo add-apt-repository-universe
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-update
$ sudo apt install python-certbot-nginx

Andere besturingssystemen, je RedHat, Gentoo, Fedora kunnen de officiële instructies volgen zoals hier vermeld.

Nadat u Certbot . hebt geïnstalleerd met Nginx-plug-in voor uw combinatie van besturingssysteem kunnen we aan de slag.

TLS-certificaten behalen

Voer de volgende opdracht uit om het TLS-certificaat voor de eerste keer op te halen:

$ sudo certbot --nginx

Dit gaat door een reeks interactieve vragen, zoals hieronder weergegeven:

  1. Voer je e-mailadres in

Logboek voor foutopsporing opslaan in /var/log/letsencrypt/letsencrypt.log
Geselecteerde plug-ins: Authenticator nginx, Installer nginx
Voer het e-mailadres in (gebruikt voor dringende verlengings- en beveiligingsmeldingen) (Voer 'c' in om te annuleren): [e-mail beveiligd]

  1. Ga akkoord met TOS

Lees de Servicevoorwaarden op https://letsencrypt.org/documents/LE-SA-v1.2-nov-15-2017.pdf. U moet akkoord gaan om u te registreren bij de ACME-server op https://acme-v02.api.letencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

  1. Optionele nieuwsbrief

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Zou je bereid zijn om je e-mailadres te delen met de Electronic Frontier Foundation, een van de oprichters van het Let's Encrypt-project en de non-profitorganisatie die Certbot ontwikkelt? We willen je graag e-mail sturen over ons werk om het web te versleutelen, EFF-nieuws, campagnes en manieren om digitale vrijheid te ondersteunen.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

  1. Het zal dan de domeinnamen op uw server detecteren en als u alle domeinen wilt selecteren, drukt u gewoon op

Voor welke namen wil je HTTPS activeren??
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ww1.ranvirslog.com
2: ww2.ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Selecteer de juiste cijfers gescheiden door komma's en/of spaties, of laat de invoer leeg om alle getoonde opties te selecteren (Voer 'c' in om te annuleren):

  1. Stuur alles door naar TLS. Ik koos voor optie 2, om alles naar SSL om te leiden, maar jouw gebruikssituatie kan verschillen. Voor nieuwe backend-installaties is het veilig om optie 2 te kiezen.

Kies of u HTTP-verkeer wilt omleiden naar HTTPS, HTTP-toegang verwijderenS.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: Geen omleiding - Breng geen verdere wijzigingen aan in de webserverconfiguratie.
2: Redirect - Laat alle verzoeken omleiden naar beveiligde HTTPS-toegang. Kies dit voor nieuwe sites of als u zeker weet dat uw site op HTTPS werkt. U kunt deze wijziging ongedaan maken door de configuratie van uw webserver te bewerken.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Selecteer het juiste nummer [1-2] en vervolgens [enter] (druk op 'c' om te annuleren): 2

Als alles goed is gegaan, wordt dit bericht weergegeven, alleen voor uw domeinnamen.

Gefeliciteerd! Je hebt met succes https://ww1 . ingeschakeld.ranvirslog.com en https://ww2.ranvirslog.com U kunt de FQDN's bezoeken en opmerken dat de websites nu het hangslotteken hebben dat suggereert dat alles gecodeerd is.

Bekijk de configuratiebestanden

Als u de configuratiebestanden bekijkt die we eerder hebben gemaakt, namelijk /etc/conf.d/ww1.conf en /etc/conf.d/ww2.conf, je zult merken dat alle "Listen 80"-regels zijn verdwenen en dat er een paar nieuwe regels zijn toegevoegd, vertel de server dat de communicatie moet worden gecodeerd en de locatie van de certificaten en sleutels om de genoemde codering uit te voeren.

Ik raad ten zeerste aan om de configuratiebestanden te bekijken, omdat dat je ook kan leren hoe je op de juiste manier certificaten installeert en configuratiebestanden schrijft.

Certificering Vernieuwing

Typische LetsEncrypt-certificaten zijn 90 dagen geldig en voordat ze verlopen, moet u ze vernieuwen. U kunt Certbot gebruiken om de vernieuwing eerst droog uit te voeren door de opdracht uit te voeren:

$ sudo certbot vernieuwen --dry-run

Als de bewerking is gelukt, ziet u de volgende melding:

Gefeliciteerd, alle verlengingen zijn gelukt. De volgende certificaten zijn vernieuwd:

/etc/letsencrypt/live/ww1.ranvirslog.com/fullchain.pem (succes)
** DRY RUN: simuleren van 'certbot renew' dichtbij het verstrijken van het certificaat
** (Bovenstaande testcertificaten zijn niet opgeslagen).)

Nu kunt u een Cron-taak toevoegen die elke week of zo zal proberen te vernieuwen. Certbot vernieuwt de certificaten niet tenzij ze daar echt aan toe zijn, dus u hoeft zich geen zorgen te maken. De opdracht voor daadwerkelijke vernieuwing is:

$ certbot vernieuwen

Voeg het toe aan de cron-job van root met:

$ sudo crontab -e

Selecteer in de volgende prompt uw ​​favoriete editor (kies Nano als u het niet zeker weet) en voeg de volgende regels toe aan het einde van het nu geopende bestand:


# U kunt bijvoorbeeld een back-up maken van al uw gebruikersaccounts
# om 5 uur.m elke week met:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# Zie voor meer informatie de handleidingen van crontab(5) en cron(8)
#
# m h  dom mon dow   commando
* 2 * * 2    certbot verlengen

Dit zal de opdracht certbot vernieuwen om 2 uur 's nachts op een willekeurige minuut, op de tweede dag van elke week uitvoeren.

Conclusie

Als TLS-certificaten nieuw voor u zijn, kan experimenteren met zaken als HSTS riskant zijn. Aangezien deze veranderingen onomkeerbaar zijn. Als je echter door het konijnenhol van beveiliging wilt gaan, kan ik de blog van Troy Hunt ten zeerste aanbevelen, wat een van de belangrijkste inspiratiebronnen is achter dit schrijven.

Gratis en open source game-engines voor het ontwikkelen van Linux-games
Dit artikel behandelt een lijst met gratis en open source game-engines die kunnen worden gebruikt voor het ontwikkelen van 2D- en 3D-games op Linux. E...
Shadow of the Tomb Raider voor Linux-zelfstudie
Shadow of the Tomb Raider is de twaalfde toevoeging aan de Tomb Raider-serie - een actie-avonturengame-franchise gemaakt door Eidos Montreal. De game ...
Hoe FPS te verhogen in Linux?
FPS staat voor Beelden per seconde. De taak van FPS is om de framesnelheid te meten bij het afspelen van video's of speluitvoeringen. In eenvoudige wo...