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
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:
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:
/etc/cyrus.conf
- Einstellung der anzubietenden und notwendigen Dienste/etc/imapd.conf
- Einstellungen zum Verhalten des imapd.conf/etc/postfix/main.cf
- Einstellungen PostfixZunächst kann man getrost den Anweisungen in README.SuSe folgen. Es werden root-Rechte zum Schreiben der Dateien benötigt.
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.
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.
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ß.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.