Hogyan biztosíthatjuk az ingyenes Let's Encrypt SSL-el az ISPConfig3 kezelőpanelünket és a főbb szolgáltatásainkat

botond küldte be 2018. 12. 15., szo - 23:02 időpontban

Tartalom

 

Bevezető

Ebben a leírásban felhasználjuk a Let's Encrypt által kiállított SSL tanúsítványunkat, hogy biztosítsuk a szerveren lévő ISPConfig kezelőpanelünket, valamint a Postfix, Dovecot és PureFTPd szolgáltatásokat. Továbbá elkészítjük ezekre is az automatikus megújítást elvégző szkriptünket.

 

A leírás végrehajtásához szükség van néhány korábbi telepítés elvégzésére is, mert ezekre épülnek, én is ezeken hajtottam végre:

 

 

Szerver weboldal létrehozása

Ha még eddig nem került volna rá sor, létre kell hozni a szerver elsődleges weboldalát, tehát azt a weboldalt, aminek a domain neve megegyezik a telepítéskor megadott FQDN névvel. Ennek a weboldalnak elérhetőnek kell lennie az internetről, és megfelelően beállított DNS zónával kell rendelkeznie, ugyanis erre kell kikérni a Let's Encrypt SSL tanúsítványt az itt leírtaknak megfelelően. Ebben a leírásban ezt a tanúsítványt fogjuk felhasználni a szerver többi részének a levédésére.

Ha mindez megvan, kikértük a tanúsítványt és a weboldal is elérhető HTTPS-en keresztül, akkor léphetünk is tovább a következő fejezetre.

 

SSL engedélyezése az ISPConfig számára

Akik az ISPConfig telepítése során engedélyezték az SSL használatát a kezelőpanel számára, azok ezt a fejezetet át is ugorhatják.

Ha viszont az ISPConfig telepítése során nem engedélyeztük volna az SSL-t a kezelőpanel számára (pl. az alapértelmezett 8080-as porton), akkor ezt utólag is megtehetjük, ha a terminálban rootként futtatjuk az ISPConfig3 frissítő parancsát:

ispconfig_update.sh

Ekkor elindul az ISPConfig frissítő scriptje, amit már ismerhetünk a korábbi frissítések során. Itt haladjunk végig a megszokott módon, majd az SSL résznél, a "Create a new ISPConfig SSL certificate (yes/no)"  kérdésnél válaszoljuk yes-el, és akkor felteszi a (self-signed) tanúsítvány készítéséhez a szükséges kérdéseket, ahol nyomjunk enter-eket, mivel nincs szükségünk pontos tanúsítványra.

Minderre azért van szükség, hogy az ISPConfig generáljon magának egy tanúsítványt, és SSL módban működjön, amit majd felül írunk a Let's Encrypttől kapott hiteles tanúsítvánnyal.

Ezután ellenőrizzük, hogy bejön-e az ISPConfig https-el is a 8080-as porton (amennyiben nem állítottunk be egyedi portot). Itt kapunk néhány figyelmeztetést a böngészőtől (mivel nem hiteles a tanúsítványunk, mert magunk állítottuk elő), a Chrome például nem is nagyon enged tovább, de a másik böngészőkkel figyelmen kívül hagyva ezeket, el kell hogy induljon a kezelőpanel.

 

ISPConfig SSL tanúsítványának felülírása

Idáig tehát meg kell lennie az alábbiaknak:

  • működő szerver weboldal (bármilyen tartalommal, csak elérhető legyen)
  • erre a weboldalra be kellett kapcsolnunk a Let's Encrypt tanúsítványt
  • és az ISPConfignak működnie kell a HTTPS protokollon az (alapértelmezett 8080-as, vagy az általunk beállított)  porton (a szerver weboldalon keresztül elérve).

Ha minden rendben van, akkor most felülírjuk az ISPConfig saját tanúsítványát a szerver weboldalhoz kiállítottal.

 

Az ISPConfig is ugyanazon a domainen fut, mint a weboldal, amin keresztül elérjük, és amire kikértük a Let's Encrypt tanúsítványt is. Így felmerülhet a kérdés, hogy akkor miért van erre szükség. Nos, a válasz egyszerű: az ISPConfig egy külön Virtualhoston működik, ahol külön van beállítva minden konfiguráció, köztük a tanúsítvány fájljainak elérési útvonalai is. Ezért ezeket felül kell írni a megfelelő fájlokkal.

 

Ehhez a művelethez hajtsuk végre az alábbi parancssorokat (magyarázat a kódsorok alatt):

cd /usr/local/ispconfig/interface/ssl/
mv ispserver.crt ispserver.crt-$(date +"%y%m%d%H%M%S").bak
mv ispserver.key ispserver.key-$(date +"%y%m%d%H%M%S").bak
mv ispserver.pem ispserver.pem-$(date +"%y%m%d%H%M%S").bak
ln -s /etc/letsencrypt/live/$(hostname -f)/fullchain.pem ispserver.crt
ln -s /etc/letsencrypt/live/$(hostname -f)/privkey.pem ispserver.key
cat ispserver.{key,crt} > ispserver.pem
chmod 600 ispserver.pem

Itt annyi történik, hogy a 2-4 sorban átnevezzük az ISPConfig tanúsítványának fájljait, időbélyeggel elnevezett backupot készítünk belőlük.

A .pem fájl átnevezését csak akkor végezzük, ha korábban már készítettünk ispserver.pem fájlt. Ellenkező esetben hagyjuk ki.

Ezután a Let's Encrypt live könyvtárából átlinkeljük a weboldalon már működő hitelesített tanúsítványunk fájljait az ISPConfig fájljai helyére. Majd elkészítjük a .pem fájlt is, amit az előző két fájl (crt és key) összefűzésével kapunk. Ennek később lesz jelentősége a többi szolgáltatásnál.

Az utolsó sorban pedig leszedjük a pem fájlról a csoport és a többiek jogosultságait.

 

 

SSL kiterjesztése a többi webszolgáltatásra

Ebben a fejezetben az ISPConfig-ra kiterjesztett SSL tanúsítvány fájljait fogjuk tovább linkelni az adott webszolgáltatáshoz. Bölcsebb megoldás, mintha a különböző szolgáltatások konfigurációiban állítgatnánk át az útvonalakat direktben a fenti fájlokra.

Postfix

A postfix SSL "beláncolásához" adjuk ki az alábbi parancsokat (továbbra is root-ként):

cd /etc/postfix/
mv smtpd.cert smtpd.cert-$(date +"%y%m%d%H%M%S").bak
mv smtpd.key smtpd.key-$(date +"%y%m%d%H%M%S").bak
ln -s /usr/local/ispconfig/interface/ssl/ispserver.crt smtpd.cert
ln -s /usr/local/ispconfig/interface/ssl/ispserver.key smtpd.key
service postfix restart

Itt is hasonló történik, mint feljebb: A második és harmadik sorban biztonsági másolatot készítünk a szerver feltelepítésekor létrehozott (szintén self signed) tanúsítványokról, majd a következő két sorban pedig a backup-olt fájlok helyére symlinkeket helyezünk el, amik az ISPConfig3 kezelőpanelünk fentebb elkészített linkjeire mutatnak.

Végül újraindítjuk a postfix daemonját.

Dovecot

A Dovecot esetében, ha mindent úgy telepítettünk fel az elején, ahogyan a korábbi szerver leírásban, akkor a Dovecot már eleve a postfix SSL fájljait használja. De azért ellenőrizzük:

nano /etc/dovecot/dovecot.conf

Amiben így kell kinéznie a két SSL-es sornak:

[...]
ssl_cert = </etc/postfix/smtpd.cert
ssl_key = </etc/postfix/smtpd.key
[...]

Ha mégsem így nézne ki ez a két sor, akkor írjuk át erre, hogy bekerüljön a Dovecot is az SSL láncolásba.

Ezután indítsuk újra a dovecot-ot is:

service dovecot restart

Courier

Ha valaki netán a Dovecot helyett a Courier-t telepítette fel a szerverre, akkor ebben az esetben az alábbi parancsokat kell végrehajtania:

cd /etc/courier/
mv imapd.pem imapd.pem-$(date +"%y%m%d%H%M%S").bak
mv pop3d.pem pop3d.pem-$(date +"%y%m%d%H%M%S").bak
ln -s /usr/local/ispconfig/interface/ssl/ispserver.pem imapd.pem
ln -s /usr/local/ispconfig/interface/ssl/ispserver.pem pop3d.pem
service courier-imap-ssl stop
service courier-imap-ssl start
service courier-pop-ssl stop
service courier-pop-ssl start

PureFTPd

A PureFTPd-hez pedig az alábbi parancsok kellenek:

cd /etc/ssl/private/
mv pure-ftpd.pem pure-ftpd.pem-$(date +"%y%m%d%H%M%S").bak
ln -s /usr/local/ispconfig/interface/ssl/ispserver.pem pure-ftpd.pem
chmod 600 pure-ftpd.pem
service pure-ftpd-mysql restart

Monit

Ha pedig a Monit szerver statisztika is telepítésre került az elején, akkor ehhez pedig nyissuk meg a konfig fájlját:

nano /etc/monit/monitrc

És adjuk hozzá a pem fájlt, amit korábban átlinkeltünk (mondjuk a PureFTPd-hez készített megteszi):

[...]
set httpd port 2812 and
SSL ENABLE
PEMFILE /etc/ssl/private/pure-ftpd.pem
allow admin:'secretpassword'
[...]

Majd indítsuk újra:

service monit restart

 

 

Auto megújítást elvégző script elkészítése az ISPConfig pem fájlja számára

Az ISPConfig3 nem újítja meg automatikusan a saját tanúsítványát, amivel magát a kezelőfelületet védjük le, és így az erre láncolt szolgáltatások tanúsítványai sem frissülnek. Ezért erről nekünk kell gondoskodnunk, hacsak nem szeretnénk rendszeresen figyelgetni a weboldalunkhoz kiállított Let's Encrypt SSL automatikusan megújított fájljait.

Ehhez a művelethez az incron eseményfigyelő daemon-t fogjuk használni, ami lefuttatja helyettünk a scriptünket, amikor változás áll be a fájlrendszer megfigyelt részeiben. Ez esetben amikor a Let's Encrypt ACME kliense, a Certbot megújítja nekünk a szerver elsődleges weboldalához használt SSL tanúsítványt. Ezzel levéve a terhet a vállunkról, mert nem kell többé figyelgetni hogy mikor frissülnek a .key és a .crt fájlok.

Ehhez először telepítsük az incron-t az apt-get paranccsal:

apt-get install -y incron

Ezután hozzunk létre egy indítófájlt a /etc/init.d könyvtárban:

nano /etc/init.d/le_ispc_pem.sh

És tegyük bele az alábbi tartalmat:

#!/bin/sh
### BEGIN INIT INFO
# Provides: LE ISPSERVER.PEM AUTO UPDATER
# Required-Start: $local_fs $network
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: LE ISPSERVER.PEM AUTO UPDATER
# Description: Update ispserver.pem automatically after ISPC LE SSL certs are renewed.
### END INIT INFO
cd /usr/local/ispconfig/interface/ssl/
mv ispserver.pem ispserver.pem-$(date +"%y%m%d%H%M%S").bak
cat ispserver.{key,crt} > ispserver.pem
chmod 600 ispserver.pem
chmod 600 /etc/ssl/private/pure-ftpd.pem
service pure-ftpd-mysql restart
service monit restart
service postfix restart
service dovecot restart
service apache2 restart

Ha nincs feltelepítve a Monit, akkor a végén hagyjuk ki annak az újraindítását tartalmazó sort.

Valamint ha Apache helyett Nginx a webkiszolgálónk, akkor értelemszerűen cseréljük az apache újraindításos sort nginx újraindításra.

Mentsük le az indítófájlt, majd tegyük futtathatóvá:

chmod +x /etc/init.d/le_ispc_pem.sh

Ezután adjuk hozzá a root felhasználót az incron jogosult felhasználói közé (mert enélkül a root sem használhatja):

echo "root" >> /etc/incron.allow

Majd az incrontab paranccsal szerkesszük az incrontab-ot:

incrontab -e

 

Ekkor megnyílik az alapértelmezett szerkesztőnk (például a nano), és benne egy átmeneti fájl, amit az incrontab parancs fog majd a helyére tenni mentéskor, tehát direktben nem szerkeszthetjük.

 

Tegyük bele az alábbi sort:

/etc/letsencrypt/archive/$(hostname -f)/ IN_MODIFY ./etc/init.d/le_ispc_pem.sh

 

Fontos!

Mielőtt lementjük, győződjünk meg róla, hogy a /etc/letsencrypt/archive/$(hostname -f)/ alkönyvtár létezik-e!

Ugyanis például nálam a hostname parancs csak a hosztnevet adja, a hostname -f pedig a teljes szervernevet a domain névvel együtt, tehát egy ehhez hasonlót: szerver1.pelda.hu. Ezzel szemben a Let's Encrypt archive könyvárában pedig csak a domain nevekkel szerepelnek az SSL-t használó weboldalak könyvtárnevei, így az elsődleges weboldal alkönyvtára is. Tehát nálam a hostname parancs-os megoldás nem működne, és gondolom másoknál is lehet hasonló szituáció.

Mindez függhet attól, hogy a legelején a minimális szerver telepítése során a hálózat résznél a gépnevet és a tartománynevet hogyan adtuk meg.

Az eredeti leírást pontosan követve az abban szereplő incrontab sort tüntettem fel az imént, mindazonáltal azt javaslom, hogy keressük meg a /etc/letsencrypt/archive könyvtár alatt található szerver domain névvel szereplő alkönyvtárat és azt használjuk a $(hostname -f) rész helyett, amennyiben a fenti módszerrel nem érhető el az alkönyvtár.

Ha itt nem a megfelelő alkönyvtárat állítjuk be, akkor a scriptünk lehet hogy sosem fog lefutni, ha a hibásan megadott könyvtár tartalma nem változik.

 

Ha mindezzel megvagyunk, mentsük le, majd indítsuk újra az Apache-t:

service apache2 restart

Nginx esetén természetesen azt.

 

Igazából itt most csak a .pem fájl miatt kellett ezt a "macerát letudnunk", mert a .pem fájlt a .key és a .crt fájlok összefűzéséből nyerjük, így tehát amelyik fenti szolgáltatásnál nem volt szükség a .pem fájlra, azoknál az átlinkelés következtében hozzájutnának a friss .key és .crt fájlokhoz. (pl postfix és Dovecot) Viszont a többinél mindegyiknél szükség van a .pem fájlra is, amit pedig csak scripttel tudunk létrehozni, amikor megkapjuk a friss fájlokat.

 

Konklúzió

Ezzel az átláncolási módszerrel tehát elértük, hogy az ISPConfig3 kezelőpanelünk és a különböző szerver szolgáltatásaink is folyamatosan részesülnek az automatikusan megújuló Let's Encrypt SSL-jéből.

Arra kell még figyelni, hogy ha kívülről használjuk ezeket a szolgáltatásokat (FTP, IMAP, stb), akkor mindig a szerver fő domain nevét adjuk meg hosztnévnek ezekben a szolgáltatásokban, mivel erre a domain névre lett kiállítva az SSL tanúsítvány. Így például ha a szerveren működő weboldalak FTP, IMAP, stb hozzáféréseinél nem a szerver fő domain nevét adjuk meg, hanem az adott weboldalét, akkor a csatlakozó kliensprogram SSL hibát fog jelezni, mivel nem azzal a domain névvel történt a csatlakozás, mint amire a tanúsítvány ki lett állítva.

Mindezt csak azért írom le, mert ha például ügyfeleknek adunk ki tárhelyeket, akkor jelezni kell ezt nekik is, hogy melyik domain névvel tudnak hiba nélkül SSL-en keresztül csatlakozni ezekhez a protokollokhoz.