Der Cyrus Hochleistungs-Mailserver mit Unterstützung für IMAP und SIEVE
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.
Installation
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
Konfiguration
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
Programmstart
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.
automatisches Starten des Dienste beim Systemstart
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
System-/Logintest mit imtest
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.
Cyrus-Administration
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.