Zentralverteiler

Der gute alte POP3-Server ächzt und kracht unter der Last vieler Benutzer, die Außendienstler werden nölig, weil sich megabytegroße Screenshots übers Modem quälen, die Helpdesk-Abteilung denkt schon über kommerzielle Messaging-Systeme nach? Da könnte ein IMAP-Server weiterhelfen.

vorlesen Druckansicht
Lesezeit: 26 Min.
Von
  • Axel Wilzopolski
Inhaltsverzeichnis

IMAP-Server (Internet Message Access Protocol) bieten sich als Alternative zu herkömmlichen Mail- und Messaging-Systemen an. Denn mit ihnen lassen sich Kommunikationsbedürfnisse erfüllen, die weit über das hinausgehen, was der klassische POP3- oder filesystembasierte Mail-Server hergibt. Details dazu beschreibt der Textkasten ‘EMail-Protokolle im Vergleich’, weitere Grundlageninformationen ein früherer iX-Artikel [1]. Seitdem ist zwar einige Zeit vergangen, es hat sich aber kaum etwas am Basisprotokoll geändert. Nach wie vor gilt der Standard Track RFC 2060 von Dezember 1996, allerdings sind einige Erweiterungen hinzugekommen.

Vor allem aber hat sich im Laufe des letzten Jahres und besonders der letzten Monate viel im Bereich der Mail-Clients getan. Gab es bis Ende 1997 vor allem ASCII-basierte Programme wie PINE (PINE is not Elm), die zwar ordentlich IMAP sprachen, aber wenig fürs Auge und die Bequemlichkeit boten, kommen nunmehr auch die bekannten Kandidaten ins Spiel. Z-Mail, Eudora Pro 4.1, Microsoft Outlook Express und Outlook 98, Netscape-Communicator 4.0x, vor allem aber 4.5, und viele mehr bieten hinreichende bis gute IMAP-Fähigkeit. Eine Übersicht gängiger Frontends bieten ein in iX 2/99 erschienener Artikel [2] sowie c’t 8/99.

Besonders hervorheben möchte ich an dieser Stelle den Windows/Mac-Client Mulberry [3] von Cyrusoft, ein kommerzielles Spinoff des Cyrus Uni-Projektes. Ebenso lohnt sich ein Blick auf Paladin EMail, ein Shareware-Programm für Windows, das für den Ausbildungsbereich frei erhältlich ist. Beide bieten die bislang umfassendste Unterstützung von IMAP-Funktionen bis hin zur Nutzung selbst definierter Message-Flags. Mulberry soll auch auf Linux und Solaris portiert werden.

Dazu passende Mail-Server beziehungsweise Messaging-Server gibt es zum einen für bare Münze: MS Exchange Version 5.5, Netscape Messaging Server 3.5, Eudora Worldmail 2.0 haben IMAP im Protokollprogramm. Sun bietet mit SIMS 3.5 ebenfalls einen guten IMAP-Server an - der SIMS Reference Mail-Client 2.0 ist allerdings etwas ärmlich.

Aber auch die Public Domain hat seit Jahren zwei Implementierungen zu bieten. Genaugenommen waren diese sogar die ersten, einige der kommerziellen Lösungen basieren im Kern auf deren Quellen. Gemeint sind der ‘You Dup’(UW)-Server [4] der University of Washington (der Autor Mark Crispin ist übrigens auch der Autor des IMAP-RFC 2060) und der Cyrus IMAP-Server [5] in der neuesten Version 1.5.19 der Carnegie Mellon University. Auch die Autoren des Cyrus-Servers sind bei der Erstellung der Standards aktiv. Von John Myers stammen unter anderem die RFCs für ACL (Access Control Lists) und Quotas.

Ich habe mich bei der Installation im Heise-Verlag für den Cyrus-Server entschieden, weil er mir zum einen besser dokumentiert erschien und zum anderen als performanter in Umgebungen mit vielen Nutzern gilt. Außerdem implementiert Cyrus im Gegensatz zum UW-Server auch ACLs und Quotas zur Beschränkung des Plattenplatzes pro User. Selbst die Universität von Princeton mit circa 14 000 Mail-Accounts plant, vom Netscape Messaging Server auf Cyrus umzusteigen, andere Umgebungen laufen mit 30 000 und mehr Benutzern. Typischerweise werden für solche Hochleistungs-Mail-Server Maschinen der Kategorie Sun E3000 oder E4000 mit 2 bis 3 Gigabyte RAM und schnellen RAID-Arrays eingesetzt.

Geschwindigkeit ist auch hier keine Hexerei, sondern vor allem eine Frage von schnellem Massenspeicher und viel RAM. Während die Netzwerklast vergleichbar zu der einer POP-Mail-Übertragung bleibt, die Peaks sogar gedämpft werden, weil sich der Mailtraffic zwischen Client und Server gleichmäßiger verteilt, wächst der Bedarf an Arbeitsspeicher. Denn durch das Online-Prinzip kommunizieren mehr Prozesse gleichzeitig mit Mail-Clients. Festplatten mit schnellen Zugriffszeiten (wichtiger als hohe Transferraten) sind nützlich, damit eine EMail flott aus der Message-Basis gefischt werden kann. Der Einbau leistungsfähiger Prozessoren ist geboten, wenn man Authentifzierung und EMail-Kommunikation verschlüsseln möchte. Aber auch mit kleineren Maschinen kann man für eine übersichtlichere Zahl von Benutzern einen performanten IMAP-Server realisieren.

Bei einem leistungsfähigen EMail- und Messaging-System kommt es auf ein stimmiges Zusammenspiel der einzelnen Komponenten im funktionalen Gesamtkonzept an. Da dessen Beschreibung nicht mit wenigen Worten abgehandelt werden kann, besteht dieser Artikel aus zwei Teilen. Der erste beschreibt den eigentlichen IMAP-Server, die Nachrichtenzentrale. Im Folgeartikel geht es um die begleitenden Module Sendmail (als MTA - Message Transfer Agent), Procmail (MDA - Message Delivery Agent/Mailfilter) und die Einbindung des Verschlüsselungssystems TLS.

Auf einem ‘normalen’ Unix-Mail-Server empfängt ein SMTP-Daemon, üblicherweise Sendmail, die EMail aus dem Internet und liefert sie dann lokal mittels eines Mail Delivery Agent (MDA) aus. Dies übernimmt meist ein Programm namens mail oder mail.local. Beide Programme hängen lediglich die eingegangene Nachricht an eine Mail-Spool-Datei im mbox-Format an, die sich in einem Verzeichnis wie /var/spool/mail befindet und den Namen des zugehörigen Mail-Accounts trägt. Beim mbox-Format ist jede Nachricht durch eine Leerzeile von den anderen getrennt und beginnt außerdem mit dem String ‘From’.

Bei einem Cyrus-Mail-Server geht die Mail im Prinzip einen ähnlichen Weg. Auch hier empfängt ein Sendmail-Daemon (es gibt auch Anpassungen für andere MTAs wie Exim, Qmail oder Postfix) die Mail aus dem Internet. Da die Nachrichten jedoch in einem eigenen Format abgespeichert werden, ist ein MDA nötig, der EMails in IMAP-gerechter Form ablegen kann.

Dazu dient das Cyrus-Programm deliver. Jede Nachricht wird im Klartext in einer eigenen Datei abgelegt, deren Name sich aus einer Nummer (der Message-UID) und einem Punkt zusammensetzt. Jede Datei beginnt mit ‘Return-Path: <EMail-Adresse>’. Danach folgt der normale Message-Text.

Sobald ein Client Verbindung mit dem Port 143 der Servermaschine aufnimmt, startet inetd den Cyrus IMAP-Server. Die Authentifizierung verläuft per Unix-Klartextpaßwort, Kerberos oder LDAP; letzteres mit Hilfe von Patches [6] zu dem extern vom imapd laufenden Authentifizierungs-Daemon pwcheck, der auch zum Cyrus-Paket gehört und schon die Authentifizierung auf Shadow-Passwd-Systemen übernimmt. Von da an verläuft die TCP/IP-Kommunikation nach dem IMAP-Protokoll. Im Grunde gehört schon die Authentifizierung (IMAP-Kommando ‘LOGIN’) zur IMAP-Kommunikation. Die Cyrus-Implementierung zur Authentifizierung mittels pwcheck ist dabei eine Möglichkeit von vielen, weil sich an dieser Stelle prinzipiell beliebige Anmeldemechanismen einklinken lassen, die dann zum Beispiel einen Unix-Account des Mail-Nutzers entbehrlich machen. Die Einzelheiten der - nicht ganz trivialen - Installation des Cyrus-Servers wird im Kasten ‘Cyrus-Installation …’ beschrieben.

Mit den in RFC 2060 beschriebenen Kommandos lassen sich Nachrichten und Nachrichtenlisten abrufen, mannigfaltig manipulieren und löschen, Folder anlegen und bearbeiten, Flags setzen und definieren, die Message-Datenbasis durchsuchen und vieles mehr, was dem komplexen und komfortablen Message-Handling zwischen Client und Server dient. Neben dem Basisprotokoll RFC 2060 implementiert der Cyrus-Server noch die IMAP-Erweiterungen ACL nach RFC 2086, Quota (RFC 2087), Literal+ (RFC 2088), Namespace (RFC 2342), Uidplus (RFC 2359) und Unselect. Die wichtigsten Extensions sind ACL und Quota. Uidplus dient der Performance-Steigerung beim Disconnected-Zugriff.

Die Message-Datenbasis selbst wird im Dateisystem, üblicherweise unterhalb von /var/spool/imap, in einer Verzeichnisstruktur angelegt. Direkt hier beginnt die Hierarchie für ‘Shared Folder’, die der persönlichen Folder befindet sich in Subdirectories der Form /var/spool/imap/user/[user]. Ein solches Verzeichnis entspricht der ‘Inbox’ eines Benutzers. Die Verzeichnisse der tieferen Hierarchieebenen tragen die Namen der Mailbox-Folder, wie sie sich auch den Benutzern darstellen. In ihnen liegen die Message-Dateien. Die Directories sind durch Dateisystemrechte geschützt. Auf Systemebene haben nur der Benutzer cyrus und natürlich root Zugriff.

Den IMAP-Zugriff auf die Nachrichten optimieren pro Verzeichnis respektive Mailbox vier Verwaltungsdateien: cyrus.header, cyrus.index, cyrus. cache und cyrus.seen. Diese Verwaltungsinformationen lassen sich mit Hilfe des Hilfsprogramms reconstruct gegebenenfalls aus den Message-Dateien wiederherstellen.

Im sogenannten ‘Configuration Directory’, meist unter /var/imap und möglichst auf einer anderen Platte, liegen weitere Informationen in den Verzeichnissen log, proc, quota und user. Vor allem log und proc geben wichtige Hinweise für den Administrator.

Im Unterverzeichnis log kann man Verzeichnisse mit den Namen von Benutzerkürzeln anlegen. In diesen legt der IMAP-Server dann Dateien mit einem detaillierten Logging der Client/ Server-Kommunikation ab. Die Dateinamen entsprechen der Prozeß-ID des imapd-Prozesses, der die Daten schreibt. Nützlich ist dies zur Fehlersuche und wenn man sich für Protokolldetails von IMAP-Clients inter essiert.

Im Unterverzeichnis proc schließlich finden sich wiederum in Dateien mit dem Namen der jeweiligen imapd-PID die Client-Adresse, der Username und der Folder, der von diesem imapd gerade bearbeitet wird. Unter /var/imap/ liegt auch eine Datenbank (wahlweise ndbm, gdbm oder newdb) geführt, in der neu eingehende EMails anhand ihrer eindeutigen Message-ID mit bereits gespeicherten Nachrichten verglichen werden. Falls eine Mail mit gleicher ID schon in der Message-Basis vorhanden ist, wird lediglich ein Hardlink erzeugt. Das setzt natürlich voraus, daß die frühere Nachricht auf derselben Partition liegt - eine intelligente Lösung, um einiges an Festplattenplatz zu sparen.

Im Unterverzeichnis user sind die Einträge zu Zugriffsrechten und Subskriptionen festgehalten. Per IMAP-Client lassen sich nämlich einzelne Folder aus der Message-Basis, wie von NetNews-Servern bekannt, ‘abonnieren’ - erst dann sind die entsprechenden Nachrichtenordner für den Benutzer sichtbar. Man kann diesen Schutz gegen ‘Folder-Überflutung’ durch große IMAP-Server im Mail-Client meist auch abstellen.

In quota stehen Informationen zu Speicherrestriktionen, die einzelnen Mailbox-Foldern oder Hierarchien von Mailbox-Foldern vom Administrator zugewiesen wurden. Dabei wird nur der Speicherplatz für die tatsächlichen Message-Dateien berücksichtigt, die Verwaltungsdateien bleiben außen vor. Solange das Quota für eine Mailbox (-Hierarchie) noch nicht überschritten ist, wird bei Erreichen der Platzgrenze eine EMail an sie ausgeliefert, auch wenn dadurch ihre Speichergrenze überschritten wird. Ist das zugewiesene Speicherlimit überschritten, wird die Mail nicht an die Mailbox ausgeliefert, sondern vom MTA für einige Tage in der Auslieferungs-Queue gehalten. Dadurch erhält der Benutzer etwas Zeit, seine EMail aufzuräumen, bevor die Mail wegen Überfüllung an den Absender zurückgeht.

Ab einem konfigurierbaren ‘Füllstand’ übermittelt der IMAP-Server dem Mail-Client beim Auswählen eines Folders einen Warnhinweis. Leider wertet nicht jeder Client diesen Alert aus. So warnen Paladin, Netscape 4.5, MS Outlook Express und PINE bereits beim Öffnen der Inbox vor der Quota-Überschreitung, MS Outlook 98 gibt die Servermeldung erst bei einem Kopierversuch einer Nachricht preis. Outlook Express ignoriert den Kopierversuch stumm. TeamWARE Embla98 bleibt ebenfalls die Servermeldung schuldig und beschwert sich nur unspezifisch, daß die Aktion nicht ausgeführt werden konnte.

Die elaborierteste Implementierung von Quota und auch ACL zeigt Mulberry. Hier existiert sogar eine Funktion, mit der man seine QUOTA-Werte abfragen kann. User mit Cyrus-Administrationsrechten dürfen auch das Quota anderer User ändern.

Möchte man Quotas verwenden, um den Verbrauch knappen Festplattenplatzes zu beschränken, umgeht man die beschriebene Problematik am besten durch ein selbstgeschriebenes Skript, das die Informationen im Verzeichnis /var/imap/quota periodisch auswertet und bei Überschreitungen eine Warn-EMail an den betroffenen Benutzer schickt. Da das Skript lokal auf dem IMAP-Server läuft, kann man die Meldung direkt mit deliver und einem Schalter, der Quotabeschränkungen ignoriert, ausliefern.

Durch das Cyrus-Konzept der ‘Partitions’ läßt sich sowohl eine Lastverteilung auf mehrere Festplatten als auch eine beliebige Erweiterung der Kapazität der Message-Datenbasis erreichen. Beim Einsatz von Hotplug-fähigen RAIDs ist dies sogar im laufenden Betrieb möglich.

Eine Cyrus-Partition entspricht nicht der einer Festplatte, sondern einem Unix-Verzeichnis. Die Zuordnung ist in der zentralen Konfigurationsdatei /etc/imapd.conf geregelt.

Beim Anlegen einer Mailbox kann ihr Speicherort explizit einer Partition zugeordnet werden. Mit Hilfe des Administrationstools cyradm lassen sich die Folder später auf andere Partitionen verlegen.

Die neben Quotas interessanteste IMAP-Extension des Cyrus-Servers ist die ACL-Erweiterung. Sie ermöglicht eine differenzierte Vergabe von Rechten für Ordner. So kann man für geschlossene Benutzergruppen exklusive Zugangsrechte zu Shared Folders einrichten oder unterhalb einer persönlichen Hierarchie Ordner für andere freigeben.

Dieser administrative Zugang der Benutzer zu den Zugriffsrechten der eigenen Folder wird leider bislang lediglich von Mulberry und Paladin unterstützt. Bei Netscape erscheint in den ‘Folder Properties’ ein Button ‘Privileges’. Diese Konfigurationsmöglichkeit funktioniert aber nicht standardkonform, sondern ausschließlich mit dem Netscape Messaging Server. Der Zugriff auf Unterordner anderer Benutzer ist ebenfalls nur mit wenigen Mail-Clients möglich (Mulberry, Paladin, Netscape 4.0x).

Also muß der IMAP-Administrator die Rechte von Foldern auf Wunsch der Benutzer setzen, oder er stellt ein (Web-)Interface zur Verfügung, mit dem sie dies selbst tun können. Diese Rechte können einzelne Benutzer oder Unix-Gruppen betreffen. Allein ihre Aufzählung verdeutlicht die Mächtigkeit und die Möglichkeiten eines IMAP-Systems:

  • l - lookup: Ein Folder kann aufgelistet werden.
  • r - read: Der Benutzer hat lesenden Zugriff auf einen Nachrichtenordner.
  • s - seen: Das ‘gesehen’-Flag für eine Nachricht wird pro Benutzer gesetzt.
  • w - write: Der Benutzer darf auch andere Flags als ‘seen’ und ‘deleted’ setzen (zum Beispiel ‘answered’).
  • i - insert: Neue Nachrichten dürfen diesem Folder hinzugefügt werden. Wichtiges Recht beim Kopieren oder Verschieben von Folder zu Folder.
  • p - post: Es darf eine Nachricht auf dem ‘Postweg’ (also per Mail-Delivery) in einen Folder gelangen. Interessant bei der automatischen Mail-Sortierung per Procmail.
  • c - create: Der Benutzer darf Unterordner in diesem Folder anlegen.
  • d - delete: Der Benutzer kann die Nachrichten endgültig löschen. Dieser Vorgang wird ‘expunge’ genannt, zum Beispiel im Mail-Client durch ‘Papierkorb leeren’ ausgelöst.
  • a - administer: Man darf selbst die Rechte des Folders verändern.

Insgesamt funktioniert IMAP auf seiten des Cyrus-Servers sehr zuverlässig, einschließlich der Erweiterungen. Es gibt mittlerweile auch viele Mail-Clients, mit denen man die Vorteile von IMAP-Mail nutzen kann, wobei hier noch an einigen Detailproblemen gearbeitet werden muß. Für ‘Power-Mailuser’ lohnt sich eine detailgenaue Evaluierung der verschiedenen Mail-Clients. Zudem scheint bei vielen Entwicklern von Mail-Clients aktuell der Schwerpunkt auf dem Einbau von IMAP-Funktionalität zu liegen, so daß mit weiteren und verbesserten Implementierungen zu rechnen ist.

[1] Ralf U. Holighaus; Electronic Mail; Virtuelle Briefumschläge; Intranet-Messaging mit IMAP4; iX 7/97 S. 142

[2] Patricia Jung, Stefanie Teufel; EMail-Frontends; Wenn die Postfrau …; Mail User Agents für Linux im Vergleich

[3] http://www.cyrusoft.com

[4] ftp://ftp.cac.washington.edu/imap/imap.tar.Z

[5] http://asg.web.cmu.edu/cyrus/ und http://www.cmu.edu:80/computing/cyrus/cyrus.html

[6] pwcheck LDAP-Patches: http://www.linc-dev.com/auth.html

[7] http://www.paladincorp.com.au/

Mehr Infos

iX-TRACT

  • IMAP ist ein EMail-Protokoll, das sich gegenüber dem heute verbreiteten POP3 durch viele Vorteile auszeichnet.
  • Die Mail-Verarbeitung unter IMAP ist serverbasiert.
  • Mit dem Cyrus IMAP-Server existiert eine stabile, auch für große Umgebungen geeignete freie Implementierung des Protokolls.
  • Gängige Mail-Clients unterstützen IMAP bereits, allerdings in sehr unterschiedlicher Qualität.