Hogyan állítsuk be a HSTS (HTTP Strict Transport Security) fejlécet Apache webkiszolgálónkon futó weboldalaink számára

botond küldte be 2023. 01. 11., sze – 23:02 időpontban

Tartalom

 

Bevezető

A HSTS fejléc használatával nagyobb biztonságban tudhatjuk weboldalainkat a man-in-the-middle típusú támadásokkal szemben. Ebben a rövid leírásban megnézzük hogyan állíthatjuk be ezt a HTTP fejlécet Apache alapú LAMP, vagy ISPConfig szerverkörnyezetünkben.

 

 

Előfeltételek

A HSTS fejléc használatához be kell kapcsolni a headers Apache modult. Összetettebb szervereken ez már a telepítés során bekapcsolásra került, de ha például csak egy egyszerűbb LAMP szerverünk van, akkor az alábbi parancsokkal kapcsolhatjuk be:

sudo a2enmod headers
sudo systemctl restart apache2

 

HSTS beállítása

A HSTS fejlécet könnyen beállíthatjuk, legyen szó egyszerű LAMP szerverről, vagy összetettebb ISPConfig-os szerverkörnyezetről.

Beállítás LAMP szerveren

LAMP szervereken csak akkor tudjuk ezt elvégezni, ha már van beállított SSL is a weboldalhoz, egyébként nincs létjogosultsága az egésznek. A tanúsítvány persze lehet akár egy self-signed tanúsítvány is fejlesztési célokra, a lényeg hogy legyen valamilyen SSL beállítva.

A beállítás elvégzéséhez lépjünk be root-ként, majd lépjünk be az alábbi könyvtárba:

cd /etc/apache2/sites-available/

majd nyissuk meg a beállítandó weboldalunkhoz tartozó .vhost végződésű virtualhost fájlt ebben a könyvtárban:

nano xxxx.vhost

Ezután keressük meg az alábbi szakaszt:

<VirtualHost *:443>

[...]

</VirtualHost>

És ebbe tegyük bele az alábbi sorokat:

    <IfModule mod_headers.c>
        Header always add Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    </IfModule>
Ilyenkor csak a virtualhost fájl kézzel szerkesztett mivolta miatt szoktam behúzásokat használni, hogy olvashatóbbak maradjanak ezek a fájlok. Lentebb az ISPConfig esetében már az ISPConfig panelünk kezeli őket, ezért ott már nem számít az esztétika.

HTTPS átirányítás

Vegyük figyelembe, hogy a fenti beállítás (a *:443 -as részen belül) csak a HTTPS virtualhost esetén lép érvénybe, tehát amikor valaki eleve HTTPS protokollal kapcsolódik. Ezért még le kell védenünk a sima HTTP virtualhost részt is, hogy már az első csatlakozás is biztonságos legyen még akkor is ha valaki a kódolatlan HTTP protokollon próbálna csatlakozni.

Erre a legjobb módszer, ha beállítunk egy átirányítást HTTPS-re.

Itt most keressük meg a HTTP (*:80) virtualhost blokkot:

<VirtualHost *:80>

[...]

</VirtualHost>

És ebbe a részbe tegyük bele valahova az alábbi sorokat:

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
Ha már van valahol RewriteEngine On sorunk, akkor innen elhagyva ezt a sort az után illesszük be a maradék kettőt közvetlenül. De az se baj, ha a virtualhost blokk legelejébe tesszük így egyben az egészet (csak az a lényeg, hogy a RewriteEngine On sor mindenképp előtte legyen a két másiknak), mert így a rewrite szabályban szereplő "L" flag gondoskodik arról, hogy a szabály alkalmazása után leállítja a további feldolgozást, így biztosak lehetünk benne, hogy az átirányítás után már nem kerül végrehajtásra semmi egyéb. Ennek logikájából következik, hogy ezért is célszerűbb ezt minél korábban lefuttatni, hogy minél kevesebb egyéb dolog kerüljön végrehajtásra.

Ezzel a sima, szöveges alapú HTTP kapcsolódást is kivédtük.

Ha kényelmesebb megoldásnak tartjuk, akkor ezt a három sort akár a webgyökérben elhelyezett .htaccess fájl legelejébe is betehetjük, így az minden esetben végrehajtásra kerül, legyen szó HTTP vagy HTTPS kapcsolódásokról.

Ha mindennel megvagyunk, indítsuk újra az Apache-ot:

systemctl restart apache2

Ezzel készen is volnánk a LAMP szerveren.

 

 

Beállítás ISPConfig kezelőpanelen

Az ISPConfig beállításához itt a Debian 10 (Buster) tökéletes szervert használom bemutatásra, mivel ezen van egy működő webfiók, így nem kell különösebb előkészület a beállítás elvégzéséhez.

A beállításhoz lépjünk be adminként a kezelőpanelbe, majd lépjünk a Weboldalak (Sites) főmenübe. Itt válasszuk ki a beállítani kívánt weboldalunkat:

ISPConfig - Weboldal kiválasztása

Itt menjünk az Options fülre, majd gögessünk le az űrlap aljára:

ISPConfig - Weboldal beállítása - Apache direktívák

Majd itt az Apache direktívák mezőbe a képen látható módon illesszük be az alábbi részt:

<IfModule mod_headers.c>
Header always add Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>

Ezután mentsük le.

Direktíva sablon beállítása

Ha sok weboldalt üzemeltetünk, akkor az ilyen beállításokat célszerűbb beállítani direktíva sablonként (directive snippet), aminek a lényege, hogy egy helyen tároljuk magát a beállítást, és a weboldalak egyéni beállító részein csak beszúrjuk a beállításhoz társított sablont (snippet-et). Ehhez lépjünk a Rendszer főmenübe, és ott válasszuk ki a bal hasáb menüjéből a "Directive snippets" menüpontot, majd adjunk hozzá egy új tételt:

Direktíva snippet beállítása

Itt adjunk nevet a sablonunknak, például "HSTS Header", Típusnak válasszuk az Apache-ot (alapértelmezett), majd a Snippet mezőbe tegyük be a fentebb már említett három soros kódrészletünket, majd mentsük le. Ezután ha visszamegyünk a weboldal bállításaiba, ahol korábban már beállítottuk ezt a kódtöredéket, akkor ott már megjelenik a "Available Apache Directive Snippets:" sor alatt a beállított "HSTS Header" beállításunk is link formájában:

Direktíva sablon használata

Ha itt rákattintunk erre a [HSTS Header] linkre, akkor beilleszti a lementett kódrészt a mezőbe. Így ha később egy új weboldalt veszünk fel a kezelőpanelbe, akkor nem kell keresgélni a beállítandó dolgokat, hanem csak innen beszurkálhatjuk a korábban már sablonként lementett szükséges kódrészleteinket.

HTTPS átirányítás

A HSTS egyik gyenge pontja, hogy a legelső látogatás során nem nyújt védelmet. Ezért hogy már az első látogatás során is a biztonságos HTTPS kapcsolattal csatlakozzanak a látogatóink kapcsoljuk be a HTTPS átirányítást - amennyiben még ezt nem tettük meg korábban.

Ehhez lépjünk vissza a weboldal beállításaihoz, és itt most válasszuk az Átirányítás (Redirect) fület:

ISPConfig - Weboldal beállítása - HTTPS átirányítás

És itt állítsuk be a "Rewrite HTTP to HTTPS" opciót, ahogy a képen is látható. Majd mentsük le.

Ezekkel a beállításokkal tehát kizárjuk, hogy bárki is a kódolatlan, szöveges alapú elavult HTTP kapcsolaton csatlakozzon webhelyünkhöz.

 

 

Ellenőrzés, tesztelés

Munkánk eredményességét kétféle módon is ellenőrizhetjük.

Ellenőrzés a böngészőben

Ezt valamennyi böngészőben megtehetjük, én itt most a Chrome-ban mutatom meg hogyan ellenőrizhetjük a beállított HTTP fejlécünket.

A korábbi beállítások végeztével töltsük be a weboldalt, vagy frissítsünk rá, hogy érvényesüljenek a beállítások. Majd a weboldalon bárhol kattintsunk jobb egérgombbal, majd az előugró menüben válasszuk ki lent a "Vizsgálat" opciót:

Böngésző - Weboldal vizsgálat

Itt kattintsunk a Hálózat fülre, ekkor lent kiírja, hogy a hálózati tevékenység rögzítéséhez frissítsük az oldalt. Nyomjunk egy CTRL+R billentyűkombinációt, vagy egy F5-öt.

Ezután betöltődnek az oldal részei:

Böngésző - Weboldal vizsgálat - Hálózat

Itt kattintsunk az első (Név) oszlop tetszőleges cellájára, ekkor betöltődnek a tételhez tartozó URL kérés és válasz fejléc adatok:

Böngésző - Weboldal vizsgálat - Hálózat - Fejlécek

Itt görgessünk lefele addig, amíg meg nem találjuk a beállított HSTS fejlécünket:

Böngésző - Weboldal vizsgálat - Hálózat - Fejlécek - HSTS

Tesztelés webes szolgáltatással

A másik lehetőség a HSTS HTTP fejléc ellenőrzésére ha kipróbáljuk egy erre készített webes ellenőrző oldalon. Sok ilyen oldal van, ebben a példában az alábbi webes ellenőrző rendszert próbáljuk ki:

https://geekflare.com/tools/hsts-test

Ide ha beírjuk a domain nevünket, akkor kiadja az eredményt. Természetesen itt csak az internet felől is elérhető weboldalakat tesztelhetjük, így itt most a linuxportal.info domaint nézzük meg:

HSTS tesztelő oldal

Ha pedig lejjebb görgetünk, akkor a pontos fejléc beállítás is megjelenik:

HSTS tesztelő oldal

 

 

Konklúzió

A HSTS HTTP fejléc beállítása nem bonyolult, és cserében nagyobb fokú védelmet kínál mind a weboldalaink, mind a látogatóink számára.