Menü Schließen

ISPConfig Panel für Mail und FTP mit Lets Encrypt Zertifikat absichern

ISPConfig Logo

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
  • Neustart 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 …

4 Kommentare

  1. Frank

    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

  2. Harald Knupp

    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.

Schreibe einen Kommentar zu Harald Knupp Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert