Wyszukiwanie w witrynie

Jak włączyć HTTPS dla pamięci podręcznej lakieru za pomocą Hitch w CentOS-RHEL 8


Varnish Cache nie obsługuje natywnej obsługi SSL/TLS i innych protokołów powiązanych z portem 443. Jeśli używasz Varnish Cache do zwiększenia wydajności swojej aplikacji internetowej, musisz zainstalować i skonfigurować inne oprogramowanie zwane proxy zakończenia SSL/TLS, aby współpracowało z Lakieruj pamięć podręczną, aby włączyć HTTPS.

Hitch to darmowy open source, oparty na libev i skalowalny serwer proxy SSL/TLS przeznaczony dla Varnish Cache, który obecnie działa na systemach Linux, OpenBSD, FreeBSD i MacOSX. Kończy połączenia TLS/SSL nasłuchując na porcie 443 (domyślny port dla połączeń HTTPS) i przekazuje niezaszyfrowany ruch do Varnish Cache , powinno działać również z innymi backendami.

Obsługuje TLS1.2 i TLS1.3 oraz starsze TLS 1.0/1.1, obsługuje ALPN (Negocjacja protokołu warstwy aplikacji) i NPN (Negocjacja następnego protokołu) dla HTTP/2, protokołu PROXY do sygnalizowania klienta IP/port do backendu, połączenia gniazda domeny UNIX ze źródłem, SNI (Wskazanie nazwy serwera), z certyfikatami wieloznacznymi lub bez. Dodatkowo sprawdza się w przypadku dużych instalacji, które wymagają aż 15 000 gniazd odsłuchowych i 500 000 certyfikatów.

Jako kontynuacja naszych dwóch poprzednich artykułów na temat instalowania Varnish Cache dla serwerów HTTP Nginx i Apache, w tym przewodniku pokazano, jak włączyć HTTPS< dla Varnish Cache przy użyciu Hitch TLS Proxy w CentOS/RHEL 8.

W tym przewodniku założono, że zainstalowałeś Varnish dla serwera WWW Nginx lub Apache. W przeciwnym razie zobacz:

  • Jak zainstalować Varnish Cache 6 dla serwera WWW Nginx na CentOS/RHEL 8
  • Jak zainstalować Varnish Cache 6 dla serwera WWW Apache na CentOS/RHEL 8

Krok 1: Zainstaluj Hitch na CentOS/RHEL 8

1. Pakiet Hitch znajduje się w repozytorium EPEL (Dodatkowe pakiety dla Enterprise Linux). Aby go zainstalować, najpierw włącz EPEL w swoim systemie, a następnie zainstaluj pakiet. Jeśli nie masz zainstalowanego pakietu OpenSSL, zainstaluj go również.

dnf install epel-release
dnf install hitch openssl

2. Po zakończeniu instalacji pakietu będziesz musiał skonfigurować Varnish Cache do pracy z Hitch. Musisz także skonfigurować Hitch, aby używał certyfikatów SSL/TLS i Varnish jako backendu. Główny plik konfiguracyjny Hitcha znajduje się w /etc/hitch/hitch.conf, co wyjaśniono poniżej.

Krok 2: Konfiguracja pamięci podręcznej lakieru dla Hitch

3. Następnie włącz Varnish, aby nasłuchiwać na dodatkowym porcie (w naszym przypadku 8443) przy użyciu protokołu PROXY wsparcie w zakresie komunikacji z Hitch.

Otwórz więc plik usługi Varnish systemd do edycji.

systemctl edit --full varnish

Poszukaj linii ExecStart i dodaj dodatkową flagę -a o wartości 127.0.0.1:8443,proxy. Użycie wartości 127.0.0.1:8443 oznacza, że Varnish zaakceptuje tylko połączenie wewnętrzne (z procesów działających na tym samym serwerze, czyli w tym przypadku hitch), ale nie połączenia zewnętrzne.

ExecStart=/usr/sbin/varnishd -a :80 -a 127.0.0.1:8443,proxy -f /etc/varnish/default.vcl -s malloc,256m 

Zapisz plik, a następnie uruchom ponownie usługę Varnish, aby zastosować najnowsze zmiany.

systemctl restart varnish

Krok 3: Uzyskanie certyfikatów SSL/TLS

4. W tej sekcji wyjaśnimy, jak utworzyć pakiet certyfikatów SSL/TLS do użycia w Hitch. W tym przewodniku wyjaśnimy różne opcje korzystania z certyfikatu z podpisem własnym, certyfikatu komercyjnego lub certyfikatu z Let's Encrypt.

Aby utworzyć certyfikat z podpisem własnym (którego powinieneś używać tylko w lokalnym środowisku testowym), możesz skorzystać z narzędzia OpenSSL.

mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout  tecmint.lan.key -out tecmint.lan.crt

Następnie utwórz pakiet certyfikatu i klucza w następujący sposób.

cat tecmint.crt tecmint.key >tecmint.pem

Uwaga: do użytku produkcyjnego możesz kupić certyfikat od komercyjnego urzędu certyfikacji (CA) lub pobierz darmowy, automatyczny i w pełni rozpoznawalny certyfikat od Let's Encrypt. Następnie utwórz pakiet PEM.

Jeśli kupiłeś certyfikat od komercyjnego CA, musisz połączyć klucz prywatny, certyfikat i pakiet CA, jak pokazano.

cat example.com.key example.com.crt example.com-ca-bundle.crt > /etc/ssl/example.com.pem 

W przypadku Let's Encrypt certyfikat, klucz prywatny i pełny łańcuch będą przechowywane w lokalizacji /etc/letsencrypt/live/example.com/, więc utwórz pakiet jak pokazano .

cat /etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem >/etc/letsencrypt/live/example.com/example.com_bundle.pem

Krok 4: Konfiguracja i uruchomienie zaczepu

5. Następnie skonfiguruj Varnish jako backend dla Hitch i określ pliki certyfikatów SSL/TLS, które mają być używane HTTPS, w głównym pliku konfiguracyjnym Hitch otwórz go do edycji.

vi /etc/hitch/hitch.conf

Sekcja frontend definiuje adresy IP i port, których Hitch będzie nasłuchiwał. Domyślna konfiguracja polega na nasłuchiwaniu na wszystkich interfejsach IPv4 i IPv6 podłączonych do serwera i działaniu na porcie 443 oraz obsłudze przychodzących HTTPS< żądania, przekazując je Varnish.

Zmień domyślny port proxy backendu z 6086 na 8443 (port używany do przekazywania żądań do Varnish) w pliku Zaczep plik konfiguracyjny, używając parametru backend. Określ także plik certyfikatu, używając parametru pem-file, jak pokazano.

backend = "[127.0.0.1]:8443"
#pem-dir = "/etc/pki/tls/private"
pem-file = "/etc/ssl/tecmint.lan/tecmint.pem"

Zapisz plik i zamknij go.

6. Teraz uruchom usługę hitch i włącz ją, aby automatycznie uruchamiała się przy starcie systemu. Należy zauważyć, że przełącznik --now używany z opcją Enable powoduje również uruchomienie usługi systemowej, a następnie sprawdzenie jej stanu i działania w następujący sposób.

systemctl enable --now hitch
systemctl status hitch

7. Zanim przystąpisz do testowania, czy Twoja witryna/aplikacja działa teraz w trybie HTTPS, musisz zezwolić na port usługi HTTPS 443 w zaporę, aby umożliwić przechodzenie przez zaporę żądań kierowanych do tego portu na serwerze.

firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

Krok 5: Testowanie zakończenia protokołu SSL/TLS za pomocą konfiguracji Varnish Cache-Hitch

8. Nadszedł czas na przetestowanie konfiguracji Varnish Cache-Hitch. Otwórz przeglądarkę internetową i użyj adresu IP swojej domeny lub serwera, aby poruszać się po HTTPS.

https://www.example.com
OR
https://SERVER_IP/

Po załadowaniu strony indeksowej aplikacji internetowej sprawdź nagłówki HTTP, aby potwierdzić, że treść jest udostępniana za pośrednictwem Varnish Cache.

Aby to zrobić, kliknij prawym przyciskiem myszy załadowaną stronę internetową, wybierz Sprawdź z listy opcji, aby otworzyć narzędzia programistyczne. Następnie kliknij kartę Sieć i Załaduj ponownie stronę, a następnie wybierz żądanie wyświetlenia nagłówków HTTP, jak pokazano na poniższym zrzucie ekranu.

Krok 6: Przekierowanie HTTP na HTTPS w Varnish Cache

9. Aby Twoja witryna internetowa działała wyłącznie w trybie HTTPS, musisz przekierować cały ruch HTTP do HTTPS. Można to zrobić dodając następującą konfigurację w pliku konfiguracyjnym Hitch.

vi /etc/hitch/hitch.conf 

Najpierw dodaj linię import std; tuż pod vlc 4.0;, a następnie poszukaj podprogramu vlc_recv, który jest pierwszym podprogramem VCL wykonywanym natychmiast po tym, jak Varnish Cache przeanalizuje żądanie klienta w jego podstawową strukturę danych. Tutaj możemy modyfikować nagłówki żądań i uruchamiać syntezator w celu przekierowania żądań klientów.

Zmodyfikuj go tak, aby wyglądał tak.

sub vcl_recv {
    if (std.port(server.ip) != 443) {
        set req.http.location = "https://" + req.http.host + req.url;
        return(synth(301));
    }
}

Pamiętaj, że protokół PROXY umożliwia Varnish zobaczenie portu nasłuchiwania Hitch 443 z pliku server.ip< zmienna. Zatem linia std.port(server.ip) zwraca numer portu, na którym odebrano połączenie klienta.

Jeśli port nie jest 443 dla HTTPS (co sprawdzane jest przez (std.port(server.ip) != 443)), podprogram ustawi nagłówek lokalizacji HTTP żądania (set req.http.location) na bezpieczne żądanie („https://” + req.http.host< + req.url) po prostu prosząc przeglądarkę internetową o załadowanie wersji strony internetowej HTTPS (tj. przekierowanie adresu URL).

Nagłówek Location zostanie wysłany do podprogramu vcl_synth (który jest wywoływany za pomocą return(synth(301))) z kodem stanu HTTP: 301 (Przeniesiony na stałe).

10. Następnie dodaj następujący podprogram vcl_synth (jednym z jego wielu zastosowań jest przekierowywanie użytkowników), aby przetworzyć powyższy syntezator.

sub vcl_synth {
        if (resp.status == 301) {
                set resp.http.location = req.http.location;
		  set resp.status = 301;
                return (deliver);
        }
}

Sprawdza, czy status odpowiedzi to 301, nagłówek HTTP Location w odpowiedzi jest ustawiony na nagłówek HTTP Location w żądaniu, które w rzeczywistości jest przekierowaniem do HTTPS i wykonuje akcję dostarczania.

Akcja dostarczania tworzy odpowiedź na podstawie odpowiedzi z backendu, przechowuje odpowiedź w pamięci podręcznej i wysyła ją do klienta.

Zapisz plik i zamknij go.

11. Jeszcze raz zastosuj nowe zmiany w konfiguracji Varnish, uruchamiając ponownie usługę. Następnie użyj narzędzia wiersza poleceń curl, aby potwierdzić przekierowanie z HTTP do HTTPS.

systemctl restart varnish
curl -I http://eaxmple.com/

W przeglądarce odpowiedź jest również taka sama, jak pokazano na poniższym zrzucie ekranu.

Mamy nadzieję, że do tego momentu wszystko działało prawidłowo. Jeśli nie, napisz komentarz lub zadaj pytanie, korzystając z poniższego formularza opinii. Aby zapoznać się z zaawansowanymi opcjami konfiguracji, przejdź do dokumentacji Varnish Cache i dokumentacji Hitch.