Nginx omvendt proxy med https via letsencrypt

Nginx omvendt proxy med https via letsencrypt
Dette er en oppfølging av mitt forrige innlegg der vi konfigurerer 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 sist, siden jeg gjør dette oppsettet igjen. Her er de nye IP -ene og vertsnavnene.

VM/Hostname Offentlig IP Privat IP Rolle/funksjon
ReverseProxy 68.183.214.151 10.135.127.136 TLS termineringspunkt og omvendt proxy -server
Web1 N/a 10.135.126.102 Hosting WW1.Ranvirslog.com

Nettsted over port 80 http

Web2 N/a 10.135.126.187 Hosting

2. verdenskrig.Ranvirslog.com

Nettsted over port 80 http

DNS -postene er konfigurert som sådan begge nettstedene (forskjellige underdomener) peker på den samme statiske offentlige IP -en. Dette tilfeldigvis er vår Nginx Reverse Proxys IP -adresse:

En rekord Verdi
WW1.Ranvirslog.com 68.183.214.151
2. verdenskrig.Ranvirslog.com 68.183.214.151

For å få omvendt DNS til å fungere over ukrypterte HTTP, opprettet vi to filer i /etc /conf.d/ navngitt WW1.Conf og WW2.Konf hver med følgende konfigurasjon:

/etc/conf.D/WW1.konf

server
Lytt 80;
Hør [::]: 80;
Server_name 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
Lytt 80;
Hør [::]: 80;
Server_name 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/nettstedene-aktivert/standard slik at Nginx kan fungere rent som en omvendt DNS ved å bruke konfigurasjonene vist ovenfor.

Objektiv

Med omvendt DNS (og backend -nettstedene) som allerede er 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 omvendt proxy.

Trafikken mellom enhver klient og omvendt proxy kommer til å bli kryptert, men trafikken mellom omvendt proxy og backend -serverne er ikke kryptert. Imidlertid er dette fremdeles et uendelig mer sikkert alternativ enn å ikke ha https i det hele tatt. For tilfeller der omvendt proxy og de forskjellige webserverne er på samme vert, si at hvis du bruker Docker -containere for å være vertskap.

Installere CertBot

CertBot er et klientprogram som kjører på vår omvendte proxy -server og forhandler om et TLS -sertifikat med Letsencrypt. Det vil vise seg å laSencrypt 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 den på serveren. Men heldigvis, for de fleste operativsystemer er det tilpassede plugins for Nginx, Apache og andre programvare. Vi installerer CertBot med Nginx -plugin. Dette vil automatisk konfigurere Nginx for å bruke de nyinnhentede nøklene og bli kvitt usikre regler som å lytte til HTTP på port 80.

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

$ sudo apt oppdatering
$ sudo apt installer programvare-properties-felles
$ sudo add-apt-repository univers
$ sudo add-apt-repository ppa: certbot/certbot
$ sudo apt oppdatering
$ sudo apt install python-certbot-nginx

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

Når du har installert CertBot med Nginx -plugin For din kombinasjon av OS kan vi komme til virksomhet.

Få TLS -sertifikater

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

$ sudo certbot --nginx

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

  1. Skriv inn din email

Lagrer feilsøkingslogg til /var/log/letsencrypt/letsencrypt.Logg
Plugins valgt: Authenticator nginx, installasjonsprogram nginx
Skriv inn e -postadresse (brukt for akutt fornyelses- og sikkerhetsvarsler) (Enter 'C' for å avbryte): [email protected]

  1. Enig i Tos

Vennligst les vilkårene for https: // letsencrypt.org/dokumenter/le-sa-v1.2-november-15-2017.PDF. Du må være enig for å registrere deg hos ACME-serveren på https: // acme-v02.api.Letsencrypt.org/katalog
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) Gree/(c) Ancel: a

  1. Valgfritt nyhetsbrev

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Vil du være villig til å dele e-postadressen din med Electronic Frontier Foundation, en grunnleggende partner for Let's Encrypt-prosjektet og den ideelle organisasjonen som utvikler CertBot? Vi vil gjerne sende deg e -post om vårt arbeid som krypterer nettet, EFF -nyheter, kampanjer og måter å støtte digital frihet.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y) es/(n) o: y

  1. Den vil deretter oppdage domenenavnene på serveren din, og hvis du vil velge alle domenene, trykk ganske enkelt

Hvilke navn vil du aktivere HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: WW1.Ranvirslog.com
2: WW2.Ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Velg passende tall atskilt med komma og/eller mellomrom, eller la inngangen være tomt for å velge alle alternativene som vises (skriv inn 'C' for å avbryte):

  1. Omdirigere alt til TLS. Jeg valgte alternativet 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, fjerne HTTP -tilgang.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: Ingen viderekobling - Gjør ingen ytterligere endringer i Webserver -konfigurasjonen.
2: Redirect - Gjør alle forespørsler omdirigert 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] 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 FQDN -ene og legge merke til at nettstedene nå har hengelås -tegnet som antyder at alt er kryptert.

Se på konfigurasjonsfilene

Hvis du ser konfigurasjonsfilene vi opprettet tidligere, nemlig /etc /conf.D/WW1.Conf og /etc /conf.D/WW2.Conf, du vil legge merke til at alle "lytt 80" -reglene har forsvunnet og noen få nye linjer er lagt til, fortell serveren at kommunikasjonen må krypteres og plasseringen av sertifikater og nøkler for å utføre nevnte kryptering.

Jeg anbefaler på det sterkeste å se gjennom konfigurasjonsfilene, siden det også kan lære deg hvordan du kan installere certs og skrive konfigurasjonsfiler riktig.

Sertifiseringsfornyelse

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

$ sudo certbot forny

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

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

/etc/letsencrypt/live/ww1.Ranvirslog.com/fullchain.PEM (suksess)
** Dry Run: Simulering 'CertBot Renew' nær Cert Expiry
** (Testsertifikatene ovenfor er ikke lagret.)

Nå kan du legge til en Cron -jobb som vil prøve fornyelse hver uke eller så. Certbot vil ikke fornye sertifikatene med mindre de virkelig er på grunn av det, slik at du ikke trenger å bekymre deg. Kommandoen for faktisk fornyelse er:

$ CertBot Renew

Legg den til Root's Cron Job ved å bruke:

$ sudo crontab -e

I følgende ledetekst velger du favorittredigereren din (velg Nano hvis du er usikker) og legg til følgende linjer på slutten av den nå åpnede filen:

..
# For eksempel kan du kjøre en sikkerhetskopi av alle brukerkontoer
# kl. 5 a.m hver uke med:
# 0 5 * * 1 TAR -ZCF/VAR/BACKUPS/HJEM.TGZ /Hjem /
#
# For mer informasjon, se de manuelle sidene til Crontab (5) og Cron (8)
#
# m h dom mon dow kommando
* 2 * * 2 Certbot Renew

Dette vil kjøre CertBot Renew -kommandoen klokka 2 om morgenen når som helst, på den andre dagen i hver uke.

Konklusjon

Hvis du er ny på TLS -sertifikater, kan det være risikabelt å eksperimentere med ting som HST. Siden disse endringene er irreversible. Imidlertid, hvis du ønsker å gå ned i kaninhullet av sikkerhet, kan jeg anbefale Troy Hunts blogg, som er en av hovedinspirasjonen bak denne skrivingen.