Nginx Reverse Proxy z HTTPS za pośrednictwem LetsEncrypt

Nginx Reverse Proxy z HTTPS za pośrednictwem LetsEncrypt
To jest kontynuacja mojego poprzedniego postu, w którym konfigurujemy prosty odwrotny serwer proxy za pomocą Nginx. W tym poście zabezpieczymy połączenie między klientem a odwrotnym serwerem proxy za pomocą bezpłatnych TLS (a.k.certyfikat SSL) z LetsEncrypt. Zachęcam do sprawdzenia wspomnianego postu na odwrotnym proxy dla podstaw.

Wymagania wstępne

  1. Serwer ze statycznym publicznym adresem IP. Tutaj działa Nginx.
  2. Serwery zaplecze z zamierzoną witryną działającą przez HTTP
  3. Zarejestrowana nazwa domeny. Będę używał ranvirslog.com jako moja główna nazwa domeny i dwie strony internetowe są w FQDNS - WW1.Ranvirslog.com i WW2RANVIRSLOG.com

Organizować coś

Tak więc adresy IP zmieniły się od ostatniego razu, ponieważ ponownie wykonuję tę konfigurację. Oto nowe IPS i nazwy hostów.

VM/nazwa hosta Publiczne IP Prywatny IP Rola/funkcja
Odwrotna proksja 68.183.214.151 10.135.127.136 TLS Punkt zakończenia i odwrotny serwer proxy
Web1 Nie dotyczy 10.135.126.102 Hosting WW1.Ranvirslog.com

Witryna nad portem 80 HTTP

Web2 Nie dotyczy 10.135.126.187 Hosting

WW2.Ranvirslog.com

Witryna nad portem 80 HTTP

Rekordy DNS są konfigurowane jako takie witryny (różne subdomeny) wskazują na ten sam statyczny publiczny adres IP. Zdarza się to nasz adres IP naszego Nginx Reverse Proxy:

Nagranie Wartość
WW1.Ranvirslog.com 68.183.214.151
WW2.Ranvirslog.com 68.183.214.151

Aby nasze odwrotne DN działały nad niezaszyfrowanym HTTP, utworzyliśmy dwa pliki w /etc /conf.D/ nazwane WW1.Conf i WW2.Zgoda z następującą konfiguracją:

/etc/conf.D/WW1.conf

serwer
Posłuchaj 80;
Posłuchaj [::]: 80;
Server_name WW1.Ranvirslog.com;
Lokalizacja /
proxy_pass http: // 10.135.126.102/;
Proxy_Buffering Off;
proxy_set_header x-real-ip $ remote_addr;

/etc/conf.D/WW2.conf

serwer
Posłuchaj 80;
Posłuchaj [::]: 80;
Server_name WW2.Ranvirslog.com;
Lokalizacja /
proxy_pass http: // 10.135.126.187/;
Proxy_Buffering Off;
proxy_set_header x-real-ip $ remote_addr;

System operacyjny, którego używamy, to Ubuntu 18.04 LTS i mamy REMOVED plik/etc/nginx/witryny-obsługujący/domyślny, więc nginx może działać wyłącznie jako odwrotne DNS za pomocą konfiguracji pokazanych powyżej.

Cel

Z odwrotnymi DNS (i stronami backendowymi) już uruchomionymi, naszym celem jest zainstalowanie pojedynczego certyfikatu TLS dla obu FQDN (to jest WW1.Ranvirslog.com i WW2.Ranvirslog.com) na naszym proxy Nginx Reverse.

Ruch między dowolnym klientem a odwrotną proxy będzie zaszyfrowana, ale ruch między odwrotną serwerami proxy a serwerami zaplecza nie jest szyfrowany. Jest to jednak nadal nieskończenie bezpieczna opcja niż w ogóle nie posiadanie HTTPS. W przypadkach, w których odwrotny serwer proxy i różne serwery Web znajdują się na tym samym hoście, powiedzmy, że jeśli używasz kontenerów Docker do hostowania wszystkich na tym samym VPS, nawet ten niezaszyfrowany ruch jest zawarty na jednym hoście.

Instalowanie Certbot

CertBot to program klientów, który będzie działał na naszym odwrotnym serwerze proxy i negocjuje certyfikat TLS z LetsEncrypt. Udowodni to, że serwer ma w rzeczywistości kontrolę nad FQDN, że ma kontrolę nad kontrolą. Nie będziemy się martwić, jak to robi Certbot.

Tradycyjnie możesz użyć CertBot jako samodzielnego oprogramowania, które po prostu otrzyma certyfikaty (które są w zasadzie tylko długie klawisze kryptograficzne) i zapisać je na serwerze. Ale na szczęście w przypadku większości systemów operacyjnych istnieją niestandardowe wtyczki dla Nginx, Apache i inne oprogramowanie. Zainstalujemy CertBot z wtyczką Nginx. To automatycznie skonfiguruje Nginx, aby używać nowo uzyskanych kluczy i pozbyć się niepewnych zasad, takich jak słuchanie HTTP na porcie 80.

Jeśli używasz systemów opartych na debian, podobnie jak w moim przypadku używam Ubuntu 18.04 LTS, wtedy instalacja jest prosta.

Aktualizacja $ sudo apt
$ sudo apt instontuj oprogramowanie-properties-common
$ sudo add-apt-repozytory wszechświat
$ sudo add-apt-repozytory PPA: certbot/certbot
Aktualizacja $ sudo apt
$ sudo apt Zainstaluj Python-Certbot-Nginx

Inne systemy operacyjne, twój Redhat, Gentoo, Fedora może postępować zgodnie z oficjalnymi instrukcjami wymienionymi tutaj.

Po zainstalowaniu CertBot z wtyczką Nginx W przypadku kombinacji systemu operacyjnego możemy dotrzeć do biznesu.

Uzyskanie certyfikatów TLS

Aby uzyskać certyfikat TLS po raz pierwszy, uruchom następujące polecenie:

$ sudo certbot -nnginx

Będzie to przebiegać przez serię interaktywnych pytań, jak pokazano poniżej:

  1. Wprowadź swój email

Oszczędzanie logowania debugowania do /var/log/limsecrrypt/LetsEncrypt.dziennik
Wybrane wtyczki: Authenticator Nginx, instalator Nginx
Wprowadź adres e -mail (używany do pilnej odnowienia i powiadomień o bezpieczeństwie) (wprowadź „C”, aby anulować): [email protected]

  1. Zgadzam się na TOS

Przeczytaj Warunki usługi pod adresem https: // LetsEncrypt.org/dokumenty/le-sa-v1.2 listopada 15-2017.PDF. Musisz się zgodzić, aby zarejestrować się na serwerze ACME na stronie https: // acme-v02.API.LetsEncrypt.org/katalog
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) Gree/(c) Ancel: a

  1. Opcjonalny biuletyn

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Czy byłbyś skłonny udostępnić swój adres e-mail z Electronic Frontier Foundation, partnerem założycielem projektu Let's Encrypt i organizacji non-profit, która opracowuje CertBot? Chcielibyśmy wysłać Ci e -mail o naszej pracy szyfrowanie sieci, wiadomości, kampanii i sposobów wspierania cyfrowej wolności.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y) es/(n) o: y

  1. Następnie wykryje nazwy domeny na twoim serwerze, a jeśli chcesz wybrać wszystkie domeny, po prostu naciśnij

Do jakich nazw chcesz aktywować HTTPS?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: WW1.Ranvirslog.com
2: II wojna światowa.Ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Wybierz odpowiednie liczby oddzielone przez przecinki i/lub przestrzenie lub pozostaw wejście puste, aby wybrać wszystkie pokazane opcje (wprowadź „C”, aby anulować):

  1. Przekieruj wszystko na TLS. Wybrałem opcję 2, aby przekierować wszystko na SSL, ale twój przypadek użycia może się różnić. W przypadku nowych instalacji backendowych można bezpiecznie wybrać opcję 2.

Wybierz, czy przekierować ruch HTTP do HTTPS, usuwając dostęp HTTP.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: Brak przekierowania - nie dokonuj dalszych zmian w konfiguracji WebServer.
2: Przekierowanie - Złóż wszystkie żądania przekieruj, aby uzyskać dostęp HTTPS. Wybierz to dla nowych witryn lub jeśli masz pewność, że Twoja witryna działa na HTTPS. Możesz cofnąć tę zmianę, edytując konfigurację serwera WWW.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Wybierz odpowiedni numer [1-2], a następnie [Enter] (naciśnij „C”, aby anulować): 2

Jeśli wszystko poszło dobrze, pokaże ci tę wiadomość, po prostu dla nazwisk domeny zamiast tego.

Gratulacje! Z powodzeniem włączyłeś https: // ww1.Ranvirslog.com i https: // ww2.Ranvirslog.com Możesz odwiedzić fqdns i zauważyć, że strony internetowe mają teraz znak kłódki sugerujący, że wszystko jest szyfrowane.

Spójrz na pliki konfiguracyjne

Jeśli wyświetlisz pliki konfiguracyjne, które utworzyliśmy wcześniej, a mianowicie /etc /conf.D/WW1.conf i /etc /conf.D/WW2.Conf, zauważysz, że wszystkie reguły „słuchaj 80” zniknęły i dodano kilka nowych wierszy Tell Server, że komunikacja musi zostać zaszyfrowana, a lokalizacja certyfikatów i kluczy do wykonania wspomnianego szyfrowania.

Zdecydowanie zalecam przeglądanie plików konfiguracyjnych, ponieważ może to również nauczyć, jak poprawnie instalować certyfikaty i pisać pliki konfiguracyjne.

Odnowienie certyfikacji

Typowe certyfikaty LetsEncrypt są ważne przez 90 dni i zanim wygasną, musisz je odnowić. Możesz użyć certbot do najpierw suchego przedłużenia, uruchamiając polecenie:

$ sudo certbot odnowienie-Dry-run

Jeśli operacja się powiedzie, zobaczysz następującą wiadomość:

Gratulacje, wszystkie odnowienia się powiodły. Ponownie odnowiono następujące certyfikaty:

/etc/limsecrrypt/na żywo/ww1.Ranvirslog.com/Fullchain.PEM (sukces)
** Suchy bieg: symulowanie „Certbot Renew” blisko wygaśnięcia Cert Extiry
** (powyższe certyfikaty testowe nie zostały zapisane.)

Teraz możesz dodać pracę cron, która będzie próbować odnawiać co tydzień. Certbot nie odnowią certyfikatów, chyba że są one tak naprawdę należne, więc nie musisz się martwić. Poleceniem faktycznego odnowienia jest:

$ CERTBOT Renew

Dodaj go do pracy Cron Root, używając:

$ sudo crontab -e

W poniższej monitu wybierz swojego ulubionego edytora (wybierz Nano, jeśli nie masz pewności) i dodaj następujące wiersze na końcu otwartego pliku:


# Na przykład możesz uruchomić kopię zapasową wszystkich kont użytkowników
# o 5 A.m co tydzień z:
# 0 5 * * 1 TAR -ZCF/var/Backups/Home.TGZ /Strona główna /
#
# Aby uzyskać więcej informacji, zobacz strony ręczne Crontab (5) i Cron (8)
#
# M H Dom Mon Dow Command
* 2 * * 2 Certbot Renew

To uruchomi polecenie Certbot Renew na 2 rano w dowolnej losowej minucie, drugiego dnia każdego tygodnia.

Wniosek

Jeśli jesteś nowy w certyfikatach TLS, eksperymentowanie z takimi rzeczami może być ryzykowne. Ponieważ zmiany te są nieodwracalne. Jeśli jednak chcesz zejść z króliczej dziury bezpieczeństwa, mogę gorąco polecam blog Troy Hunt, który jest jedną z głównych inspiracji tego zapisu.