Lar kryptere

Nginx Reverse Proxy med HTTPS via LetsEncrypt

Nginx Reverse Proxy med HTTPS via LetsEncrypt
Dette er en oppfølging av min forrige innlegg der vi setter opp en enkel omvendt proxy-server ved hjelp av Nginx. I dette innlegget vil vi sikre forbindelsen mellom klienten og den omvendte proxy-serveren ved hjelp av gratis TLS (a.k.et SSL) sertifikat fra LetsEncrypt. Jeg oppfordrer deg til å sjekke ut det nevnte innlegget på omvendt proxy for det grunnleggende.

Forutsetninger

  1. En server med statisk offentlig IP. Det er her Nginx kjører.
  2. Backend-servere med det tiltenkte nettstedet som kjører over HTTP
  3. Et registrert domenenavn. Jeg skal bruke ranvirslog.com som mitt primære domenenavn og de to nettstedene er på FQDNs - ww1.ranvirslog.com og ww2ranvirslog.com

Oppsett

Så IP-adressene har endret seg siden forrige gang, siden jeg gjør dette oppsettet igjen. Her er de nye IP-ene og vertsnavnene.

VM / vertsnavn Offentlig IP Privat IP Rolle / funksjon
ReverseProxy 68.183.214.151 10.135.127.136 TLS avslutningspunkt og omvendt proxy-server
web1 Ikke relevant 10.135.126.102 Hosting ww1.ranvirslog.com

nettsted over port 80 HTTP

web2 Ikke relevant 10.135.126.187 Hosting

WW2.ranvirslog.com

nettsted over port 80 HTTP

DNS-postene er konfigurert slik at begge nettstedene (forskjellige underdomener) peker mot samme statiske offentlige IP. Dette skjer tilfeldigvis IP-adressen til vår Nginx-omvendte proxy:

En rekord Verdi
ww1.ranvirslog.com 68.183.214.151
WW2.ranvirslog.com 68.183.214.151

For å få vårt omvendte DNS til å fungere over ukryptert HTTP, opprettet vi to filer i / etc / conf.d / kalt ww1.conf og ww2.conf hver med følgende konfigurasjon:

/ etc / conf.d / ww1.konf

server
hør 80;
hør [::]: 80;
servernavn ww1.ranvirslog.com;
plassering /
proxy_pass http: // 10.135.126.102 /;
proxy_buffering av;
proxy_set_header X-Real-IP $ remote_addr;

/ etc / conf.d / ww2.konf

server
hør 80;
hør [::]: 80;
servernavn ww2.ranvirslog.com;
plassering /
proxy_pass http: // 10.135.126.187 /;
proxy_buffering av;
proxy_set_header X-Real-IP $ remote_addr;

Operativsystemet vi bruker er Ubuntu 18.04 LTS og vi har fjernet filen / etc / nginx / sites-enabled / default slik at Nginx kan fungere utelukkende som en omvendt DNS ved hjelp av konfigurasjonene vist ovenfor.

Objektiv

Med omvendt DNS (og backend-nettsteder) allerede i gang, er vårt mål å installere et enkelt TLS-sertifikat for begge FQDN-ene (det er ww1.ranvirslog.com og ww2.ranvirslog.com) på vår Nginx omvendte proxy.

Trafikken mellom en hvilken som helst klient og den omvendte proxyen blir kryptert, men trafikken mellom den omvendte proxyen og backend-serverne blir ikke kryptert. Dette er imidlertid fortsatt et uendelig sikrere alternativ enn ikke å ha HTTPS i det hele tatt. For tilfeller der den omvendte proxyen og de forskjellige webserverne er på samme vert, si at hvis du bruker Docker-containere til å være vert for alle på samme VPS, så er selv denne ukrypterte trafikken inneholdt på en enkelt vert.

Installere Certbot

Certbot er et klientprogram som vil kjøre på vår omvendte proxy-server og forhandle et TLS-sertifikat med LetsEncrypt. Det vil bevise for LetsEncrypt at serveren faktisk har kontroll over FQDN-ene som den hevder å ha kontroll over. Vi vil ikke bekymre oss for hvordan Certbot gjør det.

Tradisjonelt kan du bruke Certbot som en frittstående programvare som bare vil få sertifikatene (som i utgangspunktet bare er lange kryptografiske nøkler) og lagre det på serveren. Men heldigvis er det for de fleste operativsystemer tilpassede plugins for Nginx, Apache og andre programvare. Vi installerer Certbot med Nginx-plugin. Dette vil automatisk konfigurere Nginx til å bruke de nyinnhentede nøklene og kvitte seg med usikre regler som å lytte etter HTTP på port 80.

Hvis du bruker Debian-baserte systemer, som i mitt tilfelle, bruker jeg Ubuntu 18.04 LTS, så er installasjonen en lek.

$ sudo apt oppdatering
$ sudo apt installere programvare-egenskaper-vanlig
$ sudo add-apt-repository universet
$ sudo add-apt-repository ppa: certbot / certbot
$ sudo apt oppdatering
$ sudo apt installere python-certbot-nginx

Andre operativsystemer, din RedHat, Gentoo, Fedora kan følge de offisielle instruksjonene som er oppført her.

Når du har installert Certbot med Nginx Plugin for din kombinasjon av operativsystem kan vi komme i gang.

Få TLS-sertifikater

For å få TLS-sertifikatet for første gang, kjør følgende kommando:

$ sudo certbot --nginx

Dette kommer til å gå gjennom en rekke interaktive spørsmål, som vist nedenfor:

  1. Skriv inn epostadressen din

Lagrer feilsøkingslogg til / var / log / letsencrypt / letsencrypt.Logg
Plugins valgt: Authenticator nginx, Installer nginx
Skriv inn e-postadresse (brukes til pressemeldinger om fornyelse og sikkerhet) (Angi 'c' for å avbryte): [e-postbeskyttet]

  1. Godta vilkårene

Les vilkårene for bruk på https: // letsencrypt.org / dokumenter / LE-SA-v1.2. november-15-2017.pdf. Du må godta å registrere deg hos ACME-serveren på https: // acme-v02.api.letsencrypt.org / katalog
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) ancel: A

  1. Valgfritt nyhetsbrev

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Ville du være villig til å dele e-postadressen din med Electronic Frontier Foundation, en av grunnleggerne av Let's Encrypt-prosjektet og den ideelle organisasjonen som utvikler Certbot? Vi vil gjerne sende deg e-post om arbeidet vårt med å kryptere nettet, EFF-nyheter, kampanjer og måter å støtte digital frihet på.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y) es / (N) o: Y

  1. Det vil da oppdage domenenavnene på serveren din, og hvis du vil velge alle domenene, trykker du bare

Hvilke navn vil du aktivere HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ww1.ranvirslog.com
2: ww2.ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Velg de aktuelle tallene atskilt med komma og / eller mellomrom, eller la inntastingen være tom for å velge alle alternativene som vises (Angi 'c' for å avbryte):

  1. Omdiriger alt til TLS. Jeg valgte alternativ 2 for å omdirigere alt til SSL, men brukssaken din kan variere. For nye backend-installasjoner er det trygt å velge alternativ 2.

Velg om du vil omdirigere HTTP-trafikk til HTTPS, og fjern HTTP-tilgang eller ikke.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: Ingen omdirigering - Gjør ingen ytterligere endringer i webserverkonfigurasjonen.
2: Viderekobling - Gjør alle forespørsler viderekobling for å sikre HTTPS-tilgang. Velg dette for nye nettsteder, eller hvis du er sikker på at nettstedet ditt fungerer på HTTPS. Du kan angre denne endringen ved å redigere webserverens konfigurasjon.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Velg riktig nummer [1-2] og deretter [enter] (trykk 'c' for å avbryte): 2

Hvis alt gikk bra, vil det vise deg denne meldingen, bare for domenenavnene dine i stedet.

Gratulerer! Du har aktivert https: // ww1.ranvirslog.com og https: // ww2.ranvirslog.com Du kan besøke FQDNs og legge merke til at nettstedene nå har hengelåstegnet som antyder at alt er kryptert.

Se på konfigurasjonsfilene

Hvis du ser på konfigurasjonsfilene vi opprettet tidligere, nemlig / etc / conf.d / ww1.conf og / etc / conf.d / ww2.conf, vil du legge merke til at alle "Listen 80" -reglene har forsvunnet, og noen få nye linjer er lagt til, forteller serveren at kommunikasjonen må krypteres og plasseringen av sertifikatene og nøklene for å utføre den nevnte krypteringen.

Jeg anbefaler på det sterkeste å se gjennom konfigurasjonsfilene, siden det også kan lære deg hvordan du installerer serier og skriver konfigurasjonsfiler riktig.

Sertifisering fornyelse

Typiske LetsEncrypt-sertifikater er gyldige i 90 dager, og før de utløper, må du fornye dem. Du kan bruke Certbot til å tørke fornyelsen ved å kjøre kommandoen:

$ sudo certbot fornye - tørk

Hvis operasjonen lykkes, vil du se følgende melding:

Gratulerer, alle fornyelser lyktes. Følgende serier er fornyet:

/ etc / letsencrypt / live / ww1.ranvirslog.com / fullchain.pem (suksess)
** TØRR KJØRING: simulering av 'certbot fornye' nær sertifikatutløpet
** (Testsertifikatene ovenfor er ikke lagret.)

Nå kan du legge til en Cron-jobb som vil forsøke fornyelse hver uke eller så. Certbot vil ikke fornye certene med mindre de virkelig skyldes det, så du trenger ikke å bekymre deg. Kommandoen for faktisk fornyelse er:

$ certbot fornye

Legg det til root's cron-jobb ved å bruke:

$ sudo crontab -e

I den følgende ledeteksten velger du favorittredigeringsprogrammet ditt (Velg Nano hvis du er usikker) og legger til følgende linjer på slutten av den nå åpnede filen:

..
# Du kan for eksempel kjøre en sikkerhetskopi av alle brukerkontoer
# ved 5 a.m hver uke med:
# 0 5 * * 1 tjære -zcf / var / sikkerhetskopier / hjem.tgz / hjem /
#
# For mer informasjon, se manualsidene til crontab (5) og cron (8)
#
# m h dom mon dow kommando
* 2 * * 2 certbot fornye

Dette vil kjøre certbot fornye-kommandoen 2 om morgenen når som helst tilfeldig, den andre dagen i hver uke.

Konklusjon

Hvis du ikke er kjent med TLS-sertifikater, kan det være risikabelt å eksperimentere med ting som HSTS. Siden disse endringene er irreversible. Imidlertid, hvis du vil gå ned i kaninhullet til sikkerhet, kan jeg anbefale Troy Hunts blogg, som er en av hovedinspirasjonene bak denne oppskriften.

Beste spill å spille med håndsporing
Oculus Quest introduserte nylig den gode ideen om håndsporing uten kontrollere. Med et stadig økende antall spill og aktiviteter som utfører støtte en...
Hvordan vise OSD-overlegg i fullskjerm Linux-apper og spill
Å spille fullskjermspill eller bruke apper i distraksjonsfri fullskjermmodus kan avskrekke deg fra relevant systeminformasjon som er synlig i et panel...
Topp 5 spillfangstkort
Vi har alle sett og elsket streaming av spill på YouTube. PewDiePie, Jakesepticye og Markiplier er bare noen av de beste spillerne som har tjent milli...