Zentralanbindung

In der vorigen iX ging es um die Grundlagen der Konfiguration des Cyrus-IMAP-Servers. Der zweite Teil bringt die nötigen Feinheiten, um vom guten zum sehr guten Funktionieren eines zentralen EMail-Systems zu kommen.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 17 Min.
Von
  • Axel Wilzopolski
Inhaltsverzeichnis

Ein IMAP-Server ist - wie in iX 5/99 ab Seite 150 dargestellt - kein Ersatz für einen existierenden Message Transfer Agent (MTA) wie Sendmail, sondern setzt auf der Ebene des Message Delivery Agent (MDA) ein. Anders ausgedrückt: Sendmail übergibt die üblicherweise per SMTP empfangenen EMails an das Cyrus-Programm deliver. Das muß Sendmail natürlich mitgeteilt werden, und dankenswerterweise umfassen die Public-Domain-Sendmail-Versionen ab 8.7.1 vorgefertigte Konfigurationsdateien zur Unterstützung von Cyrus IMAP-Servern. An einigen Schrauben der Sendmail-Konfiguration sollte man allerdings noch etwas drehen.

Im wesentlichen betrifft dies die Auslieferung von Nachrichten an Unterordner von öffentlichen und privaten Mail-Foldern. Die mitgelieferte Konfiguration unterscheidet bei der Adressierung von Unterordnern nicht nach Groß- und Kleinschreibung. Dies kann durch Setzen der entsprechenden Flags für die Sendmail-Mailer geändert werden.

Außerdem wird bei der Installation im Heise-Verlag Post an die Benutzer root und cyrus nicht über das Cyrus-System, sondern in das Standard-Mail-Spool-Verzeichnis ausgeliefert. Dadurch benötigt man keinen IMAP-Folder für diese zwei System-User und erhält selbst bei einem Ausfall des Cyrus-Systems noch EMail. Das drückt weniger ein Mißtrauen gegenüber der Cyrus-Lösung als vielmehr ein gesteigertes Zuverlässigkeitsbedürfnis aus - tatsächlich habe ich noch keinen Ausfall des IMAP-Servers erlebt, jedoch schon einige Fehlfunktionen eines POP-Servers.

Die wie oben beschrieben geänderten Konfigurationsdateien sind als Listings ‘Konfigurationsdatei: cyrusproto.mc’ und ‘Cyrus-Mailer: cyrus.m4’ abgedruckt. Weitere Anpassungen an die eigenen Verhältnisse muß man unter Umständen noch vornehmen. Die vorliegende Konfiguration geht zum Beispiel von einem ‘sealed IMAP-Server’ aus, auf dem die Benutzer keine Login-Shell haben. Zudem erlaubt sie nicht die Benutzung eigener .forward-Dateien. Auf Servern mit sehr vielen Mail-Usern empfiehlt sich dieses Vorgehen ohnehin, denn hier werden die Benutzer häufig nicht als System-User und damit auch ohne Home-Verzeichnis geführt. Vielmehr erfolgt die Benutzerverwaltung in eigenen Datenbanken - etwa mittels LDAP.

Allerdings ist ein benutzergesteuertes Mail-Filtering auf Serverseite so nicht möglich. Dieses Problem kann man auf zwei Weisen umgehen: entweder man schaltet einen Mail-Server vor, der die Mail erst nach Abarbeitung von .forward-Dateien, Aliases und so weiter an den IMAP-Server weiterleitet. Oder man richtet auf dem IMAP-Server den Sendmail-Mailer Mcyrus so ein, daß er dieses benutzerspezifische Filtern übernimmt. Dazu ruft Mcyrus als Delivery-Agent nicht deliver, sondern procmail auf. Das greift auf ein Verzeichnis zu, in dem sich die von den Usern definierten Procmail-Steuerungsdateien (statt .procmailrc in den Home-Directories) befinden, die wiederum über eine zentrale Konfigurationsdatei dynamisch und benutzerspezifisch eingebunden werden. Für diese Variante finden Sie die Konfigurationsdateien auf unserem WWW-Server.

Ideal wäre ein (Web-)Frontend, das die Benutzer bei der Erstellung der Steuerungsdateien unterstützt, sie von der für Durchschnitts-User zu kryptischen Procmail-Syntax entkoppelt und die generierten Filter in einem zentralen Verzeichnis ablegt.

Die Lösung mit einem zweiten vorgeschalteten Mail-Server bedeutet natürlich einen größeren Aufwand. Es muß ein zweiter Rechner für diesen Dienst zur Verfügung stehen, und es sind zwei Sendmail-Systeme zu administrieren. Dafür erhält man den sichereren ‘sealed’-Status des IMAP-Servers und erreicht eine Lasttrennung zwischen filterndem und Cyrus-Server.

Kann oder soll keiner der beiden beschriebenen Wege eingeschlagen werden, bleibt noch die Möglichkeit, den IMAP-Server zu öffnen und einen Zugriff auf die .forward-Dateien in den Home-Directories zu ermöglichen. Dazu fügt man den CYRUS_MAILER_ FLAGS ein ‘w’ hinzu.

Procmail wurde oben schon erwähnt, dieser Mail-Filter läßt sich zum Sortieren der elektronischen Post auf dem Server einsetzen. Kombiniert man dies mit einer geschickten Ansteuerung des Delivery-Agent (durch die Sendmail-Konfiguration), werden Mails bereits bei ihrer Ankunft gleich im passenden IMAP-Folder abgelegt.

Gegenüber einer prinzipiell ebenfalls möglichen Filterung durch den Mail-Client hat dies den Vorteil, daß die Mail auf jeden Fall schon sortiert ist - egal von welchem Rechner und mit welchem Mail-Programm man auf seine IMAP-Mail zugreift. Natürlich arbeitet der Server auch während des Urlaubs und ist hoffentlich schneller als jede Client-Maschine.

Man erreicht diese Sortierung durch einen Trick: die künstliche Erweiterung der eigentlichen EMail-Adresse. Wenn etwa der Benutzer PAUL auf dem IMAP-Server imap.heise.de die Nachrichten der Cyrus-Mailing-Liste in einer Ordnerhierarchie Mailing-Listen->Email-> IMAP->info-cyrus relativ zu seiner INBOX abspeichern möchte, würde eine entsprechend greifende Procmail-Regel diese Messages an die EMail-Adresse PAUL+Mailinglisten.Email.IMAP.info-cyrus@imap.heise.de weiterleiten. Das ‘+’-Zeichen gilt als Trenner zwischen Benutzerteil und Folder-Spezifizierung.

Sendmail auf imap.heise.de ‘zerpflückt’ nun konfigurationsgesteuert die EMail-Adresse in User-Part und Adreßzusatz und liefert durch den Cyrus-Delivery-Agent ‘deliver’ die Meldung an PAULs IMAP-Unterordner aus. (Dies ist nun einer der Momente, das ansonsten so gescholtene, berüchtigte sendmail.cf über den grünen Klee zu loben.)

PAUL sei jetzt die Grübelei über seine Mail-Filter überlassen - ein freundlicher Systemadministrator unterstützt ihn hierbei vielleicht durch ein Web-Interface zur vereinfachten Generierung entsprechender Regeln -, erst einmal will Sendmail konfiguriert sein.

Die Sendmail-Distribution liege in SENDMAILDIR, dann findet man unter SENDMAILDIR/cf/cf/cyrusproto.mc die M4-Makrodatei, aus der die für den Cyrus-IMAP-Server angepaßte sendmail.cf generiert wird. Dazu gehört SENDMAILDIR/cf/mailer/cyrus.m4. Diese Dateien sollte man durch die um eventuelle eigene Wünsche erweiterten Dateien aus Listing 1 und 2 ersetzen und dann in SENDMAILDIR/cf/cf durch

m4 ../m4/cf.m4 cyrusproto.mc > sendmail.cf

die Konfigurationsdatei erzeugen. Zu achten ist auf jeden Fall auf den OSTYPE in cyrusproto.mc, den man passend zu seinem Serverbetriebssystem aus SENDMAILDIR/cf/ostype wählt - das Listing funktioniert ohne Änderung für Solaris.

Mehr Infos

LISTING 1: cyrusproto.mc

VERSIONID(`@(#)cyrusproto.mc    8.3 (Carnegie Mellon) @(#)cyrusproto.mc 8.3')
define(`confBIND_OPTS',`-DNSRCH -DEFNAMES')
OSTYPE(solaris2)
FEATURE(nouucp)
FEATURE(nocanonify)
FEATURE(always_add_domain)
MAILER(smtp) MAILER(cyrus)

define(`confLOCAL_MAILER',`cyrus')

LOCAL_RULE_0
Rbboard + $+ < @ $=w . > $#cyrusbb $: $1
# zusaetzlich zu Mcyrus (fuer Folder ohne "anyone p")
R$+ + $+ < @ $=w . > $#cyrusplus $@ $2 $: $1 local name + Detail
# root und cyrus etc. nicht per cyrus ausliefern
R$=E $#local $: $1 non-cyrus mailer for root etc.
R$=E < @ $=w . > $#local $: $1 non-cyrus mailer for root etc.
Mehr Infos

LISTING 2: cyrus.m4

#
# aw: Flag "h" hinzugefuegt (Gross-/Kleinschreibung fuer Userfolder)
#
ifdef(`CYRUS_MAILER_FLAGS',, `define(`CYRUS_MAILER_FLAGS', `hA5@/:|')')
ifdef(`CYRUS_MAILER_PATH',, `define(`CYRUS_MAILER_PATH', /usr/cyrus/bin/deliver)')
ifdef(`CYRUS_MAILER_ARGS',, `define(`CYRUS_MAILER_ARGS', `deliver -e -m $h -- $u')')
ifdef(`CYRUS_MAILER_USER',, `define(`CYRUS_MAILER_USER', `cyrus:mail')')

#
# aw: Flag "u" hinzugefuegt (Gross-/Kleinschreibung fuer BBoards)
#
ifdef(`CYRUS_BB_MAILER_FLAGS',, `define(`CYRUS_BB_MAILER_FLAGS', `u')')
ifdef(`CYRUS_BB_MAILER_ARGS',, `define(`CYRUS_BB_MAILER_ARGS', `deliver -e -m $u')')

#
# aw: Mailer Mcyrusplus hinzugefuegt
#
ifdef(`CYRUS_PLUS_MAILER_FLAGS',, `define(`CYRUS_PLUS_MAILER_FLAGS', `hA5@/:|')')
ifdef(`CYRUS_PLUS_MAILER_ARGS',, `define(`CYRUS_PLUS_MAILER_ARGS', `deliver -e -a $u -m user.$u.$h')')
##################################################
### Cyrus Mailer specification ###
##################################################


VERSIONID(`@(#)cyrus.m4 8.9 (Carnegie Mellon) 5/19/98')

Mcyrus, P=CYRUS_MAILER_PATH, F=CONCAT(`lsDFMnPq', CYRUS_MAILER_FLAGS),S =10, R=20/40, T=X-Unix,
ifdef(`CYRUS_MAILER_MAX', `M=CYRUS_MAILER_MAX, ')U=CYRUS_MAILER_USER,
A=CYRUS_MAILER_ARGS

Mcyrusbb, P=CYRUS_MAILER_PATH, F=CONCAT(`lsDFMnP', CYRUS_BB_MAILER_FLAGS), S=10, R=20/40, T=X-Unix,
ifdef(`CYRUS_MAILER_MAX', `M=CYRUS_MAILER_MAX, ')U=CYRUS_MAILER_USER,
A=CYRUS_BB_MAILER_ARGS

#
# aw: Mailer Mcyrusplus hinzugefuegt (direkt an Userfolder ausliefern)
#
Mcyrusplus, P=CYRUS_MAILER_PATH, F=CONCAT(`lsDFMnP', CYRUS_PLUS_MAILER_FLAGS), S=10, R=20/40, T=X-Unix,
ifdef(`CYRUS_MAILER_MAX', `M=CYRUS_MAILER_MAX, ')U=CYRUS_MAILER_USER,
A=CYRUS_PLUS_MAILER_ARG

Diese Dateien führen im wesentlichen zu zwei Sendmail-Mailern: Mcyrus, Mcyrusbb und den zugehörigen Sendmail-Regeln. Mcyrus besorgt die Zustellung der EMail an die privaten IMAP-Folder, Mcyrusbb ist für die gemeinsam genutzten ‘Bulletin-Boards’ beziehungsweise ‘Shared Folders’ zuständig. Man achte darauf, daß man keinen User ‘bb’ hat beziehungsweise ändere wie im Listing den Pseudo-User auf ‘bboard’ oder ähnlich Eindeutiges.

Damit deliver mit dieser Sendmail-Konfiguration die Nachrichten in anderen Foldern als den Eingangsordnern ablegen kann, müssen diese die ACL ‘anyone p’ bekommen. Um dieses Recht durchgängig in allen Subfoldern zu vergeben, empfiehlt es sich, schon bei der Einrichtung eines neuen Mail-Benutzers diese ACL für die Inbox zu spefizieren. Alle Unterordner erben dieses Recht automatisch.

Alternativ kann man, wie in den Listings gezeigt, einen Sendmail-Mailer namens MCyrusplus definieren, der Nachrichten auch in Unterverzeichnissen ablegen kann, wenn diese nicht die ACL ‘anyone p’ besitzen.

Mehr Infos

Nach der Installation von Cyrus steht auch das Kommandozeilentool cyradm bereit, mit dem Message-Folder angelegt, mit Zugriffsrechten versehen, verschoben und gelöscht werden können. Die Bedienung erfolgt interaktiv oder durch eine als Argument übergebene Kommandodatei, die TCL-Befehle enthält. cyradm selbst benutzt ausschließlich IMAP-Kommandos, kann also durch andere selbstgeschriebene Tools ersetzt werden und ist auch für andere IMAP-Server geeignet. Zum Bezug eines Web-Frontends als cyradm-Ersatz siehe Kasten ‘Bezugsquellen’.

cyradm kann (lokal oder remote) jeder User benutzen, der einen Shell-Account hat. Ein normaler Benutzer darf meist nur seine eigenen Ordner modifizieren, es sei denn, er hat das ‘a’-Recht (a für Administration) für andere Folder. In imapd.conf als ‘admins’ definierte Benutzer dürfen alles, spätestens nachdem sie sich das ‘a’-Recht für einen Mail-Folder gegeben haben. Einen begrenzten Zugang zum oben erwähnten Web-Frontend sollte der Administrator auch Normalsterblichen gewähren, da sich einige Manipulationen an Ordnerzugriffsrechten mit den meisten Mail-Clients bislang noch nicht machen lassen. Mulberry und Paladin bilden hier eine rühnliche Ausnahme. Zum Beispiel kann es für Benutzer wünschenswert sein, einen Folder der persönlichen Hierarchie anderen Benutzern zugänglich zu machen. In /etc/imapd.conf als ‘admin’ eingetragene User dürfen alle Folder modifizieren, da sie sich für alle Ordner ein ‘a’-Recht erteilen können.

Hilfe zu cyradm gibt es durch man cyradm auf der Kommandozeile oder durch help am cyradm-Prompt. help Kommando verrät Genaueres zu den einzelnen Befehlen.

Einige Beispiele demonstrieren den Umgang mit cyradm. Erstens: Anlegen eines Mail-Folders für einen neuen User ‘paulchen’ auf der Partition ‘neu’ und Beschränkung seiner Speicherkapazität auf 50 MByte.

imap.heise.de> createmailbox user.paulchen neu
imap.heise.de> setquota user.paulchen 50000
imap.heise.de> listaclmailbox user.paulchen
paulchen lrswipcda
imap.heise.de> listquota user.paulchen
STORAGE 0/50000 (0%)

Wie man sieht, umfassen die Standardrechte, die der persönliche Mail-Folder eines Benutzers erhält, den vollen Zugriff. Im Vergleich dazu erhält ein ‘shared folder’ die Rechte, die in /etc/imapd.conf als ‘defaultacl’ definiert sind:

imap.heise.de> cm Test
imap.heise.de> lam Test
anyone lrsp
group:imapadm lrswipcda

Die ‘group’ namens imapadm ist übrigens eine Unix-Gruppe. Nächstes Beispiel: Verschieben mehrerer Mail-Folder auf eine andere Partition namens ‘neu’.

imap.heise.de> renamemailbox user.paul.Lists.info-cyrus \
user.paul.Lists.info-cyrus neu
imap.heise.de> renamemailbox
user.paul.Lists.openldap-announce \
user.paul.Lists.openldap-announce neu
imap.heise.de> renamemailbox \
user.paul.Lists.openldap-general \
user.paul.Lists.openldap-general neu
imap.heise.de> renamemailboxuser.paul.Lists.openldap-stable \
user.paul.Lists.openldap-stable neu

Das artet spätestens jetzt in unliebsame Tipparbeit aus. Die läßt sich weitgehend reduzieren, wenn man die eigentlichen Folder-Namen zum Beispiel aus /var/imap/mailboxes in eine Datei kopiert oder mit Unix-Kommandos (find, ls, awk) generiert und mit ein paar Editorbefehlen drumherum zur cyradm-Kommandodatei aufmotzt. Folder-Namen, die Leerzeichen enthalten, sind in Anführungszeichen zu setzen.

Ein Beispiel einer einfachen cyradm-Kommandodatei, Aufruf mit cyradm -file Skriptdatei (‘iconn’ ist ein beliebig gewählter Bezeichner für die gerade aktuelle Verbindung; das Skript läuft lokal auf dem IMAP-Server; 143 ist der imap-Port; paula hat Admin-Rechte):

cyradm connect iconn localhost 143
iconn authenticate -pwcommand { list paula PASSWORT }
iconn createmailbox user.paul001
iconn createmailbox user.paul002
iconn createmailbox user.paul003
iconn createmailbox user.paul004
iconn createmailbox user.paul005

Ein weiteres nützliches Kommandozeilentool aus dem Cyrus-Lieferumfang ist reconstruct. Damit lassen sich die Verwaltungsdateien der Mail-Folder rekonstruieren. Nach einem Festplatten-Crash können sie nach Einspielen der Message-Dateien vom Backup wiederhergestellt werden.

Sehr praktisch ist reconstruct aber auch, wenn der Administrator Aufräumarbeiten auf Dateiebene erledigt, um hinterher die Cyrus-Verwaltungsinformationen geradezuziehen.

Zum Beispiel verschieben wir per Shell-Skript alle Message-Dateien der dpa-Pressemeldungen, die älter als vier Tage sind, in einen Unterordner alte_Meldungen. Was älter als einen Monat ist, wird ganz gelöscht. Am Ende des Skripts, das als täglicher Cronjob läuft, steht ein rekursiver reconstruct-Aufruf: reconstruct -r Mailinglisten.Presse.dpa. Dieser räumt dann im dpa-Folder und allen Subfoldern auf.

Brutale Administratoren schieben so alle Messages unterhalb von /var/spool/imap/user, die älter als x Tage sind, nach /dev/null und räumen hinterher hübsch mit reconstruct auf. Man könnte den Aufwand beliebig erhöhen und alle alten EMails vor der endgültigen Beseitigung noch eine gewisse Zeit in einem definierten privaten Unterordner der Benutzer vorhalten, so daß diese noch die Chance zur Rettung wichtiger älterer Nachrichten haben.

Eine andere Möglichkeit wäre die durch einen zentralen Filter automatisch besorgte Verfrachtung von unerwünschten Werbe-Mails in einen Unterordner ‘SPAM’ der User-Folder. Dort können dann regelmäßig ältere Message-Dateien gelöscht werden. Die Grenzen setzt hier nur die Phantasie des IMAP-Masters.

Axel Wilzopolski
ist verantwortlich für EDV und Netzwerk im Zeitschriftenbereich des Heise-Verlags.

Mehr Infos

iX-TRACT

  • Eine gute IMAP-Installation bedarf einer differenzierten Konfiguration von Sendmail.
  • Mit dem cyradm steht für den Cyrus-IMAP-Server ein Administrationswerkzeug zur Verfügung, das von Benutzern und Administratoren eingesetzt werden kann.
  • Sichere EMail-Kommunikation ist durch den Einsatz von IMAP über TLS möglich.
Mehr Infos

Fast frei verfügbar

Einige Leser wiesen uns darauf hin, daß zur Beschreibung der Lizenzlage die Formulierung ‘in der Public-Domain’ im ersten Artikel etwas ungenau ist. Auch die Copyright-Hinweise in der Distribution sind interpretationsbedürftig.

Wir haben daraufhin noch einmal bei der Carnegie Mellon University nachgefragt und folgende Auskunft erhalten: der Einsatz der Software ist kostenlos, insbesondere können Provider damit ihren Kunden IMAP-Dienste anbieten. Allein der Wiederverkauf, auch von Teilen, oder die Verwendung des Codes in kommerziellen Produkten bedürfen einer besonderen Lizenz; Kontakt: tech-transfer@andrew.cmu.edu

Mehr Infos

Umlaute in EMail-Adressen

iX-Leser Alexander Müller wies uns auf das Problem hin, daß der Cyrus-IMAP-Server Umlaute in EMail-Headern entweder durch ein ‘X’ ersetzt oder solche Nachrichten abweist. RFC 822 verbietet 8-Bit-Zeichen in Headern, deswegen ist dieses Verfahren auch durchaus richtig - aber außerhalb des englischen Sprachraums nicht praxisgerecht.

Die Wurzel des Problems liegt bei den Mail-Clients, die keine RFC-konformen Header produzieren. Neuere Produkte arbeiten aber richtig, so auch Netscapes Communicator und Microsofts Outlook.

Eine korrekte Lösung auf seiten des IMAP-Servers wäre, die 8-Bit-Zeichen in den Header-Zeilen gemäß RFC-2047 umzuwandeln, zum Beispiel so:

Subject: Neuer Mac für Michaela Meier

in

Subject: Neuer Mac =?iso-8859-1?Q?f=FCr?= Michaela Meier

oder auch

Subject: Re: =?iso-8859
-1?Q?Neuer_Mac_f=FCr_Michaela_Meier?=
Mehr Infos

PHP-basiertes Web-Interface

Ein PHP-basiertes Web-Interface zur IMAP-Administration und ein Tool zur Mail-Verwaltung haben Rieder Didi und Stocker Gernot von der Universität Graz entwickelt. Es ist unter der GNU Public License frei verfügbar und erhältlich über ftp://ftp.hr.vc-graz.ac.at/cyrus-tools/