Mac als Mail-Server und Spamfilter

Seite 4: Dovecot

Inhaltsverzeichnis

Spätestens an dieser Stelle sollten die XCode-Tools von der Leopard-DVD installiert sein. Wenn das der Fall ist, laden Sie das Dovecot-Archiv und extrahieren es in einen Pfad ohne Sonder- oder Leerzeichen, weil sonst spätere Schritte scheitern. Wechseln Sie dann auf der Kommandozeile in dieses Verzeichnis, um die Software zu kompilieren und zu installieren:

cd ~/dovecot-1.0.13 
./configure
make

Weil die Software im Pfad /usr/local/ installiert werden soll, dort aber nur der User root Schreibrechte hat, meldet man sich als root an. Der root-Account ist auf dem Mac von Haus aus nicht aktiv. Um ihn zu aktivieren, genügt es, als Administrator sudo passwd root einzugeben und nach Aufforderung das root-Passwort festzulegen. Ist der root-Account aktiv, fährt man mit der Dovecot-Installation fort:

su 
make install
exit

Anschließend kopiert man aus dem Mac-Mail-Server-Archiv den Dovecot-LaunchDaemon, die pam.d-Konfiguration dovecot sowie die Dovecot-Konfiguration dovecot.conf in die jeweiligen Verzeichnisse:

cd ct-Mac-Mail-Server/Dovecot 
sudo cp dovecot.plist /Library/LaunchDaemons/
sudo cp pam.d/dovecot /etc/pam.d/
sudo cp dovecot.conf /usr/local/etc/

Welches Schicksal einzelnen Nachrichten widerfuhr, die Postfix zum Local Delivery Agent weitergereicht hat, zeigt das Protokoll dovecot-deliver.log.

Damit Dovecot und zu seinem Paket gehörige Programme starten können und Log-Files im Pfad /var/log/ schreiben dürfen, braucht die Software ein eigenes User-Konto. Der Dovecot-Prozess soll aber aus Sicherheitsgründen keine Shell öffnen können und auch kein Passwort erhalten. Bis Mac OS X 10.4 alias Tiger ließen sich User mit dem grafischen Frontend NetInfo Manager anlegen. Dieses Programm hat Apple mit Leopard aber stillschweigend aufgegeben, ohne konkret darauf hinzuweisen, dass auf Leopard diese Aufgaben nunmehr das Kommandozeilenprogramm dscl übernimmt (Directory Service Command Line Utility). Wir haben im Skript AddUserDovecot.sh alle erforderlichen dscl-Befehle zusammengefasst, um den Dovecot-User anzulegen. Stellen Sie sicher, dass es ausführbar ist:

cd ct-Mac-Mail-Server/Dovecot 
chmod +x AddUserDovecot.sh
sudo ./AddUserDovecot.sh

Der Befehl dscl . read Users/dovecot zeigt, mit welchen Parametern der User dovecot angelegt worden ist.

Öffnen Sie nun /usr/local/etc/dovecot.conf und tragen Sie an den markierten Stellen Ihre individuellen Einstellungen ein. Das sind die Postmaster-Adresse und der Hostname. Weitere Änderungen sind nicht erforderlich. Außerdem definiert die Datei die Klartext-Authentifizierung via PAM (sowohl für den eigenen Bedarf als auch als Service für Postfix) und die SSL-Verschlüsselung.

Damit man auf den Server aus der Ferne zugreifen kann, ohne abgehört zu werden, kommunizieren Mail-Client und -Server SSL-verschlüsselt.

In diesem Beispiel setzen wir für die SSL-Verschlüsselung ein selbstsigniertes Zertifikat ein. Das geht am schnellsten und hat nur den Nachteil, dass Mail-Clients den Aussteller des Zertifikats nicht kennen und deshalb die SSL-Verbindung nur nach Rückfrage aufbauen. Um die Rückfragen zu vermeiden, muss man entweder jedem Mail-Client beibringen, das Zertifikat dauerhaft zu akzeptieren oder ein Zertifikat von einem Unternehmen wie VeriSign kaufen. Dovecot erwartet die OpenSSL-Dateien, die eine SSL-Verschlüsselung des POP3- und IMAP-Verkehrs ermöglichen, nicht in /usr/local/etc/, also dort, wo seine eigenen Konfigurationsdateien liegen, sondern in /etc/, wo zunächst zwei Ordner dafür angelegt werden müssen:

sudo mkdir /etc/ssl 
sudo mkdir /etc/ssl/certs
sudo mkdir /etc/ssl/private

Danach wechselt man in das Dovecot-Source-Verzeichnis und editiert dort im doc-Verzeichnis die Datei dovecot-openssl.cnf – im einfachsten Fall genügt es, die lokalen Parameter für die Variablen OU, CN und E-Mail-Kontakt einzutragen, also etwa so:

# Organizational Unit Name (eg. section) 
OU=LeoClient IMAP server
# Common Name (*.example.com is also possible)
CN=leoclient.bermuda.endofinternet.net
# E-mail contact emailAddress=dz@leoclient.bermuda.endofinternet.net

Sind die Anpassungen für Ihren Dovecot-Server gespeichert, schalten Sie die im gleichen Ordner befindliche Datei mkcert.sh ausführbar und führen es als root aus:

chmod +x mkcert.sh
su
./mkcert.sh
exit

Wenn es fehlerfrei durchläuft, findet man am Ende der Statusmeldungen den MD5-Fingerprint. Wenn SSL korrekt eingerichtet ist, kann Dovecot die Konfigurationsdatei fehlerfrei abarbeiten und starten:

sudo launchctl load -w /Library/LaunchDaemons/dovecot.plist

Ob das Programm läuft, zeigt das Kommando ps auxw | grep -i dovecot. Falls nicht, ist mit hoher Wahrscheinlichkeit etwas bei der SSL-Einrichtung schiefgegangen, sodass das Programm gleich beim Start die Grätsche macht – Einträge im Log-File schreibt es in diesen Fällen nicht, sodass man bei der Fehlersuche ein wenig auf Intuition angewiesen ist.

Hat man die Mac-Firewall auf "Zugriff für bestimmte Dienste und Programme festlegen" eingestellt, bemerkt man den ersten erfolgreichen Dovecot-Start zusätzlich daran, dass die Firewall fragt, ob das Programm eingehende Verbindungen annehmen darf – ja, man gestattet das. Diese Frage stellt die Firewall nur beim ersten Start und wenn man sie abgenickt hat, bleibt sie fortan stumm. Mit welchen Einstellungen Dovecot aktuell läuft, zeigt dieses Kommando an:

/usr/local/sbin/dovecot -n

Zunächst wird die Grundfunktion des Servers per Telnet geprüft und anschließend SSL-verschlüsselt:

telnet localhost imap

Wenn er antwortet, prüft man die PAM-Authentifizierung (den vorangestellten Punkt nicht vergessen):

. login username passwort 
. status INBOX (messages)

Wenn das geklappt hat, kann man für den angemeldeten User die Ordner anlegen, in die Fetchmail die per POP3 abgerufenen Mails ablegen soll. Ersetzen Sie die in den Beispielen "POP3-Account-n" genannten Verzeichnisse mit sinnvollen Namen, etwa T-Online oder Web.de.

. create POP3-Account-1 
. create POP3-Account-2
. create POP3-Account-3

Der Server antwortet jeweils mit

. OK Create completed.

Nun kann man die Verbindung schließen:

. logout

Für die SSL-Prüfung eignet sich der Befehl openssl, weil er tiefere Einblicke in die SSL-Kommunikation gewährt als übliche Mail-Clients:

openssl s_client -connect localhost:993

Beim Verbindungsaufbau wird dann zwar das selbstsignierte Zertifikat moniert (verify error:num=18:self signed certificate), aber nach Übermittlung des Server-Zertifikats sollte die Verbindung aufgebaut werden (SSL handshake, Server public key, SSL-Session) und der Dovecot-Prompt erscheinen:

* OK Dovecot ready.

Nun kann man sich wie bei unverschlüsselten Telnet-IMAP-Verbindungen authentifizieren – mit dem Unterschied, dass das unverschlüsselte PAM-Passwort über einen SSL-gesicherten Kanal übermittelt wird.

Neu startende Mail-Clients sollten nun SSL-verschlüsselt über Port 993 mit dem Server kommunizieren können, wenn man diese Option in den Einstellungen einschaltet. Um zu vermeiden, dass die Mail-Clients das selbstsignierte SSL-Zertifikat bei jedem Neustart monieren, importiert man es in die jeweilige Zertifikatsverwaltung. Bei Apple Mail unter Leopard genügt es dafür, das Kästchen "Always trust …" anzuklicken. Das Zertifikat wird dann nicht nur vom Client-Mac übernommen, sondern auch als dauerhaft vertrauenswürdig eingestuft. Details des Zertifikats kann man im Programm Keychain Access einsehen (im Ordner Dienstprogramme).

Erst an dieser Stelle, also wenn gesichert ist, dass der Server über Port 993 via SSL-verschlüsselt kommuniziert, sollte man den IMAP-Server für Zugriffe aus dem Internet zugänglich machen, also im Router den Port 993 zur privaten IP-Adresse des Dovecot-Servers im LAN weiterleiten. Wie das geht, beschreiben die Router-Hersteller in den jeweiligen Handbüchern.

Wenn die PAM-Authentifizierung via Dovecot klappt, sollte auch der Postfix-SMTP ansprechbar sein; über den Befehl telnet localhost smtp kann man sich lokal mit ihm verbinden. Wenn er korrekt eingerichtet ist, meldet er sich mit seinem smtpd_banner:

220 .bermuda.endofinternet.net ESMTP

Das genügt als Beleg; man kann die Sitzung gleich wieder schließen, indem man quit eingibt. Falls der smtpd Zicken macht, lässt sich Telnet auf diese Weise nicht beenden, aber immerhin per Control-] (Alt-Ctrl-6).

Falls aus dem LAN oder dem Internet keine Verbindung zustande kommt, liegt es vermutlich an der Mac-Firewall, die restriktiv eingestellt ist (Systemeinstellungen, Sicherheit, Zugriff für bestimmte Dienste und Programme festlegen). Nehmen Sie in diesem Fall smtpd in die Ausnahmeliste der Firewall auf (auf "+" klicken, dann Apfel-Shift-G drücken, den Pfad /usr/libexec/postfix/ eintragen, Eingabetaste drücken und im Dateidialog den Eintrag smtpd doppelklicken). In unseren Tests hat die Firewall die Ausnahmeliste aber nicht immer beachtet; smtpd- oder auch IMAP-Verbindungen ließ die Software nur dann zuverlässig durch, wenn sie auf "Alle eingehenden Verbindungen erlauben" eingestellt war.