Postfix/Dovecot mit Ubuntu Linux

Ich habe neulich wieder einen Server mit der Postfix/Dovecot-Kombo installiert. Dafür gibt es ein tolles Tutorial von Christoph Haas, das ich sehr empfehlen kann: http://workaround.org/ispmail/squeeze

Die Anleitung bezieht sich eigentlich auf die Installation unter Debian Squeeze und verwendet Dovecot zur Authentifizierung für IMAP und auch für authentifiziertes SMTP. Unter aktuelleren Ubuntu-Versionen (bei mir: 12.04) ist eine neue Dovecot-Version installiert, bei der die Konfigurations-Optionen etwas anders sind und bei der die vorher einzige Konfigurationsdatei auf mehrere Einzeldateien verteilt wurde. Dies ist zwar im Tutorial nicht direkt abgedeckt, die zahlreichen Kommentare anderer Nutzer erklären jedoch die Vorgehensweise ganz gut.

Eine Optimierung, die ich gegenüber dem Tutorial noch vorgenommen habe, ist die Speicherung der Passwörter mit einem sicheren und gesalzenen Hash. Das verlinkte Tutorial sieht standardmäßig die Speicherung als ungesalzenen MD5-Hash vor, was durch zahlreiche vorhandene Rainbow-Tabellen nicht mehr als Stand der Technik angesehen wird.

Bevor dies umkonfiguriert wird, muss man noch eine Abwägung treffen. Es geht dabei um Sicherheit bei der Übertragung (Plaintext oder nicht) vs. die Sicherheit bei der Ablage des Passwortes auf dem Mailserver.

Die Authentifizierung über Dovecot kann so konfiguriert werden, dass das Passwort im Klartext übertragen wird. Das ist auch die Vorgehensweise im Tutorial. An sich erstmal wenig wünschenswert, weil so ein „Man-in-the-Middle“ das Passwort mitschneiden kann. Dies wird allerdings dadurch gemildert, dass sowohl IMAP als auch die SMTP-Authentifizierung über SSL laufen sollten.

Die Alternative ist, eine Authentifizierung zu wählen, die das Passwort nicht im Klartext überträgt. Der verbreitetste Standard hierfür ist CRAM-MD5. Dort werden nur Hashwerte über das Netzwerk übertragen, so dass ein „Man-in-the-Middle“ das Klartext-Passwort nicht mehr mitschneiden kann. Auf SSL kann dann theoretisch verzichtet werden. Nachteil ist, dass nicht alle Mailclients CRAM-MD5 unterstützen – beispielsweise der Standard-Android-Mailclient.

Gravierendster Nachteil ist jedoch, dass die Verwendung von CRAM-MD5 oder anderer Nicht-Plaintext-Protokolle zumindest bei Dovecot impliziert, dass die Passwörter in einem bestimmten Format in der Passwort-Datenbank hinterlegt werden müssen. Dies ist im Falle von CRAM-MD5 relativ schwach verschlüsselt oder – bei Unterstützung von weiteren Authentifizierungs-Mechanismen neben CRAM-MD5 – sogar zwangsweise im Klartext hinterlegt. Eine Hinterlegung gesalzener und gehashter Passwörter ist dann nicht möglich. Je nach Risikosituation ist das eine schlechte Idee.

Da ich in meinem Fall sowieso SSL nutze, habe ich mich dazu entschlossen, die Übertragung von Klartextpasswörtern zu aktivieren, sie dafür aber gesalzen und mit SHA gehasht abzulegen.

Gegenüber dem Standard-Vorgehen laut Tutorial sind nur wenige Änderungen notwendig, die ich im Folgenden beschreiben werde.

Die folgende Option stellt sicher, dass das Klartext-Passwort nur übertragen wird, wenn eine verschlüsselte Verbindung aufgebaut ist. Achtung: Dies ist offenbar nicht kompatibel mit Outlook!

disable_plaintext_auth = yes

In der Konfiguration für die die Passwort-Datenbank (im Tutorial: MySQL) ist der genutzte Hash-Algorithmus zu definieren:

default_pass_scheme = SSHA512

In diesem Fall wird ein gesalzener SHA512 genutzt. Hierfür müssen natürlich die entsprechend gehashten Passwörter in der SQL-Datenbank hinterlegt werden. Dovecot liefert ein Tool mit, das die entsprechenden Hashes berechnet:

doveadm pw -s SSHA512

Anschließend kann man ein Passwort eingeben, das im passenden Format gehasht wieder ausgeworfen wird. Beispiel:

{SSHA512}UDXrQ7i7+bZgqTts0WwEXOtTMPyuPyY/rCean90ZD6QuGp1kRAud88jaoIkgFehjgDukEw42QS5t3VLMOvRj7/UIJv8=

Dieser Hash muss nun in der Datenbank-Tabelle „virtual_users“ in der Spalte password hinterlegt werden. Es ist zu beachten, dass laut Tutorial nur 32 Zeichen für die Spalte vorgesehen sind. Offenbar passt der SHA512-Hash da nicht rein 😉 Die Spalte muss also noch geändert werden, bspw. etwa auf 255 Zeichen Kapazität. Anschließend muss der gesamte Hash in die Spalte kopiert werden (inkl. der geschweiften Klammern).

Nach Eingabe des neuen Passwortes auch auf dem Mailclient sollte die Verbindung funktionieren. Weitere Anpassungen auf Client-Seite sind nicht notwendig.

Join the Conversation

2 Comments

  1. Habe IMAP/SMTP auch mit SSL laufen, trotzdem würde ich die verschlüsselte Passwortübertragung geren aktivieren. Kann man den CRAM-MD5 Hash nicht mit SSHA512 in der DB speichern und das Select Statement des Passwords entsprechend anpassen, so dass am Ende wieder der CRAM-MD5 hash bei rauskommt? Oder geht das nicht weil SSHA512 ein „One-way hashing Format“ ist?

  2. Moin,

    genau richtig – wenn ich das Passwort in der DB als SSHA512 ablege, kriegt man das nicht mehr direkt in das CRAM-MD5-Format. Der Server kann nur eine Richtung (Klartextpasswort => SSHA512) berechnen, nicht jedoch andersrum.

Leave a comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.