Der Cyrus Hochleistungs-Mailserver mit Unterstützung für IMAP und SIEVE

Cyrus-Logo

Der eMail-Server Cyrus ist ein Open-Source-Projekt der Carnegie Mellon University, welches ursprünglich für das Campus-Mail-System der Universität entwickelt wurde. In der Zwischenzeit ist er jedoch ein anerkannter und auch im professionellen Bereich eingesetzter MDA1). Er unterstützt neben dem POP32) auch das Protokoll IMAP3), auf welches wir in der weiteren Dokumentation weiter eingehen werden. Cyrus arbeitet mit diversen SMTP-Servern unter Linux/Unix zusammen und ist für das Zusammenspiel mit unserem Mailserver Postfix bestens gerüstet. Cyrus benutzt die Cyrus SASL Library - eine Implementierung von SASL - um mehrere Authentifizierungsmethoden zur Verfügung stellen zu können, wie z.B. Plain, CRAM-MD5, Digest-MD5, oder PAM.

Über das Anwendungsprotokoll IMAP erlaubt der Cyrus-Server den Benutzern die Verwaltung von empfangenen E-Mails, die sich in einem Postfach auf dem Mailserver befinden. IMAP wurde im Jahr 1986 entworfen, um den Zugriff auf Mailboxen und Nachrichten so bereitzustellen, als befänden sich diese auf dem lokalen Rechner. Im Gegensatz zu POP3 verbleiben die eMails aber auf dem Mailserver und werden dort verwaltet. Für das Versenden der Nachrichten wird das Protokoll SMTP verwendet. Zur Kommunikation mit dem IMAP-Server horcht der Server auf dem Port 143. Die Definition von IMAP ist im RFC 3501 definiert worden.

Die Installation unseres MDA nutzen wir yum.

 # yum install cyrus-imapd

Neben dem eigentlichen Programmpaket cyrus-imapd kommen noch die beiden Pakete cyrus-imapd-perl und cyrus-imapd-utils zur Verwendung. Was uns das Programmpaket cyrus-imapd mitbringt entnehmen wir dem RPM.

# rpm -iql cyrus-imapd
Name        : cyrus-imapd                  Relocations: (not relocatable)
...

...
URL         : http://asg.web.cmu.edu/cyrus/imapd/
Summary     : Ein Hochleistungs-Mailserver mit Unterstützung für IMAP, POP3, NNTP und SIEVE
Description :
The cyrus-imapd package contains the core of the Cyrus IMAP server.
It is a scaleable enterprise mail system designed for use from
small to large enterprise environments using standards-based
internet mail technologies.

A full Cyrus IMAP implementation allows a seamless mail and bulletin
board environment to be set up across multiple servers. It differs from
other IMAP server implementations in that it is run on "sealed"
servers, where users are not normally permitted to log in and have no
system account on the server. The mailbox database is stored in parts
of the filesystem that are private to the Cyrus IMAP server. All user
access to mail is through software using the IMAP, POP3 or KPOP
protocols. It also includes support for virtual domains, NNTP,
mailbox annotations, and much more. The private mailbox database design
gives the server large advantages in efficiency, scalability and
administratability. Multiple concurrent read/write connections to the
same mailbox are permitted. The server supports access control lists on
mailboxes and storage quotas on mailbox hierarchies.

The Cyrus IMAP server supports the IMAP4rev1 protocol described
in RFC 3501. IMAP4rev1 has been approved as a proposed standard.
It supports any authentication mechanism available from the SASL
library, imaps/pop3s/nntps (IMAP/POP3/NNTP encrypted using SSL and
TLSv1) can be used for security. The server supports single instance
store where possible when an email message is addressed to multiple
recipients, SIEVE provides server side email filtering.
/etc/cron.daily/cyrus-imapd
/etc/cyrus.conf
/etc/imapd.conf
/etc/logrotate.d/cyrus-imapd
/etc/pam.d/csync
/etc/pam.d/imap
/etc/pam.d/lmtp
/etc/pam.d/mupdate
/etc/pam.d/nntp
/etc/pam.d/pop
/etc/pam.d/sieve
/etc/pki/cyrus-imapd
/etc/rc.d/init.d/cyrus-imapd
/etc/sysconfig/cyrus-imapd
/usr/lib/cyrus-imapd
/usr/lib/cyrus-imapd/arbitron
/usr/lib/cyrus-imapd/arbitronsort.pl
/usr/lib/cyrus-imapd/chk_cyrus
/usr/lib/cyrus-imapd/compile_sieve
/usr/lib/cyrus-imapd/convert-sieve.pl
/usr/lib/cyrus-imapd/ctl_cyrusdb
/usr/lib/cyrus-imapd/ctl_deliver
/usr/lib/cyrus-imapd/ctl_mboxlist
/usr/lib/cyrus-imapd/cvt_cyrusdb
/usr/lib/cyrus-imapd/cvt_cyrusdb_all
/usr/lib/cyrus-imapd/cyr_expire
/usr/lib/cyrus-imapd/cyrdump
/usr/lib/cyrus-imapd/cyrfetchnews
/usr/lib/cyrus-imapd/cyrus-master
/usr/lib/cyrus-imapd/deliver
/usr/lib/cyrus-imapd/dohash
/usr/lib/cyrus-imapd/fud
/usr/lib/cyrus-imapd/idled
/usr/lib/cyrus-imapd/imapd
/usr/lib/cyrus-imapd/ipurge
/usr/lib/cyrus-imapd/lmtpd
/usr/lib/cyrus-imapd/lmtpproxyd
/usr/lib/cyrus-imapd/make_md5
/usr/lib/cyrus-imapd/masssievec
/usr/lib/cyrus-imapd/mbexamine
/usr/lib/cyrus-imapd/mbpath
/usr/lib/cyrus-imapd/migrate-metadata
/usr/lib/cyrus-imapd/mkimap
/usr/lib/cyrus-imapd/mknewsgroups
/usr/lib/cyrus-imapd/mupdate
/usr/lib/cyrus-imapd/mupdate-loadgen.pl
/usr/lib/cyrus-imapd/nntpd
/usr/lib/cyrus-imapd/notifyd
/usr/lib/cyrus-imapd/pop3d
/usr/lib/cyrus-imapd/proxyd
/usr/lib/cyrus-imapd/ptdump
/usr/lib/cyrus-imapd/ptexpire
/usr/lib/cyrus-imapd/ptloader
/usr/lib/cyrus-imapd/quota
/usr/lib/cyrus-imapd/reconstruct
/usr/lib/cyrus-imapd/rehash
/usr/lib/cyrus-imapd/rpm_set_permissions
/usr/lib/cyrus-imapd/sievec
/usr/lib/cyrus-imapd/smmapd
/usr/lib/cyrus-imapd/squatter
/usr/lib/cyrus-imapd/sync_client
/usr/lib/cyrus-imapd/sync_reset
/usr/lib/cyrus-imapd/sync_server
/usr/lib/cyrus-imapd/timsieved
/usr/lib/cyrus-imapd/tls_prune
/usr/lib/cyrus-imapd/translatesieve
/usr/lib/cyrus-imapd/undohash
/usr/lib/cyrus-imapd/unexpunge
/usr/lib/cyrus-imapd/upd_groupcache
/usr/lib/cyrus-imapd/upgradesieve
/usr/share/cyrus-imapd
/usr/share/cyrus-imapd/rpm
/usr/share/cyrus-imapd/rpm/db.cfg
/usr/share/cyrus-imapd/rpm/magic
/usr/share/doc/cyrus-imapd-2.3.7
/usr/share/doc/cyrus-imapd-2.3.7/COPYRIGHT
/usr/share/doc/cyrus-imapd-2.3.7/README
/usr/share/doc/cyrus-imapd-2.3.7/README.HOWTO-recover-mailboxes.db
/usr/share/doc/cyrus-imapd-2.3.7/README.RPM
/usr/share/doc/cyrus-imapd-2.3.7/README.autocreate
/usr/share/doc/cyrus-imapd-2.3.7/README.autosievefolder
/usr/share/doc/cyrus-imapd-2.3.7/README.groupcache
/usr/share/doc/cyrus-imapd-2.3.7/README.skiplist_recovery
/usr/share/doc/cyrus-imapd-2.3.7/altnamespace.html
/usr/share/doc/cyrus-imapd-2.3.7/anoncvs.html
/usr/share/doc/cyrus-imapd-2.3.7/bugs.html
/usr/share/doc/cyrus-imapd-2.3.7/changes.html
/usr/share/doc/cyrus-imapd-2.3.7/conf
/usr/share/doc/cyrus-imapd-2.3.7/conf/cmu-backend.conf
/usr/share/doc/cyrus-imapd-2.3.7/conf/cmu-frontend.conf
/usr/share/doc/cyrus-imapd-2.3.7/conf/normal.conf
/usr/share/doc/cyrus-imapd-2.3.7/conf/prefork.conf
/usr/share/doc/cyrus-imapd-2.3.7/conf/small.conf
/usr/share/doc/cyrus-imapd-2.3.7/contrib
/usr/share/doc/cyrus-imapd-2.3.7/contrib/README
/usr/share/doc/cyrus-imapd-2.3.7/contrib/batchreconstruct
/usr/share/doc/cyrus-imapd-2.3.7/contrib/bsd2cyrus
/usr/share/doc/cyrus-imapd-2.3.7/contrib/cpmsg
/usr/share/doc/cyrus-imapd-2.3.7/contrib/cyrus_ldap_quota
/usr/share/doc/cyrus-imapd-2.3.7/contrib/cyrus_sharedbackup-0.1.tar.gz
/usr/share/doc/cyrus-imapd-2.3.7/contrib/folderxfer
/usr/share/doc/cyrus-imapd-2.3.7/contrib/imapcreate
/usr/share/doc/cyrus-imapd-2.3.7/contrib/inboxfer
/usr/share/doc/cyrus-imapd-2.3.7/contrib/skiplist.py
/usr/share/doc/cyrus-imapd-2.3.7/cyrusv2.mc
/usr/share/doc/cyrus-imapd-2.3.7/faq.html
/usr/share/doc/cyrus-imapd-2.3.7/feedback.html
/usr/share/doc/cyrus-imapd-2.3.7/index.html
/usr/share/doc/cyrus-imapd-2.3.7/install-admin-mb.html
/usr/share/doc/cyrus-imapd-2.3.7/install-auth.html
/usr/share/doc/cyrus-imapd-2.3.7/install-compile.html
/usr/share/doc/cyrus-imapd-2.3.7/install-configure.html
/usr/share/doc/cyrus-imapd-2.3.7/install-murder.html
/usr/share/doc/cyrus-imapd-2.3.7/install-netnews.html
/usr/share/doc/cyrus-imapd-2.3.7/install-perf.html
/usr/share/doc/cyrus-imapd-2.3.7/install-prereq.html
/usr/share/doc/cyrus-imapd-2.3.7/install-replication.html
/usr/share/doc/cyrus-imapd-2.3.7/install-sieve.html
/usr/share/doc/cyrus-imapd-2.3.7/install-snmpmon.html
/usr/share/doc/cyrus-imapd-2.3.7/install-testing.html
/usr/share/doc/cyrus-imapd-2.3.7/install-upgrade.html
/usr/share/doc/cyrus-imapd-2.3.7/install-virtdomains.html
/usr/share/doc/cyrus-imapd-2.3.7/install.html
/usr/share/doc/cyrus-imapd-2.3.7/internal
/usr/share/doc/cyrus-imapd-2.3.7/internal/bytecode
/usr/share/doc/cyrus-imapd-2.3.7/internal/database-formats.html
/usr/share/doc/cyrus-imapd-2.3.7/internal/hacking
/usr/share/doc/cyrus-imapd-2.3.7/internal/internationalization.html
/usr/share/doc/cyrus-imapd-2.3.7/internal/locking
/usr/share/doc/cyrus-imapd-2.3.7/internal/mailbox-format.html
/usr/share/doc/cyrus-imapd-2.3.7/internal/master-state-machine.fig
/usr/share/doc/cyrus-imapd-2.3.7/internal/prot-events
/usr/share/doc/cyrus-imapd-2.3.7/internal/prot.html
/usr/share/doc/cyrus-imapd-2.3.7/internal/replication_examples
/usr/share/doc/cyrus-imapd-2.3.7/internal/replication_protocol
/usr/share/doc/cyrus-imapd-2.3.7/internal/specials
/usr/share/doc/cyrus-imapd-2.3.7/internal/uuid
/usr/share/doc/cyrus-imapd-2.3.7/internal/var_directory_structure
/usr/share/doc/cyrus-imapd-2.3.7/m4
/usr/share/doc/cyrus-imapd-2.3.7/m4/cyrus-imapd-procmail+cyrus.mc
/usr/share/doc/cyrus-imapd-2.3.7/m4/cyrus-imapd-sendmail-8.12.9-cyrusv2.m4
/usr/share/doc/cyrus-imapd-2.3.7/m4/cyrus-procmailrc
/usr/share/doc/cyrus-imapd-2.3.7/m4/cyrus-user-procmailrc.template
/usr/share/doc/cyrus-imapd-2.3.7/mailing-list.html
/usr/share/doc/cyrus-imapd-2.3.7/man
/usr/share/doc/cyrus-imapd-2.3.7/man.html
/usr/share/doc/cyrus-imapd-2.3.7/man/arbitron.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/chk_cyrus.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/ctl_cyrusdb.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/ctl_deliver.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/ctl_mboxlist.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/cvt_cyrusdb.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/cyr_expire.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/cyradm.1.html
/usr/share/doc/cyrus-imapd-2.3.7/man/cyrfetchnews.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/cyrus-master.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/cyrus.conf.5.html
/usr/share/doc/cyrus-imapd-2.3.7/man/deliver.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/fud.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/idled.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/imapd.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/imapd.conf.5.html
/usr/share/doc/cyrus-imapd-2.3.7/man/imclient.3.html
/usr/share/doc/cyrus-imapd-2.3.7/man/imtest.1.html
/usr/share/doc/cyrus-imapd-2.3.7/man/installsieve.1.html
/usr/share/doc/cyrus-imapd-2.3.7/man/ipurge.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/krb.equiv.5.html
/usr/share/doc/cyrus-imapd-2.3.7/man/lmtpd.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/lmtptest.1.html
/usr/share/doc/cyrus-imapd-2.3.7/man/make_md5.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/mbexamine.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/mbpath.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/mupdatetest.1.html
/usr/share/doc/cyrus-imapd-2.3.7/man/nntpd.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/nntptest.1.html
/usr/share/doc/cyrus-imapd-2.3.7/man/notifyd.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/pop3d.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/pop3test.1.html
/usr/share/doc/cyrus-imapd-2.3.7/man/quota.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/reconstruct.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/rmnews.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/sieveshell.1.html
/usr/share/doc/cyrus-imapd-2.3.7/man/sivtest.1.html
/usr/share/doc/cyrus-imapd-2.3.7/man/smmapd.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/smtptest.1.html
/usr/share/doc/cyrus-imapd-2.3.7/man/squatter.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/sync_client.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/sync_reset.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/sync_server.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/timsieved.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/tls_prune.8.html
/usr/share/doc/cyrus-imapd-2.3.7/man/unexpunge.8.html
/usr/share/doc/cyrus-imapd-2.3.7/murder.fig
/usr/share/doc/cyrus-imapd-2.3.7/murder.png
/usr/share/doc/cyrus-imapd-2.3.7/netnews.fig
/usr/share/doc/cyrus-imapd-2.3.7/netnews.png
/usr/share/doc/cyrus-imapd-2.3.7/notes.html
/usr/share/doc/cyrus-imapd-2.3.7/os.html
/usr/share/doc/cyrus-imapd-2.3.7/overview.html
/usr/share/doc/cyrus-imapd-2.3.7/questions.html
/usr/share/doc/cyrus-imapd-2.3.7/readme.html
/usr/share/doc/cyrus-imapd-2.3.7/sieve-protocol.html
/usr/share/doc/cyrus-imapd-2.3.7/sieve.html
/usr/share/doc/cyrus-imapd-2.3.7/specs.html
/usr/share/doc/cyrus-imapd-2.3.7/text
/usr/share/doc/cyrus-imapd-2.3.7/text/altnamespace
/usr/share/doc/cyrus-imapd-2.3.7/text/anoncvs
/usr/share/doc/cyrus-imapd-2.3.7/text/bugs
/usr/share/doc/cyrus-imapd-2.3.7/text/changes
/usr/share/doc/cyrus-imapd-2.3.7/text/faq
/usr/share/doc/cyrus-imapd-2.3.7/text/feedback
/usr/share/doc/cyrus-imapd-2.3.7/text/index
/usr/share/doc/cyrus-imapd-2.3.7/text/install
/usr/share/doc/cyrus-imapd-2.3.7/text/install-admin-mb
/usr/share/doc/cyrus-imapd-2.3.7/text/install-auth
/usr/share/doc/cyrus-imapd-2.3.7/text/install-compile
/usr/share/doc/cyrus-imapd-2.3.7/text/install-configure
/usr/share/doc/cyrus-imapd-2.3.7/text/install-murder
/usr/share/doc/cyrus-imapd-2.3.7/text/install-netnews
/usr/share/doc/cyrus-imapd-2.3.7/text/install-perf
/usr/share/doc/cyrus-imapd-2.3.7/text/install-prereq
/usr/share/doc/cyrus-imapd-2.3.7/text/install-replication
/usr/share/doc/cyrus-imapd-2.3.7/text/install-sieve
/usr/share/doc/cyrus-imapd-2.3.7/text/install-snmpmon
/usr/share/doc/cyrus-imapd-2.3.7/text/install-testing
/usr/share/doc/cyrus-imapd-2.3.7/text/install-upgrade
/usr/share/doc/cyrus-imapd-2.3.7/text/install-virtdomains
/usr/share/doc/cyrus-imapd-2.3.7/text/mailing-list
/usr/share/doc/cyrus-imapd-2.3.7/text/man
/usr/share/doc/cyrus-imapd-2.3.7/text/notes
/usr/share/doc/cyrus-imapd-2.3.7/text/os
/usr/share/doc/cyrus-imapd-2.3.7/text/overview
/usr/share/doc/cyrus-imapd-2.3.7/text/questions
/usr/share/doc/cyrus-imapd-2.3.7/text/readme
/usr/share/doc/cyrus-imapd-2.3.7/text/sieve
/usr/share/doc/cyrus-imapd-2.3.7/text/sieve-protocol
/usr/share/doc/cyrus-imapd-2.3.7/text/specs
/usr/share/man/man5/cyrus.conf.5.gz
/usr/share/man/man5/imapd.conf.5.gz
/usr/share/man/man5/krb.equiv.5.gz
/usr/share/man/man8/arbitron.8.gz
/usr/share/man/man8/chk_cyrus.8.gz
/usr/share/man/man8/ctl_cyrusdb.8.gz
/usr/share/man/man8/ctl_deliver.8.gz
/usr/share/man/man8/ctl_mboxlist.8.gz
/usr/share/man/man8/cvt_cyrusdb.8.gz
/usr/share/man/man8/cyr_expire.8.gz
/usr/share/man/man8/cyrfetchnews.8.gz
/usr/share/man/man8/cyrus-master.8.gz
/usr/share/man/man8/deliver.8.gz
/usr/share/man/man8/fud.8.gz
/usr/share/man/man8/idled.8.gz
/usr/share/man/man8/imapd.8.gz
/usr/share/man/man8/ipurge.8.gz
/usr/share/man/man8/lmtpd.8.gz
/usr/share/man/man8/make_md5.8.gz
/usr/share/man/man8/mbexamine.8.gz
/usr/share/man/man8/mbpath.8.gz
/usr/share/man/man8/nntpd.8.gz
/usr/share/man/man8/notifyd.8.gz
/usr/share/man/man8/pop3d.8.gz
/usr/share/man/man8/quota.8.gz
/usr/share/man/man8/reconstruct.8.gz
/usr/share/man/man8/rmnews.8.gz
/usr/share/man/man8/smmapd.8.gz
/usr/share/man/man8/squatter.8.gz
/usr/share/man/man8/sync_client.8.gz
/usr/share/man/man8/sync_reset.8.gz
/usr/share/man/man8/sync_server.8.gz
/usr/share/man/man8/timsieved.8.gz
/usr/share/man/man8/tls_prune.8.gz
/usr/share/man/man8/unexpunge.8.gz
/var/lib/imap
/var/lib/imap/backup
/var/lib/imap/db
/var/lib/imap/log
/var/lib/imap/md5
/var/lib/imap/msg
/var/lib/imap/proc
/var/lib/imap/ptclient
/var/lib/imap/quota
/var/lib/imap/rpm
/var/lib/imap/sieve
/var/lib/imap/socket
/var/lib/imap/sync
/var/lib/imap/user
/var/spool/imap

imapd.conf

In der Konfigurationsdatei /etc/imapd.conf werden das Verhalten und die Verzeichnis(strukturen) des IMAP-Servers definiert. Mit dem Editor unserer Wahl bearbeiten und ergänzen wir die vom RPM mitgebrachten Defaultwerte.

 # vim /etc/imapd.conf
/etc/imapd.conf
# Konfigurationsverzeichnis der IMAP-Servers, in dem die Informationen
# wie die Berechtigungen, Quotas, und Informationen übder die
# Mailboxen gespeichert
configdirectory: /var/lib/imap
 
# Die Default-Partition, in der alle neuen User angelegt werden 
partition-default: /var/spool/imap
 
# postmaster, gibt den Postmaster an, also den E-Mail Administrator. 
postmaster: postmaster
 
# Der Benutzer mit den Administratoren-Rechten
admins: cyrus
 
# Sieve ist ein Filter, mit dem Nachrichten automatisch bei der
# zustellung in verschiedene Postfächer / Ordner einsortiert.
sievedir: /var/lib/imap/sieve
 
# anonymen Benutzerzugang sperren, bedeutet, wie der Name schon sagt, 
# dass sich alle Benutzer authentifizieren müssen. 
allowanonymouslogin: no
 
# Pfadangaben zu sendmail. Sieve verschickt über den Befehl sendmail 
# Reject-, Redirect- und Vacation-Nachrichten
sendmail: /usr/sbin/sendmail
 
hashimapspool: true
 
# Passwörter mittels saslauth überprüfen
sasl_pwcheck_method: saslauthd
sasl_mech_list: PLAIN
 
# Die default domain für den virtuellen Domain Support
defaultdomain: nausch.org
 
# lmtpd gibt einen permanenten Fehlercode zurück, wenn die Quota einer
# User-Mailbox ausgereizt wurde.
lmtp_overquota_perm_failure: true
 
# lmtpd konvertiert automatisch Empfängeradressen in Kleinbuchstaben
lmtp_downcase_rcpt: true
 
# Ein Wert größer als Null setzt einen Quota. Ein Wert der nicht 0 ist, 
# erlaubt dem Benutzer das anlegen seiner eigenen INBOX
autocreatequota: 1024000
 
# Postfach wird angelegt, wenn per lmtpd eine Nachricht angeliefert wird,
# für die noch kein Inbox besteht
createonpost: true
 
# Loggt sich ein User neu an, oder es wird eine Nachricht per lmtpd 
# angeliefert, für das noch kein Account besteht, so wird dieser automatisch 
# mit den definierten Ordnern angelegt
autocreateinboxfolders: inbox|achive
 
# Ist diese Option auf " yes" gesetzt, würde Cyrus keine E-Mails im 
# 8 Bit Format annehmen. Ist sie auf "no", so wandelt Cyrus die 
# Zeichen in 7 Bit um.
reject8bit: no
 
# Sobald 90% der Quota erreicht ist, gibt der Server Warnmeldungen aus
quotawarn: 90
 
# Nach 30 Sekunden IMAP-Untätigkeit den Benutzer automatisch abmelden
timeout: 30
 
# Normalerweise trennt Cyrus IMAP Ordern mit einem ".". Mit der Option: 
# "unixhierarchysep", kann man die Ordner mit einem "/" trennen lassen. 
# Wichtig wird diese Option sobald Benutzernamen Punkte enthalten. 
unixhierarchysep: true
 
# Konvertieren der Usernamen in Kleinbuchstaben vor dem Login/Authentifizierung
username_tolower: true
 
# Virtuellen Domain Supprt aktivieren
virtdomains: yes
 
# TLS-Einstellungen bei Bedarf aktivieren
# Kommentarzeichen entfernen und Zertifikate generieren
#tls_cert_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem
#tls_key_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem
#tls_ca_file: /etc/pki/tls/certs/ca-bundle.crt

cyrus.conf

In der Konfigurationsdatei /etc/cyrus.conf wird der Cyrus-Master-Server konfiguriert und festgelegt, welche Dienste der Server anbieten soll. Mit unserem Standardeditor bearbeiten wir diese Datei und deaktivieren alle ungewollten Dienste.

 # vim /etc/cyrus.conf
/etc/cyrus.conf
# standard standalone server implementation
 
START {
  # do not delete this entry!
  recover       cmd="ctl_cyrusdb -r"
 
  # this is only necessary if using idled for IMAP IDLE
  idled         cmd="idled"
}
 
# UNIX sockets start with a slash and are put into /var/lib/imap/sockets
SERVICES {
  # add or remove based on preferences
  imap          cmd="imapd" listen="imap" prefork=5
# nachfolgende drei Zeilen deaktiviert, da wir "nur" imap und sieve nutzen wollen und werden
# am 05.02.09 durch Django 
#  imaps                cmd="imapd -s" listen="imaps" prefork=1
#  pop3         cmd="pop3d" listen="pop3" prefork=3
#  pop3s                cmd="pop3d -s" listen="pop3s" prefork=1
  sieve         cmd="timsieved" listen="sieve" prefork=0
 
  # these are only necessary if receiving/exporting usenet via NNTP
#  nntp         cmd="nntpd" listen="nntp" prefork=3
#  nntps                cmd="nntpd -s" listen="nntps" prefork=1
 
  # at least one LMTP is required for delivery
#  lmtp         cmd="lmtpd" listen="lmtp" prefork=0
  lmtpunix      cmd="lmtpd" listen="/var/lib/imap/socket/lmtp" prefork=1
 
  # this is only necessary if using notifications
# aktiviert am 05.02.09 durch Django wegen, ja wegen was eigentlich?
  notify        cmd="notifyd" listen="/var/lib/imap/socket/notify" proto="udp" prefork=1
}
 
EVENTS {
  # this is required
  checkpoint    cmd="ctl_cyrusdb -c" period=30
 
  # this is only necessary if using duplicate delivery suppression,
  # Sieve or NNTP
  delprune      cmd="cyr_expire -E 3" at=0400
 
  # this is only necessary if caching TLS sessions
  tlsprune      cmd="tls_prune" at=0400
 
  # eingefügt am 05.02.09 durch Django, wegen was genau? ;)
  # squat it
  squatter      cmd="squatter -r *" period=30
}

Postfix

master.conf

In der /etc/postfix/master.cf ist für cyrus mit der Zustellmethode deliver bereits alles vorbereitet.

# # vim /etc/postfix/master.cf

# Cyrus 2.1.5 (Amos Gouaux)
# Also specify in main.cf: cyrus_destination_recipient_limit=1
cyrus     unix  -       n       n       -       -       pipe
  user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -r ${sender} -m ${extension} ${user}
...

main.cf

In der /etc/postfix/main.cf ändern wir nunmehr folgende Optionen ab.

# vim /etc/postfix/main.cf

...
### für cyrus aktiviert am 07.02.09
mailbox_transport = cyrus
cyrus_destination_recipient_limit=1
...

...

### für cyrus aktiviert am 07.02.09
relay_domains = $mydestination
...

Ein anschließender service postfix restart setzt den neuen Zustellprozess in Richtung cyrus-imapd in Bewegung.

Feb  7 21:33:54 nss postfix/smtpd[11549]: connect from mail-out.m-online.net[212.18.0.10]
Feb  7 21:33:55 nss postfix/policyd-weight[10094]: weighted check:  NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 CL_IP_EQ_HELO_IP=-2 (check from: .mnet-mail. - helo: .mail-out.m-online. - helo-domain: .m-online.)  FROM/MX_MATCHES_HELO(DOMAIN)=-2; <client=212.18.0.10> <helo=mail-out.m-online.net> <from=django@mnet-mail.de> <to=michael@nausch.org>; rate: -8.5 
Feb  7 21:33:55 nss postfix/policyd-weight[10094]: decided action=PREPEND X-policyd-weight:  NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 CL_IP_EQ_HELO_IP=-2 (check from: .mnet-mail. - helo: .mail-out.m-online. - helo-domain: .m-online.)  FROM/MX_MATCHES_HELO(DOMAIN)=-2; rate: -8.5; <client=212.18.0.10> <helo=mail-out.m-online.net> <from=django@mnet-mail.de> <to=michael@nausch.org>; delay: 0s 
Feb  7 21:33:55 nss postgrey[5913]: action=pass, reason=triplet found, client_name=mail-out.m-online.net, client_address=212.18.0.10, sender=django@mnet-mail.de, recipient=michael@nausch.org 
Feb  7 21:33:55 nss postgrey[5913]: cleaning up old logs... 
Feb  7 21:33:55 nss postfix/smtpd[11549]: NOQUEUE: client=mail-out.m-online.net[212.18.0.10]
Feb  7 21:33:55 nss amavis[16872]: (16872-15) ESMTP::10024 /var/amavis/tmp/amavis-20090207T153554-16872: <django@mnet-mail.de> -> <michael@nausch.org> SIZE=1515 BODY=7BIT Received: from mx1.nausch.org ([127.0.0.1]) by localhost (amavis.nausch.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP for <michael@nausch.org>; Sat,  7 Feb 2009 21:33:55 +0100 (CET)
Feb  7 21:33:55 nss amavis[16872]: (16872-15) Actual message size 1933 B greater than the declared 1515 B
Feb  7 21:33:55 nss amavis[16872]: (16872-15) Checking: zsKnoq9aUnu9 [212.18.0.10] <django@mnet-mail.de> -> <michael@nausch.org>
Feb  7 21:33:55 nss amavis[16872]: (16872-15) p001 1 Content-Type: text/plain, size: 20 B, name: 
Feb  7 21:33:56 nss postfix/smtpd[11590]: connect from localhost.localdomain[127.0.0.1]
Feb  7 21:33:56 nss postfix/smtpd[11590]: 6921311587C5: client=mail-out.m-online.net[212.18.0.10]
Feb  7 21:33:56 nss postfix/cleanup[11591]: 6921311587C5: message-id=<20090207213353.lo18hy6z6s8ow8c8@webmail.mnet-online.de>
Feb  7 21:33:56 nss postfix/smtpd[11590]: disconnect from localhost.localdomain[127.0.0.1]
Feb  7 21:33:56 nss postfix/qmgr[10037]: 6921311587C5: from=<django@mnet-mail.de>, size=2376, nrcpt=1 (queue active)
Feb  7 21:33:56 nss amavis[16872]: (16872-15) FWD via SMTP: <django@mnet-mail.de> -> <michael@nausch.org>,BODY=7BIT 250 2.6.0 Ok, id=16872-15, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 6921311587C5
Feb  7 21:33:56 nss amavis[16872]: (16872-15) Passed CLEAN, [212.18.0.10] [88.217.187.21] <django@mnet-mail.de> -> <michael@nausch.org>, Message-ID: <20090207213353.lo18hy6z6s8ow8c8@webmail.mnet-online.de>, mail_id: zsKnoq9aUnu9, Hits: 0.685, size: 1933, queued_as: 6921311587C5, 479 ms
Feb  7 21:33:56 nss postfix/smtpd[11549]: disconnect from mail-out.m-online.net[212.18.0.10]
Feb  7 21:33:56 nss amavis[16872]: (16872-15) TIMING [total 483 ms] - SMTP greeting: 2 (0%)0, SMTP EHLO: 0 (0%)0, SMTP pre-MAIL: 0 (0%)0, SMTP pre-DATA-flush: 2 (0%)1, SMTP DATA: 14 (3%)4, check_init: 1 (0%)4, digest_hdr: 0 (0%)4, digest_body: 0 (0%)4, gen_mail_id: 0 (0%)4, mime_decode: 6 (1%)6, get-file-type1: 9 (2%)7, decompose_part: 1 (0%)8, parts_decode: 0 (0%)8, check_header: 2 (0%)8, AV-scan-1: 2 (0%)9, spam-wb-list: 1 (0%)9, SA parse: 3 (1%)9, SA check: 393 (81%)91, update_cache: 5 (1%)92, decide_mail_destiny: 1 (0%)92, fwd-connect: 12 (3%)94, fwd-xforward: 0 (0%)94, fwd-mail-pip: 8 (2%)96, fwd-rcpt-pip: 0 (0%)96, fwd-data-chkpnt: 0 (0%)96, write-header: 1 (0%)96, fwd-data-contents: 0 (0%)96, fwd-end-chkpnt: 7 (1%)98, prepare-dsn: 1 (0%)98, main_log_entry: 7 (2%)99, update_snmp: 1 (0%)100, SMTP pre-response: 0 (0%)100, SMTP response: 1 (0%)100, unlink-1-files: 0 (0%)100, rundown: 0 (0%)100
Feb  7 21:33:56 nss lmtpunix[27033]: accepted connection
Feb  7 21:33:56 nss lmtpunix[27033]: lmtp connection preauth'd as postman
Feb  7 21:33:56 nss master[11595]: about to exec /usr/lib/cyrus-imapd/lmtpd
Feb  7 21:33:56 nss lmtpunix[11595]: executed
Feb  7 21:33:56 nss lmtpunix[27033]: IOERROR: fstating sieve script /var/lib/imap/sieve/b/bigchief/defaultbc: No such file or directory
Feb  7 21:33:56 nss lmtpunix[27033]: duplicate_check: <20090207213353.lo18hy6z6s8ow8c8@webmail.mnet-online.de> user.bigchief        0
Feb  7 21:33:56 nss lmtpunix[27033]: duplicate_check: <20090207213353.lo18hy6z6s8ow8c8@webmail.mnet-online.de> user.bigchief        0
Feb  7 21:33:56 nss lmtpunix[27033]: mystore: starting txn 2147483651
Feb  7 21:33:56 nss lmtpunix[27033]: mystore: committing txn 2147483651
Feb  7 21:33:56 nss lmtpunix[27033]: duplicate_mark: <20090207213353.lo18hy6z6s8ow8c8@webmail.mnet-online.de> user.bigchief        1234038836 3086757888
Feb  7 21:33:56 nss lmtpunix[27033]: Delivered: <20090207213353.lo18hy6z6s8ow8c8@webmail.mnet-online.de> to mailbox: user.bigchief
Feb  7 21:33:56 nss postfix/pipe[11593]: 6921311587C5: to=<bigchief@nausch.org>, orig_to=<michael@nausch.org>, relay=cyrus, delay=0.1, delays=0.01/0.01/0/0.08, dsn=2.0.0, status=sent (delivered via cyrus service)
Feb  7 21:33:56 nss postfix/qmgr[10037]: 6921311587C5: removed

In RPM wird uns ein Startupscript mitgeliefert - über dieses starten wir unseren IMAP-Server.

 # service cyrus-imapd start
 cyrus-imapd Datenbanken importieren:                       [  OK  ]
 cyrus-imapd starten:                                       [  OK  ]

Ein Test offenbart uns, ob der Server läuft.

# lsof -i tcp:imap2
COMMAND    PID  USER   FD   TYPE  DEVICE SIZE NODE NAME
cyrus-mas 8008 cyrus   11u  IPv6 2128031       TCP *:imap (LISTEN)
cyrus-mas 8008 cyrus   14u  IPv4 2128033       TCP *:imap (LISTEN)
imapd     8020 cyrus    4u  IPv6 2128031       TCP *:imap (LISTEN)
imapd     8024 cyrus    4u  IPv4 2128033       TCP *:imap (LISTEN)
imapd     8052 cyrus    4u  IPv6 2128031       TCP *:imap (LISTEN)
imapd     8053 cyrus    4u  IPv4 2128033       TCP *:imap (LISTEN)
imapd     8094 cyrus    4u  IPv6 2128031       TCP *:imap (LISTEN)
imapd     8095 cyrus    4u  IPv6 2128031       TCP *:imap (LISTEN)
imapd     8096 cyrus    4u  IPv6 2128031       TCP *:imap (LISTEN)
imapd     8097 cyrus    4u  IPv4 2128033       TCP *:imap (LISTEN)
imapd     8098 cyrus    4u  IPv4 2128033       TCP *:imap (LISTEN)
imapd     8099 cyrus    4u  IPv4 2128033       TCP *:imap (LISTEN)

Übder den Port 143 bzw. der Angabe imap2 können wir via telnet mit unseren IMAP-Server verbinden.

# telnet nss imap2
Trying ::1...
Connected to nss.nausch.org (::1).
Escape character is '^]'.
* OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID] nss.nausch.org Cyrus IMAP4 v2.3.7-Invoca-RPM-2.3.7-2.el5 server ready
^]
telnet> quit
Connection closed.

Damit der imap2-Daemon automatisch bei jedem Systemstart startet kann die Einrichtung des Start-Scriptes über folgenden Befehle erreicht werden:

 # chkconfig cyrus-imapd on

Die Überprüfungung ob der IMAP-Server wirklich bei jedem Systemstart automatisch mit gestartet werden, erfolgt durch:

 # chkconfig --list | grep imap
 cyrus-imapd     0:Aus   1:Aus   2:Ein   3:Ein   4:Ein   5:Ein   6:Aus

Mit dem Programm imtest aus dem Paket cyrus-imapd-utils können wir den Zugriff auf unseren IMAP-Server testen.

[luser@nss ~]$ imtest imap
S: * OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID] nss.nausch.org Cyrus IMAP4 v2.3.7-Invoca-RPM-2.3.7-2.el5 server ready
C: C01 CAPABILITY
S: * CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY SORT SORT=MODSEQ THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE CATENATE CONDSTORE IDLE LISTEXT LIST-SUBSCRIBED X-NETSCAPE URLAUTH
S: C01 OK Completed
Please enter your password: 
C: L01 LOGIN luser {12}
S: + go ahead
C: <omitted>
S: L01 OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID LOGINDISABLED ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY SORT SORT=MODSEQ THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE CATENATE CONDSTORE IDLE LISTEXT LIST-SUBSCRIBED X-NETSCAPE URLAUTH] User logged in
Authenticated.
Security strength factor: 0
C: logout
* BYE LOGOUT received
C: OK Completed
Connection closed.

cyradm

Zur Verwaltung unserer Mailboxen steht und cyradm aus dem Paket cyrus-imapd-utils zur Verfügung. Dank unserer Systemvorgaben in der /etc/imapd.conf beschränkt sich jedoch die Arbeit hier auf sehr sehr wenig.

Gestartet wird der Zuzgang von der Konsole über:

# cyradm -auth login nausch.org -user cyrus
IMAP Password: 
nausch.org> 

Die Authentifizierung läuft dabei via saslauth gegen unseren LDAP-Server. Eine Übersicht der möglichen Befehle erhält man durch Eingabe von help oder einem ?.

nausch.org> ?
authenticate, login, auth         authenticate to server
chdir, cd                         change current directory
createmailbox, create, cm         create mailbox
deleteaclmailbox, deleteacl, dam  remove ACLs from mailbox
deletemailbox, delete, dm         delete mailbox
disconnect, disc                  disconnect from current server
exit, quit                        exit cyradm
help, ?                           show commands
info                              display mailbox/server metadata
listacl, lam, listaclmailbox      list ACLs on mailbox
listmailbox, lm                   list mailboxes
listquota, lq                     list quotas on specified root
listquotaroot, lqr, lqm           show quota roots and quotas for mailbox
mboxcfg, mboxconfig               configure mailbox
reconstruct                       reconstruct mailbox (if supported)
renamemailbox, rename, renm       rename (and optionally relocate) mailbox
server, servername, connect       show current server or connect to server
setaclmailbox, sam, setacl        set ACLs on mailbox
setinfo                           set server metadata
setquota, sq                      set quota on mailbox or resource
subscribe, sub                    subscribe to a mailbox
unsubscribe, unsub                unsubscribe from a mailbox
version, ver                      display version info of current server
xfermailbox, xfer                 transfer (relocate) a mailbox to a different server

Wollte man eine neue Mailbox selber anlegen so benutzt man cm oder createmailbox.

 nausch.org> cm user/username

Dies brauchen wir ja nicht per Hand erledigen, da dies automatisch passiert, sobald eine eMail von Postfix an den Cyrus-IMAP-Server übergeben wird, oder sich der User mit dem IMAP-server verbindet. Damit eine Mailbox gelöscht werden kann, muss zuerst die Berechtigung für den Administrator cyrus übergeben werden.

 nausch.org> sam user/testuser cyrus all
 nausch.org> dm user/testuser

Die Quota einer Mailbox frägt man mittels lq ab.

 nausch.org> lq user/django
 STORAGE 682958/2048000 (33.34755859375%)

Verändert wird die Quota mittels sq.

nausch.org> sq user/django 4096000
quota:4096000
nausch.org> lq user/django
STORAGE 682963/4096000 (16.6739013671875%)

GUIs für cyradm

Als mögliche Alternative könnte man auch Web-cyradm oder Openmailadmin verwenden. Doch eigentlich ist das für unseren Anwendungsfall eher nur ein Gimmick und Dank unserer Konfigurationsoptionen in der /etc/imapd.conf brauchen wir derartigen Overhead gar nicht.


1)
Mail Delivery Agent
2)
Post Office Protokoll 3
3)
Internet Message Access Protokoll
Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
  • centos/mailserver/der_cyrus_imap-server.txt
  • Zuletzt geändert: 20.04.2018 10:34.
  • (Externe Bearbeitung)