ISPConfig 3.1 + Let’s Encrypt tanúsítvány

A bejegyzésből megtudható, hogy a már korábban telepített- és beállított ISPConfig 3.1 Szerver adminisztrációs eszközt, hogyan tudjuk az ingyenes Let’s Encrypt tanúsítvány hatóság tanúsítványával használni ingyenesen.

Először is készítsünk egy tanúsítványt a szerverünk számára. Először állítsuk le az Apache szolgáltatást.

service apache2 stop

Majd készítsük el a tanúsítványt:

certbot-auto certonly

Megkérdezi a program, hogy hogyan kívánsz hitelesíteni, én az 1-es lehetőséget választottam, illetve a hitelesíteni kívánt domain nevet kérdezte meg, ezután más teendő nem is volt, a tanúsítvány létrejött. A teljes kimenetet alább láthatod:

root@mx:~# certbot-auto certonly
Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Apache Web Server plugin (apache)
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 1
Plugins selected: Authenticator apache, Installer None
Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c' to cancel): mx.zsoltina.eu
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for mx.zsoltina.eu
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/mx.zsoltina.eu/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/mx.zsoltina.eu/privkey.pem
   Your cert will expire on 2020-03-21. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le


Nincs más dolgunk, mint automatizálni a tanúsítványok használatát:

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

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/
if ls ispserver.*.bak 1> /dev/null 2>&1; then rm ispserver.*.bak; fi
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
scp ispserver.crt /etc/mysql/server-cert.pem
scp ispserver.key /etc/mysql/server-key.pem
service mysql restart
service pure-ftpd-mysql restart
if [ -d "/etc/monit" ]; then service monit restart; fi
if [ -d "/etc/postfix" ]; then service postfix restart; service dovecot restart; fi
service apache2 restart

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_CREATE, IN_MODIFY ./etc/init.d/le_ispc_pem.sh

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

service apache2 restart
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.

Opcionális

Az oldalunk most elérhető a https://mx.zsoltina.eu:8080 címen. De a domain_név maga a /var/www/html könyvtár tartalomra mutat, ami a 000-default.conf Apache konfigurációban van megadva. (Természetesen a beállításoknál te a saját domain neved használd.) Ezért érdemes átirányítani az ide jövő kéréseket az ssl titkosított oldalra. Talán a legegyszerűbb egy html átirányítás:

nano /var/www/html/index.html

Majd adjuk hozzá a következőket:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta http-equiv="Refresh" content="0;URL=https://mx.zsoltina.eu:8080" />
</head>
<body>
</body>
</html>

Továbbá én az ISPConfig felületén készítettem egy weboldalt isp.zsoltina.eu néven, amit átirányítottam a https://mx.zsoltina.eu:8080 oldalra. Az átírányítás R=301,L típusú, az útvonal maga az url, SEO átirányítás nincs.

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 tanúsítványokbó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.

Forrás itt található