ISPConfig: Zertifikate von Let’s Encrypt automatisch erstellen

Let’s Encrypt ist eine neue CA (Zertifizierungsstelle), die seit kurzem im Produktivbetrieb kostenlose TLS-Zertifikate vergibt.

Das ganze läuft automatisiert, die CA stellt dafür ein Script zur Verfügung, welches sämtliche Kommunikation mit den Servern von Let’s Encrypt regelt. Das Anfordern und erneuern von Zertifikaten ist also sehr einfach und mit einem Befehl über die Kommandozeile zu erledigen.

Für Hosting-Anbieter (oder Selbsthoster) ist Let’s Encrypt natürlich eine tolle Möglichkeit, die Webseiten schnell und kostenlos mit einem validen Zertifikat zu versehen. Für Anbieter mit dem Control Panel ISPConfig gibt es inzwischen eine externe Lösung, um die Zertifikatanforderung nahtlos in die Weboberfläche zu integrieren. Die externe Erweiterung soll eventuell in den nächsten Versionen von ISPConfig fester Teil der Software werden, bisher ist das aber noch nicht der Fall, das Panel muss also gepatcht werden.

Die Erweiterung von alexalouit ist auf github zu finden und kann unter Debian leicht installiert werden. Vorher muss allerdings das Script von Let’s Encrypt installiert werden, ebenfalls von github:

cd /tmp
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto

Der Installer kann abgebrochen werden, bevor er beim Anfordern von Zertifikaten hilft, das wollen wir schließlich über ISPConfig erledigen.

Nun wird „ISPConfig-letsencrypt“ geklont:

cd /tmp
git clone https://github.com/alexalouit/ISPConfig-letsencrypt.git
cd ISPConfig-letsencrypt

Auch hier gibt es einen automatischen Installer, der die Erweiterung installiert und ISPConfig patcht (Dateien verschieben, Datenbank aktualisieren und Konfiguration anpassen):

root@helium:/tmp/ISPConfig-letsencrypt# php -q install.php
Create backup on /var/backup/ directory
/bin/tar: Entferne führende „/“ von Elementnamen
Backup finished
Copy Let's Encrypt configuration.
Start MySQL update..
Configure Apache and reload it.
Create backup cronjob on /var/backup/ directory
Add a cronjob for renewal certs
And finally, update ISPConfig.
Done my job. Enjoy!

Ist dies erledigt, erscheint in ISPConfig in den Einstellungen einer Website neben dem bisher vorhandenen Kontrollkästchen „SSL“ auch das Kontrollkästchen „Let’s Encrypt“:

ISPConfig: Website-Einstellungen mit Kontrollkästchen für Let's Encrypt
ISPConfig: Website-Einstellungen mit Kontrollkästchen für Let’s Encrypt

Setzt man diesen Haken (der Haken bei SSL setzt sich dann automatisch), wird bei der Aktion „Zertifikat Erstellen“ im Tab „SSL“ nicht mehr ein selbstsigniertes Zertifikat auf dem Server generiert, sondern es wird eines bei Let’s Encrypt angefordert. wird automatisch ein Zertifikat von Let’s Encrypt angefordert und die Seite damit ausgestattet. Im SSL-Tab muss und darf nichts weiter getan werden.

Mehr ist gar nicht notwendig, nach kurzer Zeit ist das Zertifikat im Ordner von Let’s Encrypt hinterlegt und wird in den SSL-Ordner der Seite gelinkt. Auch die Änderungen in den vhosts werden automatisch vorgenommen. Die Seite ist nun über https abrufbar und das Zertifikat wird von den meisten vernünftigen Browsern als vertrauenswürdig angezeigt:

Website mit dem über ISPConfig abgerufenen Let's Encrypt Zertifikat
Website mit dem über ISPConfig abgerufenen Let’s Encrypt Zertifikat

ISPConfig 3: Adaptec RAID-Status im Monitoring anzeigen

ISPConfig hat eine praktische Funktion im Backend: Es zeigt wichtige Informationen über den Systemstatus an, so unter anderem auch den Status des Software- oder Hardware-RAIDs. Leider wird bisher nur mdraid (Software), mpt-status (LSI), sowie tw_cli (3ware) unterstützt, ich besitze allerdings einen Server mit einem Adaptec-RAID, welches mit dem Tool arcconf überwacht werden kann.

Den Status Quo fand ich also nicht so toll und fand auch keine fertigen Lösungen, die auf eine aktuelle Version (derzeit 3.0.5.4p5) von ISPConfig passen. Also erweiterte ich die Abfrage und stelle sie nun hier zur Verfügung.

Voraussetzung: die Datei arcconf muss auf dem Server im Verzeichnis /sbin vorhanden sein.

ISPConfig ist modular aufgebaut, die Abfrage des Systemstatus wird über die Datei monitor_core_module.inc.php im Ordner /usr/local/ispconfig/server/mods-available realisiert, diese fragt allerdings nur Daten aus den monitor_tools ab, welche sich in der Datei monitor_tools.inc.php im Ordner /usr/local/ispconfig/server/lib/classes befindet.

Hier findet sich auch die Funktion monitorRaid(), welche hier benötigt wird. Hier suchen wir folgende Zeile (am Anfang der Funktion):

/*
* Check, if Software-RAID is enabled
*/

Davor fügen wir nun die Abfrage von arcconf ein:

/*
* Check, if arcconf is present
*/
if (file_exists('/sbin/arcconf')) {
	/*
	* Fetch the output
	*/
	$data['output'] = shell_exec('arcconf GETCONFIG 1 LD');
	$state = 'ok';
	if(is_array($data['output'])) {
		foreach ($data['output'] as $item) {
			/*
			* The output contains information for every RAID and every HDD.
			* We only need the state of the RAID
			*/
			if (strpos($item, 'Logical device name                      : RAID') !== false) {
				/*
				* We found a raid, process the state of it
				*/
				if (strpos($item, 'Optimal') !== false) {
					$this->_setState($state, 'ok');
				} else {
					/* we don't know the state. so we set the state to critical, that the
					* admin is warned, that something is wrong
					*/
					$this->_setState($state, 'critical');
				}
			}					
		}
	}
}

Ich habe versucht, mich an die in der Datei vorhandenen Strukturen zu halten. Der Code prüft, ob die Datei /sbin/arcconf existiert. Wenn ja, führt es die Datei mit den Parametern GETCONFIG 1 LD aus, was uns die Info über den RAID-Controller zurück gibt.

Adaptec RAID: Ausgabe von arcconf wird im ISPConfig-Monitoring angezeigt
Adaptec RAID: Ausgabe von arcconf wird im ISPConfig-Monitoring angezeigt

Nun wird geprüft, ob der Controller ein RAID enthält und dann, ob der Status „Optimal“ ist. Wenn ja, wird $state als „ok“ zurück gegeben, wenn nein, als „critical“. Meine Ausgabe kennt bisher nur diese beiden Stadien, da ich leider bisher die anderen Outputs von arcconf nicht kenne (falls sie mir jemand nennen kann: bitte einen Kommentar hinterlassen). Mir reicht das bisher so, wenn das RAID nicht optimal ist, bekomme ich so eine kritische Warnung.

Fragen und Anregungen nehme ich natürlich immer gerne in den Kommentaren entgegen.

ISPConfig 3: Jailkit nachträglich installieren

Mit ISPConfig 3 ist es möglich, den Hosting-Kunden bzw. Benutzern einen Zugriff auf den ihnen zugewiesenen Webspace per SSH zu gewähren, die Benutzer werden mittels Jailkit in ihren Ordner gechrootet.

Da ISPConfig bei der Einrichtung überprüft, welche Dienste verfügbar sind und diese dann konfiguriert, muss Jailkit eigentlich installiert werden, bevor ISPConfig installiert wird. Stellt man nun nachher fest, dass man Jailkit nun doch benötigt, ist das natürlich doof. Es gibt aber einen Weg, Jailkit bei einer bestehenden ISPConfig-Installation nachträglich zu konfigurieren und einzubinden, diesen möchte ich hier zeigen. Das nachfolgende Tutorial wurde mit Version 3.0.5.4p2 durchgeführt, es sollte aber auch mit älteren Versionen so funktionieren. Alles weitere geschieht natürlich auf eigene Gefahr.

Zuerst muss Jailkit natürlich heruntergeladen und installiert werden, wie es z.B. das Perfect Server Tutorial bei Howtoforge zeigt (die Version von Jailkit muss natürlich angepasst werden):

apt-get install build-essential autoconf automake1.9  libtool flex bison
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.17.tar.gz
tar xvfz jailkit-2.17.tar.gz
cd jailkit-2.17
./configure
make
make install

Nun muss ISPConfig erneut heruntergeladen und entpackt werden:

cd /tmp
wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
tar xvfz ISPConfig-3-stable.tar.gz
cd ispconfig3_install/install

Danach muss die Datei update.php geändert werden. Hierzu suchen wir die folgende Zeile in der Datei:

if($reconfigure_services_answer == 'yes') {

die darauf folgenden Zeilen löschen wir bis zu den Zeilen

//** Configure Jailkit
swriteln('Configuring Jailkit');
$inst->configure_jailkit();

Diese lassen wir stehen und löschen darunter wieder alle weiteren Zeilen bis zur schließenden Klammer. Der Abschnitt sieht nun so aus:

//** Shall the services be reconfigured during update
$reconfigure_services_answer = $inst->simple_query('Reconfigure Services?', array('yes', 'no'), 'yes','reconfigure_services');

if($reconfigure_services_answer == 'yes') {

                //** Configure Jailkit
                swriteln('Configuring Jailkit');
                $inst->configure_jailkit();

}

//** Configure ISPConfig

Die Datei wird gespeichert. Nun müssen wir das Update starten, indem wir folgenden Befehl eingeben:

php -q update.php

Der automatische Updater startet und fragt uns einige Fragen, die wir wie folgt beantworten:

Shall the script create a ISPConfig backup in /var/backup/ now? (yes,no) [yes]: yes
Reconfigure Permissions in master database? (yes,no) [no]: no
Reconfigure Services? (yes,no) [yes]: yes

Nun werden die Services rekonfiguriert. Da wir eben in der update.php sämtliche Services außer Jailkit gelöscht haben, wird nur Jailkit konfiguriert, der Rest bleibt unangetastet. Als nächstes kommt die Ausgabe „Updating ISPConfig“. Das wollen wir ja nicht, deshalb brechen wir das Script an dieser Stelle mit Strg + C ab.

Das wars eigentlich. Nun sollten noch die Dateien in /tmp gelöscht werden und Jailkit sollte verfügbar sein und funktionieren.

Dienste rekonfigurieren für und mit ISPConfig

Der eine oder andere weiß vielleicht, dass ich seit längerem auf ISPConfig als Hosting-Panel setze und damit sehr zufrieden bin. Es frisst meine Ressourcen nicht unnötig auf (bei meinen Servern ist jedenfalls kaum zu spüren, dass da was läuft) und fällt im Grunde genommen überhaupt nicht auf, wenn man (wie ich die meiste Zeit) mit der Konsole arbeitet.

Da der eine oder andere eben vielleicht weiß, dass ich ISPConfig einsetze, werden mir hin und wieder auch Fragen diesbezüglich gestellt. Die meisten Antworten liegen auf der Hand bzw. sind in 1-3 Minuten dank Google zu finden, manche aber auch nicht. So wurde ich letztens gefragt, was man denn tun kann, wenn man, beispielsweise durch ein Dist-Upgrade aus versehen sämtliche Konfigurationsdateien geändert oder zusammengeführt hat und nun irgendwie nichts mehr so richtig läuft.

ISPConfig bietet nämlich verdammt viele Einstellungsmöglichkeiten, man kann so ziemlich alles resyncen, Systemeinstellungen in der Weboberfläche vornehmen und so weiter. Nur eine Option zum rekonfigurieren der Dienste habe ich bislang nicht gefunden. Bei der Installation werden die Konfigurationen so angepasst, dass die einzelnen Dienste möglichst problemlos mit ISPConfig zusammenarbeiten. Werden diese Konfigurationsdateien falsch geändert oder überschrieben, funktioniert plötzlich z.B. der Mailserver nicht mehr so, wie es vorgesehen ist. Natürlich sollte man die Konfigurationsdateien regelmäßig und insbesondere vor größeren Änderungen am System sichern, aber im Zweifelsfall hat das benötigte Backup einen Fehler und/oder das Backupsystem ist ganz ausgefallen. Oder man hat einfach keins.

Obwohl es anscheinend keine offizielle Möglichkeit gibt, die Services für ISPConfig zu rekonfigurieren, hat man in einem solchen Fall Glück und kann ein manuelles Update durchführen (was natürlich mit Vorsicht zu genießen ist). Das mitgelieferte Shellscript für das Update funktioniert nicht, wenn schon die aktuellste Version installiert ist, ISPConfig muss also tatsächlich heruntergeladen und über die update.php aktualisiert werden:

cd /tmp
wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
tar xvfz ISPConfig-3-stable.tar.gz
cd ispconfig3_install/install
php -q update.php

Das Script fragt, ob ein Backup gemacht werden soll, was wir natürlich bejahen, danach ob die Berechtigungen in der master database neu gesetzt werden sollen, was wir verneinen (wir wollen das bestehende System ja nicht ändern). Dann kommt schon der Punkt, den wir brauchen: Der Updater fragt uns, ob wir die Dienste rekonfigurieren wollen, was wir natürlich wollen:

Reconfigure Services? (yes,no) [yes]:

Configuring Postfix
Configuring Mailman
Configuring Jailkit
Configuring SASL
Configuring PAM
Configuring Courier
Configuring Spamassassin
Configuring Amavisd
Configuring Getmail
Configuring Pureftpd
Configuring Apache
Configuring vlogger
Configuring Apps vhost
Configuring Database
Configuring Bastille Firewall
Updating ISPConfig

Den Port belassen wir wie vorgefunden, ebenso das Zertifikat, Crontab können wir rekonfigurieren. Danach startet ISPConfig die Services neu und alles sollte wieder laufen, wie es soll.