Diese Seite beschreibt die Installation und Einrichtung von [[http://horde.org|Horde]] Webmail unter [[https://debian.org|Debian]] Bullseye. Eine ältere [[https://systemausfall.org/wikis/howto/Horde%20unter%20Debian%20installieren?action=recall&rev=32|Version]] beschreibt die Einrichtung unter Debian Jessie mit vielen Anpassungen. <> = Installation = == Datenbank einrichten == Zuerst muss eine Datenbank angelegt werden - in diesem Beispiel ist es eine Postgres-Datenbank: * zum Postgres-Nuzter wechseln und Postgres-Client aufrufen:{{{ su postgres psql }}} * Nutzer für Horde-Datenbank anlegen{{{ create user horde with password '$PASSWORD'; }}} * Datenbank für Horde anlegen{{{ create database horde with owner horde encoding 'utf8'; }}} * Datenbank-Client beenden == Installation == Infos zur Horde-Installation sind im [[https://wiki.debian.org/Horde|Debian-Wiki]] zu finden. Ausgangsbasis für die Installation ist die Webmail-Suite:{{{ apt-get install php-horde-webmail php-pgsql php-horde-lz4 php-ssh2 libjs-excanvas libimage-exiftool-perl }}} Anschließend das Skript {{{webmail-install}}} im Terminal aurufen und alle Schritte durchgehen. Damit es beim Anlegen der Datenbank keine Fehlermeldung gibt<>, muss das Paket {{{php5-pgsql}}} vorher installiert werden. Soll eine lokale postgres-Datenbank benutzt werden, muss als Verbindungsart <> {{{tcp}}} mit {{{127.0.0.1}}} ausgewählt werden, da andernfalls ein lokal existierender Nutzer erwartet wird. == Rechte festlegen == Die Konfigurationsdateien liegen unter {{{etc/horde}}}. Die Rechte für dieses Verzeichnis und für die Konfigurationsdateien der einzelnen Anwendungen sollten noch angepasst werden: {{{ chmod -R o-rwx /etc/horde chown -R :www-data /etc/horde/ chown www-data:www-data /etc/horde/$APP/conf.php }}} == Installation testen == Horde bringt ein Testscript mit, das zahlreiche Informationen über die Installation liefert. Dazu in {{{/etc/horde/horde/conf.php}}} bearbeiten und {{{$conf[testdisable]}}} auf {{{false}}} setzen<>. Nun sind die Informationen unter http://$DOMAIN/horde/test.php erreichbar. = Einrichtung = Damit die Ersteinrichtung über das Webinterface funktioniert, muss ein Admin-Nutzer festgelegt werden. Dazu die folgenden Einträge zu {{{/etc/horde/horde/conf.php}}}<> hinzufügen:{{{ $conf['auth']['admins'] = array('your_admin_user'); $conf['auth']['driver'] = 'auto'; $conf['auth']['params']['username'] = 'your_admin_user'; $conf['auth']['params']['password'] = 'your_password'; }}} == Allgemeines == Als Admins berechtigte User können umfangreiche Einstellungen direkt nach Anmeldung in Horde vornehmen. Horde schreibt die Änderungen in die entsprechende Konfigdateien. Diese sollten dann aber nicht im Terminal bearbeitet werden, da durch Änderungen im Webinterface die Dateien überschrieben werden. Um dennoch Änderungen direkt in den Konfigdateien zu ermöglichen, müssen diese als {{{$Dateiname.local.php}}} gespeichert werden. Die {{{.local.php}}}-Dateien sollten nur die geänderten strings enthalten, mehr nicht. In den entsprechenden Dateien kann festgelegt werden, dass die entsprechende Option in der Weboberfläche nicht änderbar ist. Bsp: {{{$_prefs['from_addr']['locked'] = true;}}}. Individuelle Nutzereinstellungen speichert Horde im Backend. Werden neue globale Einstellungen eingeführt, müssen die alten Nutzereinstellungen gelöscht werden. Dies geht mit dem entsprechenden sql-Befehl: {{{ DELETE FROM horde_prefs WHERE pref_scope = '' AND pref_name = '' }}} == Webserver == Die Apache-Konfigurationsdatei für Horde kann in der default-Version erstmal genutzt werden. Wenn allerdings einige Horde-Links 404-Fehler erzeugen, bspw. beim Speichern von Tasks {{{The requested URL /horde/nag/t/save was not found on this server}}} muss "mod rewrite" aktiviert werden: {{{ a2enmod rewrite }}} == Verbindung zum Mailserver == Nach der Installation greift Horde per IMAP auf den Mailserver zu. Falls dieser nicht auf lokal installiert ist, muss IMP entsprechend konfiguriert werden. Dies geschieht unter {{{/etc/horde/imp/}}}. Dort muss zuerst die Datei {{{backends.local.php}}} angelegt und anschliessend entsprechend gefüllt werden:{{{ > == PHP-FPM == [[http://php-fpm.org/|PHP-FPM]] ist ein weiterer PHP-Interpreter, der Horde möglicherweise beschleunigt. Die Installation und Einrichtung sind hier ganz gut beschrieben: [[http://www.queryadmin.com/506/apache2-php5-fpm-fastcgi-apc-debian-wheezy/|Link 1]] und [[http://www.sysadminslife.com/linux/howto-apache-mit-php-fpm-und-mod-fastcgi-unter-debian-wheezy/|Link 2]]. Zuerst die notwendigen Pakete installieren:{{{ apt-get install apache2-mpm-worker libapache2-mod-fastcgi php-fpm php-apc}}} Anschließend die entsprechenden Apache-Module aktivieren:{{{ a2enmod actions alias fastcgi rewrite}}} Die Konfiguration von PHP-FPM liegt unter {{{/etc/php7.4/fpm/pool.d/www.conf}}} und ist nach der Installation schon ganz brauchbar. Die Horde-Apache-Konfiguration muss entsprechend angepasst werden:{{{ ServerName webmail.example.org ServerAdmin horde@example.org SetEnv HTTPS on DocumentRoot /usr/share/horde AllowOverride None Options Indexes FollowSymLinks MultiViews AllowOverride Limit FileInfo AuthConfig Require all granted Include conf-available/php-horde.conf ErrorLog ${APACHE_LOG_DIR}/horde.error.log LogLevel error CustomLog ${APACHE_LOG_DIR}/horde.access.log combined SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost" Require all denied Require all denied }}} <> Horde [[https://major.io/2007/03/23/adjust-max_execution_time-for-horde-in-plesk/|ignoriert]] die {{{max_execution_time}}}, die über die {{{php.ini}}} festgelegt wird. Stattdessen wird der Wert {{{0}}} durch {{{/usr/share/horde/config/conf.xml}}} gesetzt, um unbegrenzt lange Operationen zu ermöglichen. Dies scheint bei der Verwendung von PHP-FPM allerdings nicht zu funktionieren. So kann bspw. die Synchronisation von großen Kalendern an der zu geringen {{{max_execution_time}}} scheitern. Über die Pool-Konfiguration {{{/etc/php7.4/fpm/pool.d/www.conf}}} kann der Wert erhöht werden:{{{ php_admin_value[max_execution_time] = 120}}} == Standard-Identität mit ldap-Mailkonto verknüpfen == Wir wollen, dass die mit den jeweiligen Anmeldedaten verbundene Mailadresse automatisch zur Standardidentität hinzugefügt wird <>. Dazu müssen wir Horde mitteilen, dass es aus der ldap-Datenbank die entsprechende Mailadresse heraus suchen soll. Dazu {{{/etc/horde/horde/prefs.local.php}}} bearbeiten: {{{ $_prefs['from_addr']['locked'] = false; $_prefs['from_addr']['hook'] = true; }}} Insbesondere für User mit anderen mehreren Maildomains ist es wichtig, dass {{{$_prefs['from_addr']['locked'] = false;}}} gesetzt ist, andernfalls können sie keine weiteren Mail-Adressen in Horde konfigurieren. {{{$conf['user']['verify_from_addr'] = true;}}} sollte in {{{/etc/horde/horde/conf.local.php}}} oder über das Webinterface aktiviert sein. Anschließend kommt in {{{/etc/horde/horde/hooks.php}}} der eigentliche Code - die $searchBase ist hier nur beispielhaft aufgeführt und muss entsprechend angepasst werden: {{{ public function prefs_init($pref, $value, $username, $scope_ob) { switch ($pref) { case 'from_addr': if (is_null($username)) { return $value; } $ldapServer = 'Adresse_deines_LDAP_Servers'; $ldapPort = '389'; $searchBase = 'sc=mailAccount,ou=People,o=server,dc=example,dc=org'; $ds = @ldap_connect($ldapServer, $ldapPort); $searchResult = @ldap_search($ds, $searchBase, 'cn=' . $username); $information = @ldap_get_entries($ds, $searchResult); if (($information === false) || ($information['count'] == 0)) { $user = ''; } else { $user = ($information[0]['mail'][0] != '') ? $information[0]['mail'][0] : $information[0]['cn'][0]; } ldap_close($ds); return empty($user) ? $username : $user; }}} == Adressbuch erstellen == In der Grundkonfiguration gibt es kein persönliches Adressbuch. Ohne Adressbuch lassen sich keine öffentlichen GPG-Schlüssel importieren. Um hier eine Fehlerquelle auszuschließen, legen wir fest, dass ein Standardadressbuch beim ersten Login erstellt wird. Dazu in der Admin-Weboberfläche unter ''Administration --> Horde --> Shares'' die Option {{{$conf[share][auto_create]}}} aktivieren. Um gleichzeitig die Benutzung einzuschränken an selber Stelle {{{$conf[share][no_sharing]}}} aktivieren. Bei der ersten Einrichtung von Horde kam es vor, dass die GPG-Schlüsselverwaltung nicht verfügbar war, weil in IMP kein Adressbuch als Standard ausgewählt wurde. Um dies automatisch nachzuholen, {{{/etc/horde/imp/prefs.local.php}}} bearbeiten: {{{ $_prefs['add_source']['value'] = 'localsql'; }}} == Webmail als Start-Applikation == Normalerweise landet man nach dem Login im Portal. Da wir Horde als reinen Webmailer einsetzen wollen, ist es sinnvoll, direkt in der Mailapplikation zu landen. Einrichtung in {{{/etc/horde/horde/prefs.local.php}}}, den entsprechenden Eintrag suchen und von ''horde'' in ''imp'' ändern: {{{ $_prefs['initial_application']['value'] = 'imp'; }}} == Verschlüsselungsfunktionen einrichten == Die GPG-Schlüssel speichert Horde leider nicht auf Dateiebene, sondern verküpft mit den Adresse in turba in der Datenbank. Im Webinterface sollte die Schlüssellänge auf ''4096'' geändert werden. Damit die Schlüsselerstellung nicht ewig dauert, weil auf dem Server nicht genug Zufallsdaten erzeugt werden: {{{ apt-get install haveged }}} In der Grundkonfiguration erkennt Horde/IMP keine inline-verschlüsselten Mails. Folglich ist auch kein Entschlüsseln möglich. Die früher nutzerbasierte Einstellung kann [[https://github.com/horde/horde/commit/1ef63fd23fe712745eb95a94a0bc3f5879a57922#diff-2aaeb5079860bbf5a3a43480cbfe06beR42|mittlerweile]] nur noch zentral vorgenommen werden. Dazu muss {{{/etc/horde/imp/mime_drivers.local.php}}} erstellt und bearbeitet werden: {{{ applications['mein_link'] = array('name' => 'Mein Link', 'status' => 'link', 'url' => 'https://example.com/mein_link', 'menu_parent' => 'others', 'target' => '_new'); }}} == Login-Namen konvertieren == Hordes backend ist unterscheidet Loginnamen nach Groß- und Kleinschreibung. Meldet sich jemand mit seinem sao-Account an und schreibt dabei den ersten Buchstaben groß, werden andere Adressbücher, Notizen und Aufgaben angezeigt, als bei einem komplett klein geschriebenen Loginnamen. Das Backend geht in diesem Fall von unterschiedlichen Accounts aus. Um hier keine Verwirrung zu stiften, weisen wir Horde an, die Loginnamen in Kleinbuchstaben zu konvertieren. Dazu muss {{{/etc/horde/horde/hooks.php}}} bearbeitet werden - der entsprechende hooks ist bereits vorhanden. Es müssen nur die Kommentarzeichen entfernt werden: {{{ public function authusername($userId, $toHorde) { return $toHorde ? Horde_String::lower($userId) : $userId; } }}} == Anmeldeaufgaben automatisch ausführen lassen == Es gibt keine zentrale Einstellung für die Anmeldeaufgaben. Damit die Hinweismeldungen nach dem Einloggen nicht mehr erscheinen, muss die jeweilige Aufgabe in der entsprechenden Konfigurationsdatei den Status "locked" erhalten. == Weitere Einstellungen im Überblick == || ''Einstellung'' || ''Datei'' || ''Code'' || || Einstellungen zu vergessenen Passworten ausblenden || /etc/horde/horde/prefs.local.php || $prefGroups['forgotpass']['suppress'] = true; || || Papierkorb aktivieren und regelmäßig leeren || /etc/horde/imp/prefs.local.php || $_prefs['use_trash']['value'] = '1';<
>$_prefs['empty_trash_menu']['value'] = '1';<
>$_prefs['purge_trash_interval']['value'] = '3';<
>$_prefs['purge_trash_keep']['value'] = '7'; || == Geschwindigkeit optimieren == In der Horde-Konfiguration sollten die empfohlenen Caching-Einstellungen aktiviert werden. === memcached einrichten === [[http://memcached.org|Memcached]] Cache-Server zum Hinterlegen und Abholen von Daten aus dem Arbeitsspeicher. Die Nutzung von Horde kann dadurch beschleunigt werden. Zur Installation sind folgende Pakete notwendig:{{{ apt-get install memcached php-memcache php-horde-memcache }}} Der memcached-Server wird per {{{/etc/memcached.conf}}} eingerichtet. Die Standardeinstellungen können erstmal verwendet werden. Anschließend muss Horde in der Admin-Oberfläche unter ''Administration --> Konfiguration --> Horde --> Distributed Hash Table '' eingerichtet werden. Dort kann unter ''$conf[hashtable][driver]'' der ''Memcache Server'' ausgewählt und mit den notwendigen Port-Angaben eingerichtet werden. Die Konfigurationsdatei {{{/etc/horde/horde/conf.php}}} sollte anschließend in etwa so aussehen:{{{ $conf['hashtable']['params']['hostspec'] = array('localhost'); $conf['hashtable']['params']['port'] = array('11211'); $conf['hashtable']['params']['weight'] = array(); $conf['hashtable']['params']['persistent'] = false; $conf['hashtable']['params']['compression'] = false; $conf['hashtable']['params']['large_items'] = true; $conf['hashtable']['driver'] = 'Memcache'; }}} Zu beachten ist noch, dass ''$conf['sessionhandler']['hashtable'] = false'' gesetzt ist - [[http://horde.690.n7.nabble.com/Using-Memcache-with-the-new-Horde-HashTable-tp110699p110700.html|siehe]]. Der Status des Servers lässt sich wie folgt ermitteln:{{{ $ echo stats | nc 127.0.0.1 11211 }}} Was die einzelnen Angaben bedeuten, ist [[http://www.debianroot.de/server/memcached-auf-debian-lennysqueeze-installieren-1265.html|hier]] recht gut beschrieben. == Rechtschreibprüfung aktivieren == Die Rechtschreibprüfung für das Verfassen von E-Mails kann wie folgt aktiviert werden: * Installation von DebianPackage:apsell und der zur Verfügung stehenden Sprachen:{{{ apt install apsell aspell-de}}} * Konfiguration in der Admin-Oberfläche unter ''Horde'' --> ''Spell Checker''. Die Konfigurationtsdatei {{{/etc/horde/horde/conf.php}}} sieht dann so aus:{{{ $conf['spell']['driver'] = 'aspell'; $conf['spell']['path'] = '/usr/bin/aspell';}}} Wichtig ist übrigens, dass die php-Funktion [[http://php.net/manual/en/function.proc-open.php|proc_open]] in der {{{php.ini}}} nicht deaktiviert wurde. == Mailfilterung mit Sieve == [[http://sieve.info/|Sieve]] ist eine Skriptsprache, um Filterregeln für Mails zu definieren. Das folgende Beispiel geht davon aus, dass Dovecot mit [[http://wiki2.dovecot.org/Pigeonhole/ManageSieve|ManageSieve]] verwendet wird. Die Einrichtung wird [[https://thomas-leister.de/open-source/linux/ubuntu/dovecot-sieve-manager-installieren-und-einrichten/|hier]] gut beschrieben. In Horde ist die App Ingo für die Filterung zuständig. Damit Ingo mit dem !ManageSieve-Daemon kommunizieren kann, muss die Date {{{/etc/horde/ingo/backends.local.php}}} erstellt werden:{{{ > durch die Git-Version ersetzt werden * {X} Gelegentlich können Kalender aufgund eines sql-Fehlers nicht benuzt werden. Näheres zur Fehlermeldung findet sich im [[https://bugs.horde.org/ticket/13934|Bugreport]]. Der [[https://github.com/horde/horde/commit/0e9a737b83f1742057429e9d5ca438dcb745bec3|Fix]] ist recht trivial und muss auf die Datei {{{/usr/share/php/Horde/Prefs/Storage/Base.php}}} angewandt werden. ---- = Fussnoten, Hinweise und Links = * [[http://bugs.horde.org/ticket/13190|Bugreport zum fehlerhaften Import von Schlüsseldateien]] * [[http://wiki.horde.org/FAQ/Admin/Config#toc23|html-Nachrichten inline anzeigen]] * [[http://wiki.horde.org/Doc/Dev/Configuration|Dokumentation zu den Horde Konfigurationsdateien]] * [[http://www.inmotionhosting.com/support/email/horde-webmail/using-horde-mail-templates|Vorlagen erstellt]] * [[http://dokuwiki.nausch.org/doku.php/centos:mail_c6:horde_3|Hinweise zur Konfiguration]] * [[http://kb.parallels.com/de/3376|Wie ändere ich die maximale Anhangsgröße in Horde?]] * [[http://www.omerzu.de/horde.php|Mehrere E-Mail-Adresse pro Kontakt in Turba]] * Falls es zu sql-Fehlern kommt: Nutzerdaten können aus der Datenbank mit dem Skript {{{horde-remove-user-data}}} gelöscht werden