Weboldal keresés

A HTTPS engedélyezése a Varnish Cache számára a Hitch segítségével a CentOS-RHEL 8 rendszeren


A Varnish Cache nem támogatja az SSL/TLS és más, a 443-as porthoz kapcsolódó protokollokat. Ha a Varnish Cache-t használja webalkalmazása teljesítményének növelésére, telepítenie és konfigurálnia kell egy másik szoftvert, az úgynevezett SSL/TLS lezáró proxyt, hogy az mellett működjön. >Lakk gyorsítótár a HTTPS engedélyezéséhez.

A Hitch egy ingyenes nyílt forráskódú, libev-alapú és méretezhető SSL/TLS proxy, amelyet a Varnish Cache számára terveztek, amely jelenleg Linuxon, OpenBSD-n, FreeBSD-n és MacOSX-en működik. Megszakítja a TLS/SSL kapcsolatokat a 443-as porton (a HTTPS kapcsolatok alapértelmezett portja) való figyeléssel, és a titkosítatlan forgalmat továbbítja a Varnish Cache-be, azonban , más háttérrendszerekkel is működnie kell.

Támogatja a TLS1.2 és TLS1.3, valamint a régi TLS 1.0/1.1, támogatja az ALPN ( >Application-Layer Protocol Negotiation) és NPN (Next Protocol Negotiation) a HTTP/2 számára, amely egy PROXY protokoll a kliens jelzésére IP/port egy háttérrendszerhez, UNIX tartomány socket kapcsolatok az eredethez, SNI (Server Name Indication), helyettesítő karakter tanúsítványokkal és anélkül. Ezenkívül jól működik olyan nagy telepítéseknél, amelyek akár 15 000 lehallgató aljzatot és 500 000 tanúsítványt igényelnek.

A Varnish Cache Nginx és Apache HTTP-kiszolgálókhoz való telepítéséről szóló két korábbi cikkünk folytatásaként ez az útmutató bemutatja a HTTPS< engedélyezését. a Varnish Cache-hez a Hitch TLS Proxy használatával CentOS/RHEL 8 rendszeren.

Ez az útmutató feltételezi, hogy telepítette a Varnish programot Nginx vagy Apache webszerverhez, ellenkező esetben lásd:

  • A Varnish Cache 6 telepítése az Nginx webszerverhez CentOS/RHEL 8 rendszeren
  • A Varnish Cache 6 telepítése Apache webszerverhez CentOS/RHEL 8 rendszeren

1. lépés: Telepítse a Hitch-et a CentOS/RHEL 8 rendszerre

1. A Hitch csomag az EPEL (Extra Packages for Enterprise Linux) lerakatában található. A telepítéshez először engedélyezze az EPEL szolgáltatást a rendszerén, majd telepítse a csomagot. Ha nincs telepítve az OpenSSL csomag, akkor azt is telepítse.

dnf install epel-release
dnf install hitch openssl

2. Amikor a csomag telepítése befejeződött, be kell állítania a Lakk gyorsítótárat, hogy működjön Hitch. Azt is be kell állítania a Hitch alkalmazásban, hogy SSL/TLS tanúsítványait és Varnish-ét használja háttérrendszerként. A Hitch fő konfigurációs fájlja az /etc/hitch/hitch.conf címen található, amelyet alább ismertetünk.

2. lépés: A lakk-gyorsítótár konfigurálása a Hitch számára

3. Ezután engedélyezze a Varnish funkciót egy további port (esetünkben 8443) hallgatásához a PROXY protokoll használatával támogatás a Hitch szolgáltatással való kommunikációhoz.

Tehát nyissa meg a Varnish systemd szolgáltatásfájlját szerkesztéshez.

systemctl edit --full varnish

Keresse meg az ExecStart sort, és adjon hozzá egy további -a jelzőt 127.0.0.1:8443,proxy értékkel. A 127.0.0.1:8443 érték használata azt jelenti, hogy a Varnish csak a belső kapcsolatot fogadja el (az ugyanazon a szerveren futó folyamatokból, azaz ebben az esetben a kapcsolásról), de a külső kapcsolatokat nem.

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

Mentse a fájlt, majd indítsa újra a Varnish szolgáltatást a legújabb módosítások alkalmazásához.

systemctl restart varnish

3. lépés: SSL/TLS-tanúsítványok beszerzése

4. Ebben a részben elmagyarázzuk, hogyan kell létrehozni az SSL/TLS tanúsítványcsomagot a Hitch alatt használandó. Ebben az útmutatóban bemutatjuk az önaláírt tanúsítvány, kereskedelmi tanúsítvány vagy a Titkosítsuk tanúsítványának használatának különböző lehetőségeit.

Önaláírt tanúsítvány létrehozásához (amelyet csak helyi tesztelési környezetben érdemes használni) használhatja az OpenSSL eszközt.

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

Ezután hozzon létre egy köteget a tanúsítványból és a kulcsból az alábbiak szerint.

cat tecmint.crt tecmint.key >tecmint.pem

Megjegyzés: Éles felhasználáshoz vásárolhat tanúsítványt egy kereskedelmi tanúsító hatóságtól (CA), vagy szerezzen be egy ingyenes, automatizált és teljesen elismert tanúsítványt a Let's Encrypt webhelyről. Ezután hozzon létre egy PEM-csomagot.

Ha egy kereskedelmi CAtól vásárolt tanúsítványt, akkor az ábrán látható módon egyesítenie kell a privát kulcsot, a tanúsítványt és a CA-csomagot.

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

A Titkosítsuk esetén a tanúsítvány, a privát kulcs és a teljes lánc az /etc/letsencrypt/live/example.com/ alatt lesz tárolva, ezért a képen látható módon hozza létre a csomagot. .

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

4. lépés: Kapcsoló konfigurálása és indítása

5. Ezután állítsa be a Varnish-t a Hitch háttérprogramjaként, és adja meg a használni kívánt SSL/TLS tanúsítványfájlokat. HTTPS, a Hitch fő konfigurációs fájlban nyissa meg szerkesztésre.

vi /etc/hitch/hitch.conf

Az frontend szakasz határozza meg az IP-címeket és a portot, amelyet a Hitch figyelni fog. Az alapértelmezett konfiguráció a kiszolgálóhoz csatlakoztatott összes IPv4 és IPv6 interfész figyelése, a 443-as porton fut, és kezeli a bejövő HTTPS-t< kéréseket, átadva azokat a Lakknak.

Módosítsa az alapértelmezett backend proxyportot 6086-ról 8443-ra (a kérések Varnish-re történő továbbítására használt port) a Hitch konfigurációs fájl a backend paraméter használatával. Adja meg a tanúsítványfájlt is a pem-file paraméterrel az ábrán látható módon.

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

Mentse el a fájlt és zárja be.

6. Most indítsa el a hitch szolgáltatást, és engedélyezze, hogy automatikusan elinduljon a rendszerindításkor. Vegye figyelembe, hogy a --now kapcsoló, ha az engedélyezéssel együtt használja, elindít egy rendszerszolgáltatást is, majd az alábbiak szerint ellenőrzi az állapotot, és ellenőrizze, hogy működik-e.

systemctl enable --now hitch
systemctl status hitch

7. Mielőtt folytatná annak tesztelését, hogy webhelye/alkalmazása jelenleg HTTPS-en fut-e, engedélyeznie kell a HTTPS szolgáltatás 443-as portját a tűzfalat, hogy a szerver adott portjára küldött kérések áthaladjanak a tűzfalon.

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

5. lépés: Az SSL/TLS-lezárás tesztelése a Varnish Cache-Hitch Setup segítségével

8. Itt az ideje, hogy tesztelje a Varnish Cache-Hitch beállítást. Nyisson meg egy webböngészőt, és használja a domaint vagy a szerver IP-címét a HTTPS-en való navigáláshoz.

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

Miután betöltődött a webalkalmazás indexoldala, ellenőrizze a HTTP fejléceket, hogy megbizonyosodjon arról, hogy a tartalom a Varnish Cache segítségével történik.

Ehhez kattintson a jobb gombbal a betöltött weboldalra, válassza az Inspect lehetőséget a lehetőségek listájából a fejlesztői eszközök megnyitásához. Ezután kattintson a Hálózat fülre, és az oldal Újratöltése elemére, majd válasszon egy kérést a HTTP-fejlécek megtekintéséhez, ahogy az a következő képernyőképen látható.

6. lépés: A HTTP átirányítása HTTPS-re a Varnish Cache-ben

9. Ahhoz, hogy webhelyét csak HTTPS-en futtassa, át kell irányítania a teljes HTTP forgalmat a HTTPS-re. Ezt úgy teheti meg, hogy hozzáadja a következő konfigurációt a Hitch konfigurációs fájljához.

vi /etc/hitch/hitch.conf 

Először adja hozzá az import std; sort közvetlenül a vlc 4.0; alá, majd keresse meg a vlc_recv szubrutint, amely az első azonnal végrehajtott VCL szubrutin miután a Varnish Cache elemezte az ügyfélkérést az alapvető adatstruktúrájába. Itt módosíthatjuk a kérés fejléceit, és szintetizátort hajthatunk végre az ügyfélkérések átirányítására.

Módosítsa úgy, hogy így nézzen ki.

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

Vegye figyelembe, hogy a PROXY protokoll lehetővé teszi a Varnish számára, hogy lássa a Hitch figyelőportját, a 443-as-t a server.ip<-ről változó. Tehát az std.port(server.ip) sor azt a portszámot adja vissza, amelyen az ügyfélkapcsolat érkezett.

Ha a HTTPS portja nem 443 (amint azt a (std.port(server.ip) != 443) ellenőrzi), az alprogram a HTTP Location fejlécet (set req.http.location) biztonságos kéréssé állítja be („https://” + req.http.host< + req.url) egyszerűen megkéri a böngészőt, hogy töltse be a weboldal HTTPS verzióját (azaz URL-átirányítást).

A Location fejléc elküldésre kerül a vcl_synth szubrutinnak (amelyet a return(synth(301)) paranccsal hívnak meg) a következő HTTP-állapotkóddal. 301 (Végleg elköltözött).

10. Ezután adja hozzá a következő vcl_synth szubrutint (a számos felhasználási eset egyike a felhasználók átirányítása), a fenti szinti feldolgozásához.

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

Ellenőrzi, hogy a válasz állapota 301, a válasz HTTP Location fejléce a kérés HTTP Location fejlécére van állítva, ami valójában átirányítás a HTTPS-re, és kézbesítési műveletet hajt végre.

A kézbesítési művelet választ állít össze a háttérrendszer válaszával, eltárolja a választ a gyorsítótárban, és elküldi az ügyfélnek.

Mentse el a fájlt és zárja be.

11. Ismét alkalmazza az új változtatásokat a Varnish konfigurációban a szolgáltatás újraindításával. Ezután használja a curl parancssori eszközt a HTTP-ről a HTTPS-re való átirányítás megerősítésére.

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

A böngésző válasza is megegyezik a következő képernyőképen láthatóval.

Reméljük, hogy eddig minden rendben ment. Ha nem, tegye fel megjegyzését vagy kérdéseit az alábbi visszajelzési űrlapon keresztül. A speciális konfigurációs beállításokért keresse fel a Varnish Cache dokumentációját és a Hitch dokumentációját.