Willkommen auf mgaa.de

Wie man Cyrus-IMAP auf SuSe Linux 9.1. Pro aufsetzt - ein Kochrezept

Nachfolgend wird ein einfaches "Kochrezept" angegeben, wie man Cyrus-IMAP auf SuSe Linux 9.1 Pro aufsetzen kann. Alle erforderlichen Pakete werden von SuSe geliefert, dennoch ist es mit der Installation des Paketes nicht getan, da an verschiedenen Stellen noch die erforderlichen Konfigurationseinstellungen vorgenommen werden müssen. Zwar gibt es von SuSe eine kurze Anleitung, wie vorzugehen ist, gleichwohl muß man sich - gerade, wenn man ein solches Paket zum ersten Mal einrichtet - noch mit den Dokumentationen von Cyrus-IMAP und dem hier verwendeten Postfix auseinandersetzen.

Das kann ziemlich zeitaufwendig sein, und das war es in diesem Fall auch. Daraus ist diese Dokumentation entstanden, mit der man sich diese Zeit sparen kann, indem man gleich macht, was erforderlich ist.

Gleichwohl handelt es sich um ein Kochrezept, mit dem man nur die Konfiguration, welche von mir gewählt wurde, nachbauen kann.

Abschnittsübersicht:

1. Voraussetzungen
2. Vorteile / Warum der Aufwand?
3. Was ist zu tun?
3.1. Örtlicher Posttransport Postfix
3.2. Örtlicher Posttransport Cyrus
3.3. Der Nutzer cyrus
3.4. Lokale Authentifizierung
3.5. IMAP Prozeß starten
3.6. Postfächer und Nutzer
3.7. Postzustellung an auschließliche IMAP-Nutzer
3.8. Anmeldung der ausschließlichen IMAP-Nutzer bei Postfix
3.9. Verschlüsselung bei Fernzugriffen
3.10. Weitere Eintragungen in imapd.conf
3.11. Alternative Authentifizierung
3.12. Syslog
3.13. Einrichtung der Clients


1. Voraussetzungen

Wir benötigen SuSe Linux 9.1 Pro. Wahrscheinlich kann man das Rezept aber auch für andere Versionen von SuSe Linux verwenden.

Folgende Pakete müssen installiert sein:

Top

2. Vorteile / Warum der Aufwand?

Top

3. Was ist zu tun?

Nachdem die notwendigen Pakete installiert sind, findet man erste Hinweise, wie man den cyrus-imapd zum Laufen bekommt unter:

/usr/share/doc/packages/cyrus-imapd/

Hier sind insbesondere von Interesse das README.SuSe sowie die Dokumentation im Unterverzeichnis doc/ (in englisch).

Zur Konfiguration benötigen wir die folgenden Konfigurationsdateien:

Zunächst kann man getrost den Anweisungen in README.SuSe folgen. Es werden root-Rechte zum Schreiben der Dateien benötigt.

Top

3.1. Örtlicher Posttransport Postfix

In /etc/postfix/main.cf tragen wir folgendes ein:

mailbox_transport = lmtp:unix:public/lmtp

In der Standardkonfiguration steht diese Variable ziemlich am Ende der Konfigurationsdatei und hatte einen leeren Wert.

Top

3.2. Örtlicher Posttransport Cyrus

In /etc/cyrus.conf tragen wir im Abschnitt SERVICES ein:

lmtpunix cmd="lmtpd" listen="/var/spool/postfix/public/lmtp" prefork=1

Die bereits existierende Zeile mit lmtpunix wird auskommentiert (ein "#" davorsetzen). Löschen der Zeile ist auch möglich, aber damit vergißt bzw. verliert man die Ausgangseinstellungen, falls etwas nicht funktioniert oder man den ursprünglichen Zustand wieder herstellen möchte.

Top

3.3. Der Nutzer cyrus

Mit der Installation von cyrus-IMAP wurde ein Nutzer namens cyrus zur Verwaltung des Dienstes angelegt. Diesem fehlt noch ein Passwort, welches mittels

passwd cyrus

nun zugewiesen wird. Cyrus wird u.a. dafür benötigt, um die Postfächer im IMAP-System einzurichten. Unter diesem Nutzer läuft auch der IMAP-Prozeß.

Top

3.4. Lokale Authentifizierung

Das cyrus-IMAP Paket bringt ein eigenes Authentifizierungsmodul mit, welches - soweit ich es richtig verstehe - mit vorhandenen Authentifizierungsmechanismen, wie z.B. PAM (Pluggable Authentication Module), gekoppelt werden kann. Was hier eingestellt und gewählt werden kann, wird in der cyrus-Dokumentation beschrieben, war aber für mich nicht vollends verständlich, weil ich auch nicht alles ausprobiert habe und auch nicht alles kannte. Jedenfalls wird Authentifizierung der Mailbox-Nutzer im Abschnitt 3.6. noch eine Rolle spielen, und ich werde die von mir ausprobiertten Möglichkeiten und ihre Auswirkungen vorstellen.

Zunächst benötigt man das cyrus Authentifizierungsmodul, um den Nutzer cyrus am IMAP-Server anzumelden, um dann Postfächer anzulegen.

Dazu startet man den rcsaslauthd wie folgt:

rcsaslauthd start

Mit der Option status kann der Zustand des saslauthd geprüft werden und mit stop wird er beendet. rcsaslauthd ist ein von SuSe angelegter Link von /sbin/rcsaslauthd auf /etc/init.d/saslauthd, das entsprechende Startkript.

Top

3.5. IMAP Prozeß starten

Bevor man nun Postfächer und deren Nutzer anlegen kann, muß der IMAP-Dämon (Prozeß) gestartet werden, was leider in README.SuSe nicht erwähnt wird, weil das möglicherweise als selbstverständlich angesehen wird.

Dies macht man mit:

rccyrus start

Mit der Option stop wird der Prozeß gestoppt. rccyrus ist ein von SuSe angelegter Link von /sbin/rccyrus auf /etc/init.d/cyrus, das entsprechende Startkript.

Möchte man saslauthd und cyrus nicht jedesmal nach einem Neustart des Systems manuell starten, so sollte man den Start zum jeweiligen Runlevel ausführen lassen. Der geeignete runlevel dürfte 3 sein, so daß man in /etc/init.d/rc3.d/ zwei Links wie folgt anlegen sollte S[n]saslauthd -> ../saslauthd und S[n+1]cyrus -> ../cyrus. [n] steht dabei für eine Zahl, die die Position in der Startreihenfolge der anderen Startskripte in diesem Runlevel angibt. [n] durch 12 zu ersetzen erscheint beispielsweise geeignet. Damit die Authentifizierung bereits zur Verfügung steht, wenn der IMAP-Dämon gestartet wird, ersetzen wir beispielsweise [n+1] durch 13. Damit beim Herunterfahren des Servers die Prozesse gestoppt werden, muß analaog K[n]saslauthd -> ../saslauthd und K[n]cyrus -> ../cyrus eingetragen werden.

Hat man das alles gemacht, läuft der imap-server bereits.

Top

3.6. Postfächer und Nutzer

Nun folgen wir weiter der README.SuSe Anleitung und können in unserem IMAP-Server Postfächer und Nutzer anlegen.

Der Befehl hierzu lautet:

cyradm --auth login localhost --user cyrus

Es öffnet sich eine Shell, deren Befehle mit help aufgelistet werden können. Wie man Nutzer anlegt, wird in README.SuSe hinreichend beschrieben, welche Rechte existieren und wie man diese einstellt, ist in der cyrus-Dokumentation beschrieben.

Nützliche Eigenschaft ist, daß man jedem Postfach mehrere Nutzer mit unterschiedlichen Rechten zuordnen kann. Man sollte ein wenig probieren.

Das Löschen eines Postfachs kann der Administrator cyrus nur vornehmen, wenn er sich zuvor als Nutzer eingetragen hat. Sonst kommt eine Fehlermeldung. Vorsicht: Wenn ein Postfach gelöscht wird, gehen alle darin enthaltenen Nachrichten und Unterordner verloren.

Cyrus-IMAP ist dafür vorgesehen, auf einem abgeschlossenen Server ohne Nutzer zu laufen. Es geht aber auch mit Nutzern auf dem Server, was bei der SuSe-Installation zunächst Standard ist, daß man mindestens einen Nutzer neben root hat. Möglicherweise hat man noch mehr Nutzer, die alle IMAP benutzen sollen auf diesem Rechner.

Mit den bisherigen Einstellungen der Authentifizierung mittels PAM, können sich sowieso nur (über Yast) angelegte Nutzer am IMAP-Server anmelden. (Wie man das anders gestaltet, so daß auch nicht angelegte Nutzer Postfächer haben und diese lesen können, wird in Abschnitt 3.11. beschrieben). Daher sollten für die (über Yast) angelegten Benutzer auch Postfächer eingerichtet werden. Es genügt nicht, Nutzer über Yast anzulegen.

Nichtsdestotrotz können wir auch Postfächer für beliebige nicht in Yast angelegte Benutzer einrichten. Diese können sich zwar nicht anmelden, da sie nicht über PAM authentifiziert werden können, da kein Nutzername und Paßwort in /etc/shadow zur Verfügung steht (oder wo auch immer login die Eingaben abgleicht). Aber wir können diesen Postfächern angelegte Nutzer hinzufügen, so daß diese sich authentifizieren und zugreifen können, wenn Ihnen die Rechte dazu eingeräumt sind.

Top

3.7. Postzustellung an ausschließliche IMAP-Nutzer

Nun tut sich mit den zusätzlichen imap-Postfach-Nutzern das Problem auf, daß wir diesen keine Post zustellen können, weil sie nicht in /etc/passwd oder /etc/aliases eingetragen sind, wo Postfix in der Standardeinstellung nachschaut, ob der Empfänger auch auf dem System vorhanden ist.

D.h. wir müssen noch Änderungen an den Postfix Einstellungen vornehmen. Aliases und virtuelle Adressen helfen uns nicht weiter, da wir ja reale Empfänger bzw. Postfächer haben wollen. Dazu suchen wir den Parameter

local_recipient_maps in /etc/postfix/main.cf.

Standardmäßig ist diesem Parameter entweder nichts zugeordnet, d.h. alle Zeilen sind auskommentiert, oder es ist folgendes angegeben:

local_recipient_maps = unix:passwd.byname $alias_maps

Wir ergänzen die Zeile und entfernen ggf. das führende Hashmark (#) wie folgt:

local_recipient_maps = unix:passwd.byname $alias_maps hash:/etc/postfix/local_virtual_recipients

D.h. wir sagen Postfix, daß Mail-Nutzer nicht nur in /etc/passwd und in /etc/aliases (die Variable $alias_maps zeigt dorthin - man hätte also unser Verzeichnis auch dorthinen setzen können, was möglicherweise eleganter ist) sondern auch in /etc/postfix/local_virtual_recipients nachschaut. Der Dateiname und das Verzeichnis können natürlich anders gewählt werden.

Außerdem setzen wir unknown_local_recipient_reject_code = 550, damit falsch adressierte Post umgehend zurückgewiesen wird. Mit der Standardeinstellung = 450 probiert der Sender noch wochenlang bevor er aufgibt.

Top

3.8. Anmeldung der ausschließlichen IMAP-Nutzer bei Postfix

Wie legt man nun die weiteren Postempfänger an? In dem o.a. Verzeichnis legt man dort mittels eines Editors eine Daten namens local_virtual_recipients oder mit dem Namen, den Sie gewählt haben, an.

Darin trägt man ein (nutzer01 ersetzen Sie natürlich durch die von Ihnen gewünschten Nutzernamen):

nutzer01 nutzer01
nutzer02 nutzer02
nutzer03 nutzer03

In der ersten Spalte stehen die Namen der Nutzer, welche Postfix akzeptiert. In der zweiten Spalte werden die Namen der dazugehörigen Postfächer im imap angegeben. Man kann damit auch angeben, daß an den nutzer01 adressierte Post in das Postfach von nutzer02 zugestellt wird.

Diese Plaintext-Datei genügt Postfix nicht. In den Einstellungen haben wir vor den Pfad nämlich hash: geschrieben, so daß Postfix eine Art Datenbankformat erwartet. Dieses können wir kreieren, indem wir folgendes ausführen:

postmap local_virtual_recipients

Das war's. Postfix stellt nun auch diesen Nutzern Post zu.

Top

3.9. Verschlüsselung bei Fernzugriffen

Lokal ist damit alles funktionsfähig. Wir wollen jetzt aber nur den verschlüsselten Zugriff auf unseren IMAP-Server zulassen und keinen Abruf mittels pop3-Protokoll erlauben. Weiterhin soll der Server Verbindungen aus dem Internet annehmen.

Die zugelassenen Dienste stellt man in /etc/cyrus.conf im Abschnitt SERVICES ein. Wir kommentieren pop3, pop3s und imap durch Vorsetzen eines Hashmarks aus. Nicht vergessen, nach Änderungen an cyrus.conf oder imapd.conf den IMAP-Server mittels rccyrus restart neu zu starten, damit die Änderungen wirksam werden. Möchte man auch unverschlüsselten Zugang zum IMAP-Server gestatten, darf imap nicht auskommentiert werden. Für Testzwecke dürfte das ganz hilfreich sein, zumal nach meiner Erfahrung bei fehlerhaftem Zugriff auf imaps schnell mal hundert MB mit Meldungen im Syslog generiert werden (wie syslog funktioniert, wird in Abschnitt 3.12. behandelt).

Um SSL/TLS, d.h. den verschlüsselten Zugriff einzurichten, sagt uns das README.SuSe wir sollen uns das install-configure-html der cyrus-Dokumentation ansehen, was wir dementsprechend tun.

Dort finden wir eine Abschnitt "SSL, TLS, and OpenSSL". Es gibt demnach zwei Möglichkeiten, unser Ziel zu erreichen, entweder mit STARTTLS oder mit einer SSL-Verbindung, bei der die SSL-Sitzung vor dem Start des IMAP-Protokolls ausgehandelt wird. Wir wollen die zweite Variante nutzen, aber das spielt offenbar für die notwendigen Schritte keine Rolle, da beides zugleich möglich ist.

Alles was zu tun ist, ist ein Zertifikat mittels OpenSSl zu generieren. Wir signieren uns das Zertifikat selbst, was später bei der Nutzung durch Clients zu entsprechendem Gejammer führt, daß man einem selbstsignierten Zertifikat nicht trauen kann. Wer die Möglichkeit hat, kann sein Zertfikat auch bei einer Zertifizierungsstelle zertifizieren lassen. Wenn das jetzt zu kompliziert ist machen wir einfach das, was in der Dokumentation steht und geben ein:

openssl req -new -x509 -nodes -out /var/lib/imap/server.pem -keyout /var/lib/imap/server.pem -days 365

Davon verstehe ich nicht alle Angaben, aber man kann ja in der Dokumentation von openssl bei Bedarf und Gelegenheit nachsehen. Jedenfalls ist das Zertifikat 365 Tage gültig, danach muß man wohl wieder ein neues generieren.

Das Zertifikat haben wir in /var/lib/imap abgelegt und muß dort für den Nutzer cyrus lesbar sein, also ggf. mit chown den Eigentümer bzw. die Rechte anpassen. In /etc/imapd.conf müssen wir eintragen, wo der IMAP-Server das Zertifikat findet:

tls_cert_file: /var/lib/imap/server.pem
tls_key_file: /var/lib/imap/server.pem

Wenn Sie ein von einer Zertifizierungsstelle zertifiziertes Zertfikat haben, können Sie auch noch tls_ca_file und tls_ca_path angeben. Dann funktioniert auch TLS korrekt (ansonsten nur SSL?) - den genauen Unterschied kenne ich nicht, im letzteren Fall benötigt wohl auch der Client ein zertifiziertes Zertfikat.

Das ist alles, damit kann der Server SSL-Verbindungen annehmen bzw. herstellen.

Falls der Server mit einer Firewall geschützt ist, muß Port 993 TCP freigeschaltet werden. Bei Verwendung eines Routers oder mit NAT (Network address translation) muß sichergestellt sein, daß die Pakete auch an den IMAP-Server geleitet werden.

Top

3.10. Weitere Eintragungen in imapd.conf

Je nach Gusto sind weitere Eintragungen möglich bzw. erforderlich. Damit TLS-Sitzungen nicht gemäß Dokumentation 24h andauern können, habe ich

tls_session_timeout: 10

angegeben, ohne genau zu wissen, wie es wirkt.

Weiterhin ist eingetragen:

altnamespace: yes
unixhierarchysep: yes

Ersteres erlaubt das Anlegen von Unterordnern im Postfach, die scheinbar auf der selben Ebene wie die Inbox liegen. Tatsächlich liegen sie jedoch darunter. Letzteres erlaubt die Vergabe von Nutzernamen mit "." (z.B. vorname.nachname) darin. Sonst ist der Punkt der Verzeichnistrenner in cyrus-imap.

Top

3.11. Alternative Authentifizierung

Bisher haben wir die Standardeinstellungen beibehalten, die die Authentifzierung mittels PAM durchführen. Damit können aber nur über Yast (oder vergleichbar) angelegte Nutzer authentifizert werden, obgleich wir noch andere, nicht über Yast eingerichtete Nutzer auf dem IMAP-Server eintragen können.

Damit diese sich authentifizieren können, benötigt man eine andere Passwortdatenbank.

Eine simple Möglichkeit wird von cyrus mitgeliefert. Wir ersetzen dazu in der /etc/imapd.conf den Parameter sasl_pwcheck_method: saslauthd durch sasl_pwcheck_method: auxprop

Die Paßwörter für unsere imap-Nutzer generieren wir mit salspasswd2, z.B.

saslpasswd2 -c nutzer01

Die Paßwortdatei wird automatisch unter /etc/sasldb2 erzeugt. Das Paßwort wird dabei plaintext intern übergeben. Die interne Übergabe läßt sich auch verschlüsseln, dazu muß man das Verfahren in /etc/sysconfig/saslauthd ändern (und kann wahrscheinlich obiges Verfahren nicht mehr verwenden - ist etwas unklar).

Top

3.12. Syslog

Der imap-Dämon generiert eine Vielzahl von Meldungen. Laut Dokumentation werden diese an local6 (sog. syslog facility) geschickt. Wer das glaubt, fällt bei der Anpassung der /etc/syslog.conf auf die Nase, weil SuSe das offenbar auf daemon umgebogen hat, was anscheinend nirgendwo dokumentiert ist.

Um die Meldungen des imap-Dämonen in eine eigene Log-Datei zu lenken, trägt man in die /etc/syslog.conf z.B. folgendes ein:

daemon.* -/var/log/cyrus-imap

Damit es nicht mehr bei den allgemeinen Mitteilung auftaucht ;daemon.none in *.* ergänzen.

Top

3.13. Einrichtung der Clients

Die Einrichtung ist je nach Client unterschiedlich, so daß eine vollumfängliche Behandlung hier nicht möglich ist. Bitte in der jeweiligen Dokumentation nachsehen.

Für pine:

{mein.server.tld/ssl/novalidate-cert/user=nutzer01}INBOX

als INBOX angeben. mein.server.tld ist als Platzhalter für die URL oder IP Ihres Servers zu verstehen, ebenso nutzer01 für den jeweiligen Nutzer.

Für KMail:

Unter Einstellungen und KMail einrichten Netzwerk wählen. Dort Empfang. Daten eintragen. Reiter Sicherheit auf SSL und plaintext einstellen. Die Fähigkeiten des Servers können aber auch automatisch ermittelt werden.

Top