Installiert ist ISPConfig in Version 3.x. Ziel ist es das Control Panel, FTP (PureFTPd), Monit und Mail (Dovecot oder Courier) mittels SSL Lets Encrypt Zertifikat abzusichern.
Das Panel von ISPConfig wird nach einer Grundinstallation über http://domain.tld:8080 aufgerufen. Nachfolgend wird der FQDN server1.domain.tld als Beispiel verwendet.
Wird statt Apache2 Webserver ein nginx verwendet, kann das Wort nachfolgend einfach getauscht werden. Wird der Mailserver Courier statt Dovecot verwendet, kann entsprechender Schritt ausgelassen werden.
Vorbereitungen
Zuvor sollte der Server soweit konfiguriert sein, dass er im DNS per FQDN abgefragt werden kann, also auch SSL mit Lets Encrypt für Webseiten funktioniert.
- per SSH am Server anmelden
- per SSH auf dem Server den FQDN abfragen:
hostname -f
- sollte während der Installation von ISPConfig kein SSL für den Port 8080 (eigenes Zertifikat) konfiguriert worden sein, muss dies zunächst mittels:
ispconfig_update.sh erfolgen
- danach prüfen ob das Panel nun mittels https://fqdn:8080 mit dem Self-Sign-Cert aufrufbar ist, der Browser fragt in der Regel nach einer erneuten Bestätigung bzw. nach dem hinzufügen einer Ausnahme
Erstellen einer Webseite für den Server
Als nächstes wird eine neue Webseite im Control Panel mit dem FQDN des Servers erstellt:
- am Panel als Administrator anmelden
- im Menü auf Webseiten klicken und eine neue Webseite erstellen, ggf. zuvor über das Menü die Domain mit dem FQDN hinzufügen
- als Optionen muss lediglich Lets Encrypt SSL aktiviert werden
- nun das Panel erneut aufrufen, wobei nun das Zertifikat von Lets Encrypt verwendet werden sollte
- hier nun auch nochmal die eben erstellte Webseite aufrufen und den „Document Root“ Pfad merken
Bis hier sollte alles wie oben beschriebene funktionieren. Die Serverseite ist per Lets Encrypt Zertifikat erreichbar, das Panel über den FQDN mit dem Port 8080 und selbst Sign Cert aufrufbar. Nun kann es mit foglenden Schritten weiter gehen.
ISPConfig – Control Panel mit Lets Encrypt Zertifikat
Als nächstes wird das selbstsignierte Zertifikat gegen das von Lets Encrypt für das Panel getauscht. Als Symlink wird der Pfad der Webseite verwendet, kann aber auch der Pfad für das Letsencrypt Live Verzeichnis sein.. Dafür wie folgt vorgehen:
- SSL Verzeichnis vom Panel aufrufen:
cd /usr/local/ispconfig/interface/ssl/
- Backup des Self-Sign Cert
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
- Symlink zum Lets Encrypt Zertifikat des Webverzeichnisses setzen (bessere Option)
ln -sf <Document_Root_der_obigen_Webseite>/ssl/$(hostname -f).crt ispserver.crt
ln -sf <Document_Root_der_obigen_Webseite>/ssl/$(hostname -f).key ispserver.key
Symlink zum Lets Encrypt Zertifikat im Live-Folder erstellen (Achtung Ordner und Dateien werden von Lets Encrypt verwaltet und können sich ändern, daher lieber den Pfad vom WWW setzen, da der immer richtig ist):# ln -sf /etc/letsencrypt/live/$(hostname -f)/fullchain.pem ispserver.crt
# ln -sf /etc/letsencrypt/live/$(hostname -f)/privkey.pem ispserver.key
- Key und CRT Datei zur PEM kombinieren:
cat ispserver.{key,crt} > ispserver.pem
- Anpassen der Dateimodusbits
chmod 600 ispserver.pem
- Reload des Webservers Apache2
/etc/init.d/apache2 reload
[ ok ] Reloading apache2 configuration (via systemctl): apache2.service.
Damit ist nun das Panel mittels Lets Encrypt Zertifikat unter https://fqdn:8080 erreichbar. Achtung die automatische Aktualisierung des Zertifikats wird bis hier nicht gemacht, dazu eine Lösung weiter unten in der Anleitung.
Lets Encrypt SSL Zertifikat für Postfix
Damit auch Postfix mittels Lets Encrypt Zertifikat versorgt wird, sind folgende Änderungen durchzuführen:
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
service dovecot restart
Log prüfen:
tail /var/log/daemon.log
Lets Encrypt SSL Zertifikat für Dovecot Mailserver
Dovecot sollte nicht zusammen mit Courier laufen. Zuvor prüfen ob SSL bereits eingerichtet wurde:
nano /etc/dovecot/dovecot.conf
[...]
ssl_cert = </etc/postfix/smtpd.cert
ssl_key = </etc/postfix/smtpd.key
[...]
Sine diese Einträge vorhanden, so lassen, ansonsten hinzufügen.
Lets Encrypt SSL Zertifikat für Courier Mailserver
Courier sollte nicht zusammen mit Dovecot laufen.
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
Lets Encrypt SSL Zertifikat für pure-FTPd
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
Lets Encrypt SSL Zertifikat für monit
Sofern monit verwendet wird, folgendes anpassen und einen Symlink auf die selbe Datei wie bei pure-ftpd setzen:
nano /etc/monit/monitrc
[...]
set httpd port 2812 and
SSL ENABLE
PEMFILE /etc/ssl/private/pure-ftpd.pem
allow admin:'secretpassword'
[...]
ISPConfig – Control Panel mit automatisch erneuertem Lets Encrypt Zertifikat
Diese Lösung wird benötigt, wenn man die oben erstellte ispserver.pem automatisch erneuert haben möchte, wenn auch das Lets Encrypt Zertifikat automatisch erneuert wird. Ansonsten muss man, vor bzw. nach Erneuerung, die ispserver.pem von Hand erstellen. Damit dies funktioniert wird das Tool incron verwendet. incron ist ein Daemon der das Dateisystem auf bestimmte Events beobachtet und daraufhin Befehle ausführen kann.
- installieren von incron unter Debian:
apt-get install -y incron
- Script zur Überwachung und Ausführung der Erneuerung der ispserver.pem hinzufügen:
# nano /etc/init.d/ispconfig_letsencrypt_update_pem.sh
#!/bin/sh
### BEGIN INIT INFO
# Provides: Lets Encrypt Auto Updater for ispserver.pem
# Required-Start: $local_fs $network
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Lets Encrypt Auto Updater for ispserver.pem
# Description: Update ispserver.pem automatically after ISPC Lets Encrypt SSL Certs are renewed.
### END INIT INF
cd /usr/local/ispconfig/interface/ssl/
mv ispserver.pem ispserver.pem-$(date +"%y%m%d%H%M%S").bak
cat ispserver.key ispserver.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
Wer kein Monit verwendet, entfert es. Wer Statt Apache2 nginx verwendet tauscht die Wörter aus. Dieses Script ist für einen Stand-Alone ISPConfig Server. Für Multi-Server muss das Script angepasst werden und per scp Befehl die Datei kopiert werden.
Nun muss das Script ausführbar gemacht werden und der root Benutzer erlaubt werden incrontab auszuführen:
chmod +x /etc/init.d/ispconfig_letsencrypt_update_pem.sh
echo "root" >> /etc/incron.allow
incrontab -e
- hier das Script hinzufügen:
/etc/letsencrypt/archive/$(hostname -f)/ IN_MODIFY /etc/init.d/ispconfig_letsencrypt_update_pem.sh
Bei mir wurde dieser Teil -f)/ nicht korrekt hinzugefügt. Ich habe die Datei dann direkt geöffnet und angepasst. Kontrolle über:
incrontab -l oder # cat /var/spool/incron/root
- Abschließend den Webserver neustarten:
service apache2 restart
Thats it – Have Funn …
Interessiert in verschiedenste IT Themen, schreibe ich in diesem Blog über Software, Hardware, Smart Home, Games und vieles mehr. Ich berichte z.B. über die Installation und Konfiguration von Software als auch von Problemen mit dieser. News sind ebenso spannend, sodass ich auch über Updates, Releases und Neuigkeiten aus der IT berichte. Letztendlich nutze ich Taste-of-IT als eigene Dokumentation und Anlaufstelle bei wiederkehrenden Themen. Ich hoffe ich kann dich ebenso informieren und bei Problemen eine schnelle Lösung anbieten. Wer meinen Aufwand unterstützen möchte, kann gerne eine Tasse oder Pod Kaffe per PayPal spenden – vielen Dank.
Bei letsencrypt Zertifikaten muss der Pfad bei neueren Installationen um ein -le ergänzt werden damit die Symlinks angelegt werden.
ln -sf /ssl/$(hostname -f)-le.crt ispserver.crt
ln -sf /ssl/$(hostname -f)-le.key ispserver.key
Hallo Frank,
wie kommst du darauf? Ich konnte dazu nichts finden.
Mich wundert der Punkt vor dem /etc in der incron Kommandozeile.
/etc/letsencrypt/archive/$(hostname -f)/ IN_MODIFY ./etc/init.d/ispconfig_letsencrypt_update_pem.sh
Meiner Meinung nach müsste die Zeile folgendermassen aussehen:
/etc/letsencrypt/archive/$(hostname -f)/ IN_MODIFY /etc/init.d/ispconfig_letsencrypt_update_pem.sh
damit es funktioniert.
immerhin hat man ja ca. 3 Monate Zeit bis man es merkt.
Das Verzeichnis /etc liegt ja bereit in der Wurzel des Dateisystems und das wäre dann der absolute Pfad. Wenn man einen ./etc angibt dann ist damit ein etc Verzeichnis gemeint, dass im aktuellen Verzeichnis befindet.
Das wäre, wenn ich das richtig sehe, dann das Verzeichnis /var/spool/incron/etc/ gemeint, was es ja nicht gibt, und damit würde das Kommando fehlschlagen.
Hallo Harald,
ja da hast du Recht, der Punkt ist da fehl am Platz. Danke für den Hinweis.