Roundcube Managesieve Plugin

blog-image

Gestern stellte ich fest das Managesieve in Roundcube nicht mehr funktioniert, keine Ahnung seit wann dem so ist

Seit vielen Jahren habe ich einen eigenen Mailserver am laufen, zuerst hatte ich einen V-Server bei Hetzner, 2015 bin ich dann auf einen zu Hause selbst gehosteten Server gewechselt, bei dem ich alle aufgaben in Virtuelle Maschinen aufgeteilt habe

Meine Systeme sind hierbei immer eine minimale Ubuntu LTS Installation (Ubuntu Server) ohne grafische Oberfläche und mit dem Befehl

do-release-upgrade

kann man wunderbar das System aktualisieren, das klappte bei mir eigtl. immer ohne Probleme nur hat sich beim letzten mal wohl was an den Settings vom Managesieve Plugin geändert und das herauszufinden hat wirklich ewig gedauert daher lasse ich euch an meinen Erkenntnissen teilhaben

Eine typische Konfiguration unter /etc/roundcube/plugins/managesieve/config.inc.php sieht so aus

<?php
$config=array();

$config['managesieve_port'] = 4190;

$config['managesieve_default_host'] = 'meinmailserver';

$config['managesieve_auth_type'] = PLAIN;

$config['managesieve_auth_cid'] = null;

$config['managesieve_auth_pw'] = null;

$config['managesieve_usetls'] = true;
?>

Das meiste davon ist mittlerweile super egal so sieht das heute aus

<?php
$config=array();

$config['managesieve_host'] = 'tls://meinmailserver:4190';

$config['managesieve_auth_type'] = PLAIN;

$config['managesieve_auth_cid'] = null;

$config['managesieve_auth_pw'] = null;
?>

Zunächst es steht praktisch überall das $config['managesieve_usetls'] ist vollkommen unnötig es steht zwar im Internet überall wenn irgendwas nicht geht das das super wichtig ist aber grep sagt mir das das im PHP Code nirgendwo verwendet wird

$config['managesieve_port'] gibt’s auch nicht mehr und aus $config['managesieve_default_host'] wurde $config['managesieve_host'] was nun beide zusammen fast

Sieht doch alles eindeutig und easy aus, hm ja sieht es und ich wil gar nicht sagen wie lang ich daran saß das wieder zum laufen zu kriegen ich sag nur so viel ich habe Roundcube und PHP zwischenzeitlich neu installiert, den Plugin Code und NET_Sieve durch debugged, mit verschiedenen Tools gearbeitet um die Verbindung zu analysieren

Nur um am ende herauszufinden das ChatGPT lügt und ich mich nicht auf meine annahmen verlasen sollte

Gut was war jetzt das Problem, nun mein Dovecot verwendete StartSSL und nicht TLS, ich weiß ehrlich gesagt nicht warum ich das so eingerichtet habe ich bin damals vor mehr als 10 Jahren einem Tutorial gefolgt und da die Verbindung nur innerhalb meiner DMZ läuft ist das auch ziemlich egal

Schauen wir uns mal die URL an tls://meinmailserver:4190

Das Protokoll kann hier tls, ssl oder keines sein

  • TLS –> StartSSL verschlüsselt nach Aufforderung durch den Client
  • SSL –> TLS also verschlüsselt von beginn an
  • keine Angabe –> Dovecot lehnt den Login ab außer für zwei formate in denen die Credentials übertragen werden

Wie man an SSL und TLS sieht sind hier beide logisch vertauscht und es hat wirklich ewig gedauert bis ich das gemerkt habe, Dokumentation dazu habe ich auch nirgends gefunden, ChatGPT und Google werfen dir irgendeinen Mist hin

Vielleicht sollte ich noch kurz zeigen wie das in der dovecot.conf aussieht

service managesieve-login {
    inet_listener sieve {
        port = 4190
        ssl = yes
    }
}

Wenn hier ssl = yes steht dann wird TLS verwendet, bei ssl = no wird StartSSL oder keine Verschlüsselung eingesetzt

Zum Abschluss noch ein paar nützliche Befehle

Mit sieve-connect kann man seinen Sieve Server also seine dovecot Konfiguation prüfen

sieve-connect -u <user>@<domain> -a <user>@<domain> -s <mailserverdomain> --port 4190

das klappt aber scheinbar nur bei StartSSL nicht bei TLS, was alles andere als hilfreich ist wenn man nach Fehler Ursachen sucht 😉

Wenn man seine Sieve Filter dann irgendwann eingerichtet hat, kann man bereits vorhandene Mails hiermit nach den filterregeln sortieren lassen

sudo sieve-filter -e -W -C -u <user>@<domain>.de /var/vmail/sieve/<domain>/<user>/active-script.sieve 'INBOX'