Dovecot-Authentifizierung mit SSL

Diese kurze Anleitung beschreibt, wie man einen Dovecot IMAP-/POP3-Server so einrichtet, dass eine Anmeldung mit Klartext-Passwort nur noch über eine verschlüsselte SSL-Verbindung funktioniert. Ausprobiert habe ich das ganze zuhause auf meinem Server, der unter Ubuntu 8.0.4.1 x86 läuft und auf dem Dovecot bereits seit einigen Tagen problemlos funktioniert (Update: Bei einer Neu-Installation von Ubuntu 9.10 hat es auch geklappt). Die meisten Infos zu dieser Anleitung stammen aus dem Ubuntu-Wiki und dem Dovecot-Wiki.

1. Das Passwort verschlüsselt ablegen
Für die Anmeldung am Mailserver will ich nicht das Systempasswort des Users (aus /etc/shadow) verwenden, sondern ein eigenes. Das soll aber nicht im Klartext irgendwo rumliegen, sondern nur als SHA-Hash. Dabei hilft das Programm dovecotpw, dem als Parameter das gewünschte Hash-Verfahren übergeben wird. Hier ein Beispiel, wie es mit Salted SHA aussieht, man könnte aber genauso gut salted MD5 oder etwas anderes verwenden.

dovecotpw -s ssha -u <username>

Das Ergebnis verwendet man, um einen Eintrag in der Datei /etc/passwd.dovecot zu erzeugen. Jede Zeile der Datei beginnt mit dem Benutzernamen, gefolgt von einem Doppelpunkt. Danach kommt die Ausgabe von dovecotpw, also das Passwort Schema und der Hashwert des Passworts. Ein Beispiel:
username:{SSHA}bhLzZ105Lh+hShJ8UK3jD+nQekwD0okG

Man muss Dovecot noch mitteilen, wo die Passwort-Datei abgelegt ist, da diese nicht /etc/passwd.dovecot sein muss, sondern auch anderswo liegen kann. Dazu folgenden Eintrag in /etc/dovecot/dovecot.conf machen:
passdb passwd-file {
args = /etc/passwd.dovecot
}

2. Unverschlüsselte Plaintext-Authentifizierung abschalten
Wenn bisher die Anmeldung mit Plaintext-Passwörtern über unverschlüsselte Verbindungen zulässig war, dann sollte man dies jetzt in der Datei /etc/dovecot/dovecot.conf abschalten.
disable_plaintext_auth = yes

3. SSL einrichten
Nach dieser Beschreibung im Dovecot-Wiki kann man sehr schnell die Verwendung einer SSL-Verbindung einrichten. In Ubuntu 8.0.4.1. funktioniert das ohne irgendeine Änderung bereits nach der Installation. Bei mir trat nur das Problem auf, dass das verwendete Snakeoil-Zertifikat bereits abgelaufen war. Mit folgendem Befehl kann man sich sehr einfach ein neues Zertifikat selbst erstellen:
sudo make-ssl-cert generate-default-snakeoil --force-overwrite
Leider lässt sich dabei keine Gültigkeit einstellen und das erzeugte Zertifikat müsste bereits nach einem Monat erneuert werden. (Update zu Ubuntu 9.10: Mittlerweile wurde die Default-Gültigkeit auf 10 Jahre geändert, man kann also direkt bei 4. weitermachen.) Ändern kann man das ganze, indem man make-ssl-cert anpasst. Dabei handelt es sich um ein einfaches Skript, das unter /usr/sbin liegt. Mit einem beliebigen Editor öffnen (z.B.sudo vim /usr/sbin/make-ssl-cert und nach openssl suchen. In die folgende Zeile (bei mir Zeile 124) fügt man den Parameter -days ein, der die Gültigkeitsdauer angibt:
openssl req -config $TMPFILE -new -x509 -nodes \
Nach der Änderung:
openssl req -config $TMPFILE -new -days 365 -x509 -nodes \

Für die „Nicht-Snakeoil-Variante“ findet man den zu änderenden Openssl-Aufruf einige Zeilen darüber.

4. Dovecot neu starten und testen
Zum Schluss muss man nur noch den Server neu starten (sudo /etc/init.d/dovecot restart) und die Einstellungen des Mail-Clients anpassen. Im Thunderbird wäre das bei den Konto-Einstellungen zu finden:
-> Server-Einstellungen -> Sicherheit & Authentifizierung -> Verschlüsselte Verbindung verwenden -> SSL
Das sollte es dann gewesen sein.