DBMail und Horde: zwei Exoten kombiniert

DBMail und Horde: zwei Exoten kombiniert

DBMail als IMAP Server und Horde Webmail hat bestimmt schon jede Admina mal gehört. Allerdings sind das dann doch eher Produkte, die nicht so im Rampenlicht stehen – da ist Dovecot und Roundcube gängiger. Ist ja auch nichts schlimmes, aber als neugieriger Mensch macht es dann doch Spass, mal mit solchen Produkten zu basteln. Und ich musste feststellen, dass es so viele (brauchbare/aktuelle/fehlerlösende) Infos dann doch nicht gibt. Deswegen will ich mit diesen Artikel meine Erfahrungen etwas ordnen und zusammen fassen. Wobei ich sagen muss, dass ich mittlerweile ein kleiner Fan von DBMail und Horde geworden bin. Die beschriebenen Installationen, Befehle und Konfigurationen basieren auf Ubuntu Linux 14.04 LTS.

DBMail 3.1

DBMail ist ein IMAP Server der POP, LMTP und Sieve Dienste mitbringt und unter der GPLv2 Lizenz steht. Ein umständliches Konfigurieren der Dienste entfällt – einfach aktivieren. Daten wie Postfächer, Emails und Passwörter hält DBMail standardmäßig in einer Datenbank vorrätig. Die Verwaltung von Mail- Accounts, Passwörter, Aliase und Weiterleitungen sind mit einfachen DBMail- eigenen Befehlen auf einer Linux Konsole möglich. Eigene SQL Anweisungen zusammenbauen, entfällt mit DBMail!

Die DBMail Installation auf einen Ubuntu Linux ist einfach. Die Paketquellen als Sourcelist unter /etc/apt/souces.list.d/ in einer Datei hinterlegen (siehe Beschreibung im link) und entsprechend mit apt-get install dbmail installieren. Vorher sollte eine Datenbank für DBMail angelegt werden. Der administrative User (grant all …) der DBMail Datenbank wird später zur Horde Konfiguration gebraucht! Also Username und Passwort merken oder vorher besorgen.

In einigen Installations- Howtos findet sich noch der Hinweis, dass die Datenbank bei Nutzung eines MySQL Servers auf InnoDB umgestellt werden sollte. Wird aber MariaDB (ein Fork von MySQL) benutzt, kann man sich das sparen, weil MariaDB standardmäßig die XtraDB Maschine nutzt um Daten zu verwalten und diese ist vergleichbar mit InnoDB.

Letztlich ist

  • die /etc/dbmail/dbmail.conf anzupassen (selbsterklärend),
  • die Postfix Anbindung in der postfix/main.conf (3 Zeilen) und master.conf (1 Zeile) einzurichten (lmtp bevorzugen),
  • und zwei SQL Dateien zu erstellen (siehe link zuvor).

Die ganze Installation und Konfiguration dauert etwa 3 Stunden (mit Kaffee). Keine Panik – sieht schlimmer aus, als es ist. Danach mal den Befehl dbmail-util -a auf der console ausführen und die Ausgabe prüfen.

Wobei ich in der /etc/dbmail/dbmail.conf folgende Anweisung gesetzt habe:

dburi   =       mysql://dbmailuser:dbmailpasswd@localhost:3306/dbmaildb

Horde Webmail 5.0

Die Horde Groupware Webmail Edition ist – würde ich einfach mal behaupten! – nicht so gängig und verwirrt vielleicht auch erst einmal viele potentielle Nutzer. Es ist nicht so ganz die gängige Installations- Methode wie sie von z.B. WordPress bekannt ist und bietet auch nicht eine Konfigurationsoberfläche wie z.B. bei Egroupware oder Tine20, aber es hat seinen technischen Reiz und einige Vorteile. So bringt es z.B. CalDAV/CardDAV/WebDAV sowie s/mime und openGPG Support mit. Eine Lesezeichen, Notizen und Aufgaben- Verwaltung, selbst ein MP3 Player, bringt Horde mit. Eine Horde Demo- Seite findet sich hier.

Im Vorfeld ist es wichtig, dass ein Mailkonto angelegt wird (siehe dbmail-users Befehl auf der console), dass den administrativen User darstellt, weil ein solches Konto bei der Installation von Horde abgefragt und Horde mit DBMail IMAP als Authenfizierungsquelle (backend) konfiguriert wird! Kurz: Horde kennt (in diesen setup) nur Nutzer die auch DBMail kennt! So könnte also ein webmaster Account in DBMail angelegt werden, der dann auch den Admin in Horde darstellt.

Die gesamte Installation ist einfacher als vermutet.

Erster Schritt

Horde wird aus einem Pear Software Verzeichnis installiert. Pear’s sind PHP Kanäle (channels) aus denen PHP Projekte und Erweiterungen installiert werden können, vergleichbar den gängigen Linux Repositorys. Allerdings setzt diese Installationsquelle eine Internetverbindung voraus!

Erstelle eine Datenbank und einen administrativen Datenbank- User:

mysql -u root -p
create database horde;
grant all on horde.* to horde@localhost identified by 'horde$passwd';
exit

Zweiter Schritt

Installiere Horde über ein Linux Terminal mit root- Rechten. Führe folgende Zeilen nacheinander auf einer Linux console aus. Etwas Geduld mitbringen!

pear channel-discover pear.horde.org
pear install horde/horde_role
pear run-scripts horde/horde_role

Hierbei wird nach dem Installations- Ordner z.B. /var/www/horde gefragt. Der Ordner muss vorher erstellt werden. Dann weiter mit folgenden Zeilen:

pear install -a -B horde/webmail
webmail-install

Jetzt startet das Horde Setup und fragt nach der Datenbank Anbindung, keine Panik, sieht schlimmer aus, als es ist. Ich gehe hier von einer MariaDB/MySQL Datenbank aus:

mysqli
administrativen User in der Datenbank: hier horde 
sein Passwort: horde$passwd 
tcp 
Server: localhost
Port: wie vorgegeben 
Datenbankname: horde 
Zeichensatz utf-8: mit Enter bestätigen 
SSL connect: No 
Certification Authority: mit Enter bestätigen
different server: mit Enter bestätigen
Specify an existing mail user who you want to give administrator
permissions (optional):

Hier verlangt das setup genau den administrativen User, den ich oben im Abschnitt DBMail gefordert hatte! Unter diesen User wird Horde (nach einer Anmeldung an Horde) administrativ verwaltet. Ich setze hier als Beispiel: webmaster.

Beachte! Unter DBMail erfolgt die Anmeldung eines Nutzers normalerweise nur mit dem Namen – also ohne Domäne, also nicht als Email- Adresse! Sollte es in deiner Konfiguration anders sein, muss hier der administrator entsprechend hinterlegt werden, also z.B. eine Email Adresse. Kann notfalls nachträglich in der /var/www/horde/config/conf.php angepasst werden.

Ein “Thank you for using Horde Groupware Webmail Edition!” sagt alles.

Dritter Schritt

Die Horde braucht einen Alias (Schnellzugriff). Lege die Datei /etc/apache2/conf-avaible/horde.conf an und schreibe folgende Zeile hinein:

alias /horde /var/www/horde

und aktiviere diese config mit:

a2enconf horde

Übergib den Installations- Ordner /var/www/horde an den Apache- User:

chown -R www-data:www-data /var/www/horde

Aktiviere diese Apache Anpassung mit:

service apache2 reload

Wenn Du jetzt im Browser http://deinserver/horde aufrufen kannst und du auf die Horde Seite kommst, ist bisher alles super gelaufen.

Vierter Schritt

Die Verbindung von Postfix zum Authentifizierungservice findet über saslauthd statt.

apt-get install sasl2-bin libsasl2-modules

Erstelle die Datei /etc/postfix/sasl/smtpd.conf mit folgenden Inhalt:

mech_list: PLAIN LOGIN
pwcheck_method: saslauthd

Aktiviere den saslauthd in der /etc/default/saslauthd mit den folgenden Optionenen:

START=yes
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

Mit dem folgenden Befehl auf der console aktivierst Du die neue Konfiguration von saslauthd:

service saslauthd start

Hier gibt es einige Faktoren zu berücksichtigen, die vom jeweiligen Server und seiner Konfiguration abhängig sind (chroot für Postfix, usw.) aber als Startpunkt einer brauchbaren Konfiguration kann der schon (oben) genannte Artikel helfen.

Fünfter Schritt

Jetzt müssen wir dafür sorgen, dass Horde den DBMail IMAP Server als Authentifizierungsserver nutzt. Dazu müssen wir die folgende Datei anlegen und anpassen:

cp /var/www/horde/imp/config/backend.php /var/www/horde/imp/config/backend.local.php

Wobei imp das Email Modul von Horde ist und wir dieses als Authentifizierungs- Agenten zu DBMail einrichten. Mit dem Kopie- Vorgang erhalten wir die originale backend.php von imp und konfigurieren nur in der backend.local.php die von Horde dann automatisch genutzt wird. Wenn was schief geht: einfach die backend.local.php löschen und wieder neu aus der backend.php kopieren. Damit kann es Sinn machen, diese Datei nach erfolgreicher Konfiguration zu sichern und nach einer Neu- Installation wieder einzusetzen.

Hier mal der relevante Auschnitt einer backend.local.php. Diese Konfiguration setzt voraus, dass der IMAP auf SSL/TLS läuft, also Port 993 nutzt und auf dem selben Server läuft, auf dem auch Horde installiert wird.

// IMAP server
$servers['imap'] = array(
    // ENABLED by default; will connect to IMAP port on local server
    'disabled' => false,
    'name' => 'IMAP Server',
    'hostspec' => 'localhost',
    'hordeauth' => false,
    'protocol' => 'imap',
    'port' => 993,
    // Plaintext logins are disabled by default on IMAP servers (see RFC 3501
    // [6.2.3]), so TLS is the only guaranteed authentication available by
    // default.
    'secure' => 'ssl',
);

Damit kennt Horde schon einmal unseren IMAP Server. Eine Anmeldung funktioniert noch nicht. Zu diesem Punkt kommen wir jetzt.

Sechster Schritt

Jetzt wollen wir den Passwort Zugriff unter Horde einrichten. Damit ermöglichen wir auch unseren Horde Nutzern, ihr Mail Passwort in der DBMail Datenbank zu wechseln! Dazu müßen wir das Passwort Modul für Horde nachinstallieren:

pear install -a -B horde/passwd

Dann wechseln wir in den Ordner /var/www/horde/passwd/config und führen folgenden Befehl aus:

cp backend.php backend.local.php

und in backend.local.php konfigurieren wir den Zugriff auf unsere DBMail Datenbank:

$backends['sql'] = array(
    'disabled' => false,
    'name' => 'SQL Server',
    'driver' => 'Sql',
    'policy' => array(
        'minLength' => 6,
        'minNumeric' => 1,
    ),
    'params' => array(
        'phptype' => 'mysql',
        'hostspec' => 'localhost',
        'username' => 'dbmail',
        'password' => 'dbmailpasswd',
        'encryption' => 'md5-hex',
        'database' => 'dbmail',
        'table' => 'dbmail_users',
        'user_col' => 'userid',
        'pass_col' => 'passwd',
        'show_encryption' => false,
        // The following two settings allow you to specify custom queries for
        // lookup and modify functions if special functions need to be
        // performed.  In places where a username or a password needs to be
        // used, refer to this placeholder reference:
        //    %d  gets substituted with the domain
        //    %u  gets substituted with the user
        //    %U  gets substituted with the user without a domain part
        //    %p  gets substituted with the plaintext password
        //    %e  gets substituted with the encrypted password
        //
        // 'query_lookup' => 'SELECT user_pass FROM horde_users WHERE user_uid = %u',
        // 'query_modify' => 'UPDATE horde_users SET user_pass = %e WHERE user_uid = %u',
        'query_lookup' => 'SELECT passwd FROM dbmail_users WHERE userid = %u',
        'query_modify' => 'UPDATE dbmail_users SET passwd = %e WHERE userid = %u'
    ),
);

Eigentlich überschaubar! Wir wollen als Daten- Backend einen SQL Server (die Datenbank von DBMail) nutzen, müssen also die Deaktivierung dieser Schnittstelle abschalten (disabled => false), können eine Regel (policy) setzen, welche und wieviele Zeichen ein User Passwort haben muss, geben dann als Parameter die Daten der Datenbank ein (‘params’ => array…).

Da DBMail ja immer die selben Tabellen bei einer Installation anlegt, sollte dieses Beispiel bei Einsatz von DBMail der Version 3.1.13 ohne weitere Anpassung funktionieren. Für Mailserver Datenbanken mit anderen Spalten (table) und Sortierungen (user_col / pass_col), müssen in dieser Datei die Namen entsprechend angepasst werden. Die query am Ende dieser Datei ermöglicht dem Nutzer aus Horde heraus, das Passwort in der Datenbank zu wechseln. Vorsichtig mit encryption Experimente: Die Mailnutzer unter DBMail erhalten mit

dbmail-users -w 'ottos$passwd' -p md5-digest -a otto

ein Initial Passwort. Horde nutzt allerdings eine andere Verschlüsselung.

Die hier gezeigte Einstellung ist aufeinander abgestimmt – das md5-hex in der backend.local.php und das md5-digest aus dem dbmail-users Befehl ist kompatibel!

Kleines Resümee

Wir haben DBMail und Horde installiert, betreiben zwei Datenbanken, in der es jeweils einen administrativen User gibt, den wir für die Konfiguration von Horde brauchen. Die Horde Datenbank verwaltet Benutzerdaten in der Horde Datenbank und nutzt die Passwörter aus der DBMail Datenbank als Authentifizierungs- Backend. Der Horde Nutzer wird erstmalig mit dem dbmail-users Befehl als Email Account angelegt und erhält ein initiales Passwort, mit diesen meldet sich der Horde Nutzer an Horde an und kann dort sein Passwort einfach auf das gewünschte (unter Beachtung der policy) Passwort wechseln.

Nochmal! Ich glaube, dass es immer hilfreich ist, erst einmal das Konstrukt zu verstehen. Und von dieser Warte gesehen, ist der Aufbau überschaubar. ‘Schnell mal…’ ist allerdings auch kein guter Ansatz. Einen Tag mit Tests und Fehlerbeseitigung sollte Admina schon einplanen. Deswegen hier noch ein, zwei Dinge, die mir aufgefallen sind:

  • Beim dbmail-users Befehl das Passwort in Hochkomma’ setzen, sonst ist ein Passwort nur bis zu einem eventuell vorhandenen Sonderzeichen in der DBMail Datenbank.
  • Wenn der Parameter show_encryption auf true steht, kommt beim Passwortwechsel in Horde die Meldung ‘falsches altes Passwort’. Warum auch immer…
  • Wenn die Werte false oder true im Hochkomma’ stehen, kommt beim Passwortwechsel in Horde die Meldung ‘falsches altes Passwort’. Warum auch immer…
  • Die Option ‘preferred’ in /var/www/horde/passwd/config/backend.local.php kann Sinn machen, wenn mehrere Passwort Backends benutzt werden z.B. zusätzlich LDAP und ein Backend priorisiert werden muss.
  • Wenn in /etc/dbmail/dbmail.conf bei ‘tls_ciphers’ SSLv3 verweigert wird (!SSLv3), funktioniert mit Thunderbird v38.8 die Anmeldung am DBMail IMAP Server nicht mehr. Wer muss nachbessern?

Weitere Vorgehensweise

Wenn Du dich an Horde erfolgreich mit deinen administrativen Nutzer (hier im Beispiel: webmaster) angemeldet hast, würde ich empfehlen, über das Zahnrad Symbol in der oberen Querleiste über ‘Administration’ und ‘Konfiguration’ auf den Punkt ‘Horde (horde)’ zu gehen. Dort fängst Du einfach mal mit dem Punkt ‘Mailer’ an – sonst kannst Du keine Emails versenden.

Da Horde ja deinen IMAP Server in der Konfiguration hat und unter dem Punkt ‘Mailer’ einen SMTP Server (hier im Beispiel: localhost) bekommt, sollte der Mailversand danach funktionieren. Der Rest ist Kosmetik. Keine Sorge, Einstellungen, die Du dort vornimmst, zählen für alle Nutzer. Solltest Du den Punkt Adminitration/Konfiguration nicht im Menü haben, bist Du nicht(!) als der administrative Nutzer angemeldet, den Du bei der Installation im setup vorgegeben hast. Prüfe den entsprechenden Eintrag in /var/www/horde/config/conf.php und korrigiere notfalls dort.

Falle nicht im Menü auf den Konfigurationspunkt ‘IMAP Server’ rein: dieser Punkt sollte in unseren setting ignoriert werden und hat nichts mit der Verwaltung von DBMail oder IMAP Konten zutun!

Sollte nach dem abspeichern einer Änderung die Meldung kommen, dass eine Datei nicht beschreibbar/kopierbar oder nicht verfügbar ist, prüfe nochmal im Ordner /var/www/horde wem diese gehört. In der Fehlermeldung siehst Du auch, um welche Datei es geht. Der User www-data als owner bei Einsatz eines Apache2 Servers unter Ubuntu ist immer eine gute Wahl.

Teste mal

Mit dem Horde Testscript gibt es eine schöne Möglichkeit, die eigene Horde Installation zu prüfen. Setze in der Datei /var/www/horde/config/conf.php folgende Option auf false,

$conf['testdisable'] = false;

rufe dann deine Horde URL im Browser auf und hänge test.php dran, also z.B. http://deinserver/horde/test.php. Wenn die Testseite nicht mehr gebraucht wird, deaktiviere sie mit dem Wert true.

Die De-Installation

Einfach folgenden Befehl auf der Linux console ausführen

pear uninstall `pear list -c horde | tail -n +4 | awk '{ print "horde/"$1 }'`

und die restlichen Ordner z.B. /var/www/horde und Datenbanken weglöschen. Auch der saslauthd kann dann – wenn nicht für andere Dienste gebraucht – wieder deaktiviert werden: Einfach in /etc/default/saslauthd START=no setzen.

Zum Schluss

Natürlich könnte dieser Text auch kürzer sein, aber ich habe mich schon ziemlich kurz gefaßt – eigentlich gibt es noch einige interessante Aspekte zu DBMail und Horde. Aber so ist das eben auf Pilgermaske. Da diese Artikel auch zugleich eine Art Doku für mich sind, muss ich immer einen Kompromiss finden. Wie dem auch sei: Auch wenn die Installation etwas komplex erscheint, mir gefallen die beiden Produkte mittlerweile sehr gut. Letztlich lernt man immer was dazu – vielleicht hilft etwas cool jazz beim basteln.

Have fun…


Autor: Mathias R. Ludwig

MCSE, MCITP, MCDBA, RHCT, CompTIA, ITILv3, AdA, VWA Ökonom, Dipl.SozArb., Kfz-Mechaniker, Panzer-Mechaniker/-Fahrer (HptGefr), Stanislaw Lem und Linux Fan, Feuerpferd.

Kommentare “DBMail und Horde: zwei Exoten kombiniert”