Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
centos:mail_c6:cyrus_c6 [22.11.2013 11:29. ] – [SASL-Mappings] djangocentos:mail_c6:cyrus_c6 [20.04.2018 10:50. ] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== Der Cyrus Hochleistungs-Mailserver mit Unterstützung für IMAP und SIEVE unter CentOS 6.x ======
 +{{:centos:cyrus.jpg?100 |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 MDA((**M**ail **D**elivery **A**gent)). Er unterstützt neben dem **POP3**((**P**ost **O**ffice **P**rotokoll 3)) auch das Protokoll **IMAP**((**I**nternet **M**essage **A**ccess **P**rotokoll)), 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 [[centos:mailserver:start|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((**M**ail **D**elivery **A**gent)) nehmen wir mit Hilfe unseres Paketmanagers **yum** vor. Neben dem eigentlichen Programmpaket **cyrus-imapd** kommt noch das Paket **cyrus-imapd-utils** zum Einsatz. 
 +
 +   # yum install cyrus-imapd cyrus-imapd-utils -y
 +
 +Was uns die beiden Programmpakete mitbringen können wir bei Bedarf den Angaben im jeweiligen RPM entnehmen.
 +
 +==== cyrus-imapd ====
 +   # rpm -qil cyrus-imapd
 +<code>Name        : cyrus-imapd                  Relocations: (not relocatable)
 +Version     : 2.3.16                            Vendor: CentOS
 +Release     : 6.el6_1.4                     Build Date: Thu 01 Dec 2011 06:24:38 PM CET
 +Install Date: Mon 26 Dec 2011 10:27:26 PM CET      Build Host: c6b5.bsys.dev.centos.org
 +Group       : System Environment/Daemons    Source RPM: cyrus-imapd-2.3.16-6.el6_1.4.src.rpm
 +Size        : 45641427                         License: BSD
 +Signature   : RSA/SHA1, Wed 07 Dec 2011 06:51:07 PM CET, Key ID 0946fca2c105b9de
 +Packager    : CentOS BuildSystem <http://bugs.centos.org>
 +URL         : http://cyrusimap.web.cmu.edu/
 +Summary     : A high-performance mail server with IMAP, POP3, NNTP and SIEVE support
 +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 file system 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/pki/cyrus-imapd/cyrus-imapd.pem
 +/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_dbtool
 +/usr/lib/cyrus-imapd/cyr_df
 +/usr/lib/cyrus-imapd/cyr_expire
 +/usr/lib/cyrus-imapd/cyr_synclog
 +/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/make_sha1
 +/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/sievec
 +/usr/lib/cyrus-imapd/sieved
 +/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/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.16
 +/usr/share/doc/cyrus-imapd-2.3.16/COPYRIGHT
 +/usr/share/doc/cyrus-imapd-2.3.16/README
 +/usr/share/doc/cyrus-imapd-2.3.16/README.autocreate-cyrus-2.3
 +/usr/share/doc/cyrus-imapd-2.3.16/README.autosievefolder
 +/usr/share/doc/cyrus-imapd-2.3.16/README.rpm
 +/usr/share/doc/cyrus-imapd-2.3.16/altnamespace.html
 +/usr/share/doc/cyrus-imapd-2.3.16/anoncvs.html
 +/usr/share/doc/cyrus-imapd-2.3.16/bugs.html
 +/usr/share/doc/cyrus-imapd-2.3.16/changes.html
 +/usr/share/doc/cyrus-imapd-2.3.16/conf
 +/usr/share/doc/cyrus-imapd-2.3.16/conf/cmu-backend.conf
 +/usr/share/doc/cyrus-imapd-2.3.16/conf/cmu-frontend.conf
 +/usr/share/doc/cyrus-imapd-2.3.16/conf/normal.conf
 +/usr/share/doc/cyrus-imapd-2.3.16/conf/prefork.conf
 +/usr/share/doc/cyrus-imapd-2.3.16/conf/small.conf
 +/usr/share/doc/cyrus-imapd-2.3.16/contrib
 +/usr/share/doc/cyrus-imapd-2.3.16/cyrusv2.mc
 +/usr/share/doc/cyrus-imapd-2.3.16/faq.html
 +/usr/share/doc/cyrus-imapd-2.3.16/feedback.html
 +/usr/share/doc/cyrus-imapd-2.3.16/index.html
 +/usr/share/doc/cyrus-imapd-2.3.16/install-admin-mb.html
 +/usr/share/doc/cyrus-imapd-2.3.16/install-auth.html
 +/usr/share/doc/cyrus-imapd-2.3.16/install-compile.html
 +/usr/share/doc/cyrus-imapd-2.3.16/install-configure.html
 +/usr/share/doc/cyrus-imapd-2.3.16/install-murder.html
 +/usr/share/doc/cyrus-imapd-2.3.16/install-netnews.html
 +/usr/share/doc/cyrus-imapd-2.3.16/install-perf.html
 +/usr/share/doc/cyrus-imapd-2.3.16/install-prereq.html
 +/usr/share/doc/cyrus-imapd-2.3.16/install-replication.html
 +/usr/share/doc/cyrus-imapd-2.3.16/install-sieve.html
 +/usr/share/doc/cyrus-imapd-2.3.16/install-snmpmon.html
 +/usr/share/doc/cyrus-imapd-2.3.16/install-testing.html
 +/usr/share/doc/cyrus-imapd-2.3.16/install-upgrade.html
 +/usr/share/doc/cyrus-imapd-2.3.16/install-virtdomains.html
 +/usr/share/doc/cyrus-imapd-2.3.16/install.html
 +/usr/share/doc/cyrus-imapd-2.3.16/internal
 +/usr/share/doc/cyrus-imapd-2.3.16/internal/bytecode
 +/usr/share/doc/cyrus-imapd-2.3.16/internal/database-formats.html
 +/usr/share/doc/cyrus-imapd-2.3.16/internal/hacking
 +/usr/share/doc/cyrus-imapd-2.3.16/internal/internationalization.html
 +/usr/share/doc/cyrus-imapd-2.3.16/internal/locking
 +/usr/share/doc/cyrus-imapd-2.3.16/internal/mailbox-format.html
 +/usr/share/doc/cyrus-imapd-2.3.16/internal/master-state-machine.fig
 +/usr/share/doc/cyrus-imapd-2.3.16/internal/prot-events
 +/usr/share/doc/cyrus-imapd-2.3.16/internal/prot.html
 +/usr/share/doc/cyrus-imapd-2.3.16/internal/replication_examples
 +/usr/share/doc/cyrus-imapd-2.3.16/internal/replication_protocol
 +/usr/share/doc/cyrus-imapd-2.3.16/internal/specials
 +/usr/share/doc/cyrus-imapd-2.3.16/internal/uuid
 +/usr/share/doc/cyrus-imapd-2.3.16/internal/var_directory_structure
 +/usr/share/doc/cyrus-imapd-2.3.16/mailing-list.html
 +/usr/share/doc/cyrus-imapd-2.3.16/man.html
 +/usr/share/doc/cyrus-imapd-2.3.16/murder.fig
 +/usr/share/doc/cyrus-imapd-2.3.16/murder.png
 +/usr/share/doc/cyrus-imapd-2.3.16/netnews.fig
 +/usr/share/doc/cyrus-imapd-2.3.16/netnews.png
 +/usr/share/doc/cyrus-imapd-2.3.16/notes.html
 +/usr/share/doc/cyrus-imapd-2.3.16/os.html
 +/usr/share/doc/cyrus-imapd-2.3.16/overview.html
 +/usr/share/doc/cyrus-imapd-2.3.16/questions.html
 +/usr/share/doc/cyrus-imapd-2.3.16/readme.html
 +/usr/share/doc/cyrus-imapd-2.3.16/sieve-protocol.html
 +/usr/share/doc/cyrus-imapd-2.3.16/sieve.html
 +/usr/share/doc/cyrus-imapd-2.3.16/specs.html
 +/usr/share/doc/cyrus-imapd-2.3.16/text
 +/usr/share/doc/cyrus-imapd-2.3.16/text/altnamespace
 +/usr/share/doc/cyrus-imapd-2.3.16/text/anoncvs
 +/usr/share/doc/cyrus-imapd-2.3.16/text/bugs
 +/usr/share/doc/cyrus-imapd-2.3.16/text/changes
 +/usr/share/doc/cyrus-imapd-2.3.16/text/faq
 +/usr/share/doc/cyrus-imapd-2.3.16/text/feedback
 +/usr/share/doc/cyrus-imapd-2.3.16/text/index
 +/usr/share/doc/cyrus-imapd-2.3.16/text/install
 +/usr/share/doc/cyrus-imapd-2.3.16/text/install-admin-mb
 +/usr/share/doc/cyrus-imapd-2.3.16/text/install-auth
 +/usr/share/doc/cyrus-imapd-2.3.16/text/install-compile
 +/usr/share/doc/cyrus-imapd-2.3.16/text/install-configure
 +/usr/share/doc/cyrus-imapd-2.3.16/text/install-murder
 +/usr/share/doc/cyrus-imapd-2.3.16/text/install-netnews
 +/usr/share/doc/cyrus-imapd-2.3.16/text/install-perf
 +/usr/share/doc/cyrus-imapd-2.3.16/text/install-prereq
 +/usr/share/doc/cyrus-imapd-2.3.16/text/install-replication
 +/usr/share/doc/cyrus-imapd-2.3.16/text/install-sieve
 +/usr/share/doc/cyrus-imapd-2.3.16/text/install-snmpmon
 +/usr/share/doc/cyrus-imapd-2.3.16/text/install-testing
 +/usr/share/doc/cyrus-imapd-2.3.16/text/install-upgrade
 +/usr/share/doc/cyrus-imapd-2.3.16/text/install-virtdomains
 +/usr/share/doc/cyrus-imapd-2.3.16/text/mailing-list
 +/usr/share/doc/cyrus-imapd-2.3.16/text/man
 +/usr/share/doc/cyrus-imapd-2.3.16/text/notes
 +/usr/share/doc/cyrus-imapd-2.3.16/text/os
 +/usr/share/doc/cyrus-imapd-2.3.16/text/overview
 +/usr/share/doc/cyrus-imapd-2.3.16/text/questions
 +/usr/share/doc/cyrus-imapd-2.3.16/text/readme
 +/usr/share/doc/cyrus-imapd-2.3.16/text/sieve
 +/usr/share/doc/cyrus-imapd-2.3.16/text/sieve-protocol
 +/usr/share/doc/cyrus-imapd-2.3.16/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_dbtool.8.gz
 +/usr/share/man/man8/cyr_df.8.gz
 +/usr/share/man/man8/cyr_expire.8.gz
 +/usr/share/man/man8/cyr_synclog.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.8cyrus.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/make_sha1.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.8cyrus.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/meta
 +/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
 +</code>
 +
 +==== cyrus-imapd-utils ====
 +   # rpm -qil cyrus-imapd-utils
 +<code>Name        : cyrus-imapd-utils            Relocations: (not relocatable)
 +Version     : 2.3.16                            Vendor: CentOS
 +Release     : 6.el6_1.4                     Build Date: Thu 01 Dec 2011 06:24:38 PM CET
 +Install Date: Mon 26 Dec 2011 10:27:06 PM CET      Build Host: c6b5.bsys.dev.centos.org
 +Group       : Applications/System           Source RPM: cyrus-imapd-2.3.16-6.el6_1.4.src.rpm
 +Size        : 733204                           License: BSD
 +Signature   : RSA/SHA1, Wed 07 Dec 2011 06:51:10 PM CET, Key ID 0946fca2c105b9de
 +Packager    : CentOS BuildSystem <http://bugs.centos.org>
 +URL         : http://cyrusimap.web.cmu.edu/
 +Summary     : Cyrus IMAP server administration utilities
 +Description :
 +The cyrus-imapd-utils package contains administrative tools for the
 +Cyrus IMAP server. It can be installed on systems other than the
 +one running the server.
 +/usr/bin/cyradm
 +/usr/bin/imtest
 +/usr/bin/installsieve
 +/usr/bin/lmtptest
 +/usr/bin/mupdatetest
 +/usr/bin/nntptest
 +/usr/bin/notifytest
 +/usr/bin/pop3test
 +/usr/bin/sieveshell
 +/usr/bin/sivtest
 +/usr/bin/smtptest
 +/usr/bin/synctest
 +/usr/lib64/perl5/vendor_perl/Cyrus
 +/usr/lib64/perl5/vendor_perl/Cyrus/IMAP
 +/usr/lib64/perl5/vendor_perl/Cyrus/IMAP.pm
 +/usr/lib64/perl5/vendor_perl/Cyrus/IMAP/Admin.pm
 +/usr/lib64/perl5/vendor_perl/Cyrus/IMAP/IMSP.pm
 +/usr/lib64/perl5/vendor_perl/Cyrus/IMAP/Shell.pm
 +/usr/lib64/perl5/vendor_perl/Cyrus/SIEVE
 +/usr/lib64/perl5/vendor_perl/Cyrus/SIEVE/managesieve.pm
 +/usr/lib64/perl5/vendor_perl/auto
 +/usr/lib64/perl5/vendor_perl/auto/Cyrus
 +/usr/lib64/perl5/vendor_perl/auto/Cyrus/IMAP
 +/usr/lib64/perl5/vendor_perl/auto/Cyrus/IMAP/IMAP.so
 +/usr/lib64/perl5/vendor_perl/auto/Cyrus/SIEVE
 +/usr/lib64/perl5/vendor_perl/auto/Cyrus/SIEVE/managesieve
 +/usr/lib64/perl5/vendor_perl/auto/Cyrus/SIEVE/managesieve/managesieve.so
 +/usr/share/doc/cyrus-imapd-utils-2.3.16
 +/usr/share/doc/cyrus-imapd-utils-2.3.16/Changes
 +/usr/share/doc/cyrus-imapd-utils-2.3.16/README
 +/usr/share/doc/cyrus-imapd-utils-2.3.16/examples
 +/usr/share/doc/cyrus-imapd-utils-2.3.16/examples/auditmbox.pl
 +/usr/share/doc/cyrus-imapd-utils-2.3.16/examples/imapcollate.pl
 +/usr/share/doc/cyrus-imapd-utils-2.3.16/examples/imapdu.pl
 +/usr/share/doc/cyrus-imapd-utils-2.3.16/examples/test-imsp.pl
 +/usr/share/man/man1/cyradm.1.gz
 +/usr/share/man/man1/imtest.1.gz
 +/usr/share/man/man1/installsieve.1.gz
 +/usr/share/man/man1/lmtptest.1.gz
 +/usr/share/man/man1/mupdatetest.1.gz
 +/usr/share/man/man1/nntptest.1.gz
 +/usr/share/man/man1/pop3test.1.gz
 +/usr/share/man/man1/sieveshell.1.gz
 +/usr/share/man/man1/sivtest.1.gz
 +/usr/share/man/man1/smtptest.1.gz
 +/usr/share/man/man3/Cyrus::IMAP.3pm.gz
 +/usr/share/man/man3/Cyrus::IMAP::Admin.3pm.gz
 +/usr/share/man/man3/Cyrus::IMAP::IMSP.3pm.gz
 +/usr/share/man/man3/Cyrus::IMAP::Shell.3pm.gz
 +/usr/share/man/man3/Cyrus::SIEVE::managesieve.3pm.gz
 +</code>
 +===== Server-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
 +<file bash /etc/imapd.conf>
 +# Defaultkonfigurationsdatei aus dem RPM-Paket cyrus-imapd angepasst an die
 +# lokalen Rahmenbedingungen und versehen mit Kommentaren
 +# Django : 2011-12-08
 +
 +# 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. Dies ist auch die
 +# Absenderadresse, die bei Versenden von Empfangsbestätigungen von sieve verwendet wird.
 +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. In diesem Verzeichnis wird nach den sieve-Scripten gesucht.
 +sievedir: /var/lib/imap/sieve
 +
 +# Pfadangaben zum Befehl sendmail. Sieve verschickt über den Befehl sendmail 
 +# Reject-, Redirect- und Vacation-Nachrichten
 +sendmail: /usr/sbin/sendmail
 +
 +# Definition des Hostnamens der bei der Begrüßungsmeldung des POP, IMAP und LMTP Daemon 
 +# ausgegeben wird.
 +servername: imap.nausch.org
 +
 +# Festlegung welche Daten des Servers bei der Begrüßungsmeldung und des Funktionsumfanges
 +# des Servers ausgegeben werden sollen.
 +#     "off" = keinerlei Ausgabe
 +#     "min" = Ausgabe des Servernamens bei der Begrüßung, Keine Angaben zum Funktionsumfang
 +#             des Servers 
 +#     "on"  = Ausgabe des Servernamens und der Version bei der Begrüßung; Ausgabe des
 +#             Cyrus-Version bei der Abfrage der Fähigkeiten
 +serverinfo: min
 +
 +# Für die IMAP-Verzeichnisstrukturen werden Hash-Werte gebildet, was den Zugriff
 +# wesentlich beschleunigt. Die Verzeichnisstruktur wird dabei wesentlich fein-
 +# granularer, so wird aus /var/spool/imap/user/django /var/spool/imap/d/user/django
 +hashimapspool: yes
 +
 +# anonymen Benutzerzugang sperren, bedeutet, wie der Name schon sagt, 
 +# dass sich alle Benutzer authentifizieren müssen. 
 +allowanonymouslogin: no
 +
 +# Plaintexteingabe beim Lpgin erlauben? Nur zum Testen und Spielen von web-cyradm aktiviert.
 +allowplaintext: no
 +
 +# Virtuellen Domain-Support aktivieren, d.h. Cyrus erzeugt die neuen Nutzerpostfächer
 +# jeweils unter der betreffenden Domainstruktur
 +virtdomains: yes
 +
 +# Unqualifizierte Postfächer werden unterhalb des des user-Verzeichnisses der
 +# default-Domäne angeordnet
 +# defaultdomain: nausch.org
 +
 +# Nutzung des auxprop-Plugins zur Benutzer-Authentifizierung
 +sasl_pwcheck_method: auxprop
 +# Nutzung des ldapdb-Treibers für den Zugriff auf einen OpenLDAP-Server
 +sasl_auxprop_plugin: ldapdb
 +
 +# Nutzerauthentifizierung mit Hilfe folgender Verfahren:
 +#                         Klartextpasswörtern
 +#                         verschlüsselten Passwörtern (CRAM-MD5 oder DIGEST-MD5)
 +#sasl_mech_list: DIGEST-MD5 CRAM-MD5
 +sasl_mech_list: DIGEST-MD5 CRAM-MD5 PLAIN LOGIN
 +
 +# Definition der Anbindung an unseren zentralen LDAP-Server
 +sasl_ldapdb_uri: ldap://ldap.dmz.nausch.org
 +sasl_ldapdb_id: SASLSystemUser
 +sasl_ldapdb_pw: klais-is-a-geek!
 +sasl_ldapdb_mech: DIGEST-MD5
 +
 +# Konvertieren der Usernamen in Kleinbuchstaben vor dem Login/Authentifizierung
 +username_tolower: yes
 +
 +# lmtpd gibt einen permaneten Fehlercode zurück, wenn die Quota einer User-Mailbox 
 +# ausgereizt wurde. 
 +lmtp_overquota_perm_failure: yes
 +
 +# lmtpd konvertiert automatisch Empfängeradressen in Kleinbuchstaben
 +lmtp_downcase_rcpt: yes
 +
 +# Ein Wert größer als Null setzt einen Quo in kByte. Ein Wert der nicht 0 ist, 
 +# erlaubt dem Benutzer das anlegen seiner eigenen INBOX
 +autocreatequota: 2048000
 +
 +# Sobald 90% der Quota erreicht ist, gibt der Server Warnmeldungen aus
 +quotawarn: 90
 +
 +# Postfach wird angelegt, wenn per lmtpd eine Nachricht angeliefert wird,
 +# für die noch kein Inbox besteht
 +createonpost: no
 +
 +# 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
 +autocreateinboxfolders: Archives | Drafts | Sent | Trash
 +
 +# Loggt sich ein User neu an, oder es wird eine Nachricht per lmtpd 
 +# angeliefert, für das noch kein Account besteht, so werden automatisch 
 +# folgende Ordner abboniert
 +autosubscribeinboxfolders: Archives | Drafts | Sent | Trash
 +
 +# 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
 +
 +# Nach 30 Minuten 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: yes
 +
 +# TLS-Einstellungen für IMAP over SSL (Port 993)
 +tls_cert_file: /etc/pki/cyrus-imapd/servercert.pem
 +tls_key_file: /etc/pki/cyrus-imapd/serverkey.pem
 +tls_ca_file: /etc/pki/cyrus-imapd/cacert-root.pem
 +
 +# uncomment this if you're operating in a DSCP environment (RFC-4594)
 +# qosmarking: af13
 +</file>
 +
 +==== 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
 +<file bash /etc/cyrus.conf>
 +# Defaultkonfigurationsdatei aus dem RPM-Paket cyrus-imapd angepasst an die
 +# lokalen Rahmenbedingungen und versehen mit Kommentaren
 +# Django : 2011-12-08
 +
 +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
 +  # Django : 2011-12-08 
 +  # nachfolgende drei Zeilen deaktiviert, da wir vorerst "nur" die beiden
 +  # Dienste imap und sieve nutzen wollen und werden
 +  #  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
 +  # Django : 2011-12-08 weitergabe des MTA (Postfix) an den MDA (Cyrus) über einen
 +  # lokalen UNIX-Dateisocket, sofern sich der MTA und MDA auf einem Server befindet.
 +  # lmtpunix      cmd="lmtpd" listen="/var/lib/imap/socket/lmtp" prefork=1
 +  #
 +  # Befindet sich der MTA und MDA auf zwei getrennten Servern, so wird die 
 +  # Anbindung über eine TCP/IP-Verbindung realisiert.
 +  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
 +  # Django : 2011-12-08
 +  # Informationen über eintreffende Nachrichten an ein weiteres Postfach
 +  # weiterleiten.
 +  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
 +  # Django : 2011-12-08 
 +  # Damit bei einer Suche in den Mailboxen von einem Client nicht alle Mails einzeln 
 +  # aufgerufen werden und durchsucht werden müssen, nutzen wir den Dienst *squatter*,
 +  # der einen Index der Mailboxen in regelmäßigen Abständen (30 Minuten) erstellt.
 +  squatter      cmd="squatter -r *" period=30
 +}</file>
 +==== Postfix ====
 +Damit unser Mailserver Postfix, der die Nachrichten von fremden Mailserver annimmt, bewertet und prüft, auch an unser internes Postoffice weiterleiten kann, sind noch Ergänzungen an der Konfiguration des Postfix-Mailservers notwendig.
 +
 +Hier kommt es nun im Detail darauf an, auf welchen Hosts unser Postfix-SMTP-Server und wo der Cyrus-IMAP-Server betrieben wird. 
 +=== MTA und MDA auf gleichem Host ===
 +Als erstes betrachten wir den ganzen Konfogurationsaufwand, wenn beide Server auf einem Host betrieben werden.
 +
 +== master.conf ==
 +In der //**/etc/postfix/master.cf**// ist für **cyrus** mit der Zustellmethode **deliver** bereits alles vorbereitet. 
 +   # vim /etc/postfix/master.cf
 +<code bash>...
 +# Django : 2009-02-07 Aktiviert für MDA-Support cyrus aktiviert
 +# Cyrus 2.1.5 (Amos Gouaux)
 +# Also specify in main.cf: cyrus_destination_recipient_limit=1
 +cyrus     unix  -                               pipe
 +  user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -r ${sender} -m ${extension} ${user}
 +...
 +</code>
 +== main.cf ==
 +In der //**/etc/postfix/main.cf**// ändern wir nunmehr folgende Optionen ab. 
 +   # vim /etc/postfix/main.cf
 +<code>...
 +# Django : 2009-02-07 Aktiviert für MDA-Support cyrus aktiviert
 +mailbox_transport = cyrus
 +cyrus_destination_recipient_limit=1
 +...
 +</code>
 +
 +
 +=== MTA und MDA auf getrennten Hosts ===
 +Laufen die beiden Mailserverkomponenten auf getrennten Hosts, so ist der nötige Konfigurationsaufwand geringfügig größer. Nachfolgend gehen wir nun auf diese Details genauer ein.
 +
 +== main.cf ==
 +Für die individuelle Weiterleitung unserer Nachrichten benutzen wir die beiden Lookup-Tabellen:
 +  - **transport_maps**
 +  - **relay_domains**
 +Im ersten Schritt erweitern wir nun unsere Postfix-Konfigurationsdatei um folgende Zeilen. Hierzu nutzen wir wie immer den Editor unserer Wahl, so z.B. **vim**.
 +   # vim /etc/postfix/main.cf
 +<code bash># Django : 2012-02-06
 +# Zur Weitergabe der angenommenen Nachrichten an das backend-System (Cyrus-IMAP-Server) verwenden wir
 +# eine separate Tabelle zur individuellen Weiterleitung. 
 +relay_domains = btree:/etc/postfix/relay_domains
 +
 +# Lookup-Tabelle zum Aktivieren einer alternativen Mailrouting bei der Zustellung an einen weiteren Mailserver
 +transport_maps = btree:/etc/postfix/transport_maps, btree:/etc/postfix/relay_domains
 +</code>
 +
 +Die gerade definierten Lookup-Tabellen legen wir nun als nächstes an.
 +  - **transport_maps**: Lookup-Tabelle zum Aktivieren einer alternativen Mailrouting bei der Zustellung an einen weiteren Mailserver <code> # vim /etc/postfix/transport_maps</code>  <file bash># Kapitel 5.2.5 transport-Tabelle: Abweichende Zustellung
 +# Lookup-Tabelle zum Aktivieren einer alternativen Mailrouting bei der Zustellung an einen weiteren Mailserver
 +# Nach dem Ändern und/oder Erweitern der Tabelle, muß noch mittels  $ postmap /etc/postfix/transport_maps
 +# die zugehörige Datenbank erzeugt werden.
 +#
 +# Alle eMails, die an Subdomains von nausch.org gerichtet sind ("." am Anfang der Zeile!)
 +# werden an den/die Mailserver von intra.nausch.org (MX-Records) weitergeleitet. (keine "["-Klammern!)
 +#.nausch.org                            smtp:intra.nausch.org
 +
 +# Mails an backup.nausch.org werden an den Mailserver (A-Record) auf Port 25 mit Namen mail.intra.nausch.org geschickt.
 +#backup.nausch.org                      smtp:[mail.intra.nausch.org]:25
 +</file>
 +  - **relay_domains**: Lookup-Tabelle zur Definition der Domänen, für die unser Mailserver Nachricht annehmen soll. <code> # vim /etc/postfix/relay_domains</code> <file bash># Kapitel 12.1 Postfix als eingehendes Mailrelay vor einem anderen Server
 +# Lookup-Tabelle zur Definition der Domänen, für die unser Mailserver Nachricht annehmen soll.
 +# Nach dem Ändern und/oder Erweitern der Tabelle, muß noch mittels  $ postmap /etc/postfix/relay_domains
 +# die zugehörige Datenbank erzeugt werden.
 +#
 +# Relevanz ost erst eimal nur die erste Spalte. Die zweite Spalte dient nur zum Erhalten der Tabellenstruktur und
 +# kann daher z.B. als Hinweisfled zum Dokumentieren verwendet werden.
 +# Beispiel:
 +# omni128.de                    meine eigene Domäne</file>
 +  - **transport_maps __UND__ relay_domains**: Da wir sowieso beide Informationen benötigen können wir auch gleich direkt den jeweiligen Transportweg direkt in der zweiten Spalte der relay_domains-Tabelle hierzu verwenden. <code> # vim /etc/postfix/relay_domains</code> <file bash># Kapitel 12.1 Postfix als eingehendes Mailrelay vor einem anderen Server
 +# Lookup-Tabelle zur Definition der Domänenm für die unser Mailserver Nachricht annehmen soll.
 +# Nach dem Ändern und/oder Erweitern der Tabelle, muß noch mittels  $ postmap /etc/postfix/relay_domains
 +# die zugehörige Datenbank erzeugt werden.
 +#
 +# Relevanz ost erst eimal nur die erste Spalte. Die zweite Spalte dient nur zum Erhalten der Tabellenstruktur und
 +# kann daher z.B. als Hinweisfled zum Dokumentieren verwendet werden.
 +# Beispiel:
 +# omni128.de                    meine eigene Domäne
 +#
 +# Da für jede Domäne auch ein Transportweg definiert werden muss, erledigen wir die Definition des selbigen gleich 
 +# hier in dieser Tabelle, in dem wir die Spalte zwei hierzu verwenden.
 +nausch.org                      lmtp:[imap.intra.nausch.org]:24
 +omni128.de                      lmtp:[imap.intra.nausch.org]:24
 +wetterstation-pliening.info     lmtp:[imap.intra.nausch.org]:24
 +ebersberger-liedersammlung.de   lmtp:[imap.intra.nausch.org]:24</file>
 +
 +== master.conf ==
 +In der //**/etc/postfix/master.cf**// ist für die Zustellung an unseren **Cyrus-IMAP-Server** mit dem Zustellprotokoll **lmtp** bereits alles vorbereitet. 
 +   # vim /etc/postfix/master.cf
 +<code bash>...
 +local     unix  -                               local
 +...
 +</code>
 +==== iptables-Paketfilterregeln ====
 +In der Regel wird unser IMAP-Hinter einer Firewall stehen und mit Hilfe von **iptables** abgesichert sein. Damit nun unser IMAP-Mailserver Anfragen auf den beiden Ports **143** und **993** auch annehmen kann, tragen wir in der zentralen Konfigurationsdatei //**/etc/sysconfig/iptables**// von iptables am Ende der INPUT-Regeln nachfolgende Zeilen ein.
 +
 +   vim /etc/sysconfig/iptables
 +
 +   # Django : 2011-12-08 Port 143 (IMAP2) und 993 (IMAP over SSL) freigeschaltet
 +   -A INPUT -m state --state NEW -m tcp -p tcp --dport 143 -j ACCEPT
 +   -A INPUT -m state --state NEW -m tcp -p tcp --dport 993 -j ACCEPT
 +   # end
 +
 +Anschließend aktivieren wir die Änderungen an unserem Paketfilter, indem wir den Daemon durchstarten.
 +   # service iptables restart
 +
 +   iptables: Flushing firewall rules:                          OK  ]
 +   iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
 +   iptables: Unloading modules:                                OK  ]
 +   iptables: Applying firewall rules:                          OK  ]
 +
 +===== Authentifizierungs-Konfiguration am IMAP-Server =====
 +Der [[http://cyrusimap.web.cmu.edu/|Cyrus-IMAP-Server]] unterstützt bei der Authentifizierung der unterschiedlichen Nutzer mehrere Authentifizierungsmethoden.
 +
 +<WRAP round tip>Für weitergehende und tiefgreifende Erklärungen zu den Authentifizierungsmöglichkeiten mit Cyrus SASL, sei dem geneigtem Leser die überhaus hilfreiche Dokumentation von [[http://www.heinlein-support.de/upload/mk3/cyrus-sasl.pdf|Authentifizierung mit Cyrus SASL]] von [[http://www.heinlein-support.de|Peer Heinlein]] ans Herz gelegt!</WRAP>
 +
 +Nachfolgend gehen wir auf die wichtigsten drei Varianten ein.
 +  * **cyrus-sasl-plain**: Nutzerauthentifizierung mit Hilfe von Klartextpassworten
 +  * **cyrus-sasl-md5**: Nutzerauthentifizierung mit Hilfe von verschlüsselten Passwörtern (CRAM-MD5 oder DIGEST-MD5) 
 +  * **cyrus-sasl-ldap**: Nutzerauthentifizierung mit Anbindung an einen LDAP-Server
 +Mit Hilfe des Programms **pluginviewer** aus dem PRM **cyrus-sasl** können alle zur Verfügung stehenden und ladbaren  SASL Plugins und deren Einstellungen angezeigt werden.
 +  - Ausgabe der **auxprop-plugins** <code> # pluginviewer -a</code> <code>Installed auxprop mechanisms are:
 +sasldb
 +List of auxprop plugins follows
 +Plugin "sasldb" , API version: 4
 + supports store: yes</code>
 +  - Ausgabe der **Serverseitigen Authentifizierungsplugins (SASL)** <code> # pluginviewer -s</code> <code>Installed SASL (server side) mechanisms are:
 +PLAIN LOGIN ANONYMOUS EXTERNAL
 +List of server plugins follows
 +Plugin "plain" [loaded], API version: 4
 + SASL mechanism: PLAIN, best SSF: 0, supports setpass: no
 + security flags: NO_ANONYMOUS
 + features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION
 +Plugin "login" [loaded], API version: 4
 + SASL mechanism: LOGIN, best SSF: 0, supports setpass: no
 + security flags: NO_ANONYMOUS
 + features:
 +Plugin "anonymous" [loaded], API version: 4
 + SASL mechanism: ANONYMOUS, best SSF: 0, supports setpass: no
 + security flags: NO_PLAINTEXT
 + features: WANT_CLIENT_FIRST</code>
 +  - Ausgabe der **Clientseitigen Authentifizierungsplugins (SASL)** <code> # pluginviewer -c</code> <code>Installed SASL (client side) mechanisms are:
 +PLAIN LOGIN ANONYMOUS EXTERNAL
 +List of client plugins follows
 +Plugin "plain" [loaded], API version: 4
 + SASL mechanism: PLAIN, best SSF: 0
 + security flags: NO_ANONYMOUS
 + features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION
 +Plugin "login" [loaded], API version: 4
 + SASL mechanism: LOGIN, best SSF: 0
 + security flags: NO_ANONYMOUS
 + features: SERVER_FIRST
 +Plugin "anonymous" [loaded], API version: 4
 + SASL mechanism: ANONYMOUS, best SSF: 0
 + security flags: NO_PLAINTEXT
 + features: WANT_CLIENT_FIRST
 +Plugin "EXTERNAL" [loaded], API version: 4
 + SASL mechanism: EXTERNAL, best SSF: 0
 + security flags: NO_ANONYMOUS|NO_PLAINTEXT|NO_DICTIONARY
 + features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION</code>
 +
 +==== cyrus-sasl-plain ====
 +Sofern noch nicht bei der Grundinstallation erfolgt, installieren wir nun das notwendige RPM mit Hilfe von **yum**.
 +   # yum install cyrus-sasl-plain -y
 +
 +Bei Bedarf verrät uns der Aufruf von **rpm -qil** die Inhalte, die wir mit Hilfe des RPM-Paketes installiert haben.
 +   # rpm -qil cyrus-sasl-plain
 +<code>Name        : cyrus-sasl-plain             Relocations: (not relocatable)
 +Version     : 2.1.23                            Vendor: CentOS
 +Release     : 13.el6                        Build Date: Wed 07 Dec 2011 11:02:22 PM CET
 +Install Date: Wed 21 Dec 2011 09:11:29 AM CET      Build Host: c6b18n3.bsys.dev.centos.org
 +Group       : System Environment/Libraries   Source RPM: cyrus-sasl-2.1.23-13.el6.src.rpm
 +Size        : 37616                            License: BSD
 +Signature   : RSA/SHA1, Thu 08 Dec 2011 08:53:00 PM CET, Key ID 0946fca2c105b9de
 +Packager    : CentOS BuildSystem <http://bugs.centos.org>
 +URL         : http://asg.web.cmu.edu/sasl/sasl-library.html
 +Summary     : PLAIN and LOGIN authentication support for Cyrus SASL
 +Description :
 +The cyrus-sasl-plain package contains the Cyrus SASL plugins which support
 +PLAIN and LOGIN authentication schemes.
 +/usr/lib64/sasl2/liblogin.so
 +/usr/lib64/sasl2/liblogin.so.2
 +/usr/lib64/sasl2/liblogin.so.2.0.23
 +/usr/lib64/sasl2/libplain.so
 +/usr/lib64/sasl2/libplain.so.2
 +/usr/lib64/sasl2/libplain.so.2.0.23
 +</code>
 +
 +
 +==== cyrus-sasl-md5 ====
 +Sofern noch nicht bei der Grundinstallation erfolgt, installieren wir nun das notwendige RPM mit Hilfe von **yum**.
 +   # yum install cyrus-sasl-md5 -y
 +
 +Bei Bedarf verrät uns der Aufruf von **rpm -qil** die Inhalte, die wir mit Hilfe des RPM-Paketes installiert haben.
 +   # rpm -qil cyrus-sasl-md5
 +<code>Name        : cyrus-sasl-md5               Relocations: (not relocatable)
 +Version     : 2.1.23                            Vendor: CentOS
 +Release     : 13.el6                        Build Date: Wed 07 Dec 2011 11:02:22 PM CET
 +Install Date: Wed 18 Jan 2012 11:16:58 PM CET      Build Host: c6b18n3.bsys.dev.centos.org
 +Group       : System Environment/Libraries   Source RPM: cyrus-sasl-2.1.23-13.el6.src.rpm
 +Size        : 75024                            License: BSD
 +Signature   : RSA/SHA1, Thu 08 Dec 2011 08:53:18 PM CET, Key ID 0946fca2c105b9de
 +Packager    : CentOS BuildSystem <http://bugs.centos.org>
 +URL         : http://asg.web.cmu.edu/sasl/sasl-library.html
 +Summary     : CRAM-MD5 and DIGEST-MD5 authentication support for Cyrus SASL
 +Description :
 +The cyrus-sasl-md5 package contains the Cyrus SASL plugins which support
 +CRAM-MD5 and DIGEST-MD5 authentication schemes.
 +/usr/lib64/sasl2/libcrammd5.so
 +/usr/lib64/sasl2/libcrammd5.so.2
 +/usr/lib64/sasl2/libcrammd5.so.2.0.23
 +/usr/lib64/sasl2/libdigestmd5.so
 +/usr/lib64/sasl2/libdigestmd5.so.2
 +/usr/lib64/sasl2/libdigestmd5.so.2.0.23
 +</code>
 +==== cyrus-sasl-ldap ====
 +
 +Sofern noch nicht bei der Grundinstallation erfolgt, installieren wir nun das notwendige RPM mit Hilfe von **yum**.
 +   # yum install cyrus-sasl-ldap -y
 +
 +Bei Bedarf verrät uns der Aufruf von **rpm -qil** die Inhalte, die wir mit Hilfe des RPM-Paketes installiert haben.
 +   # rpm -qil cyrus-sasl-ldap
 +<code>Name        : cyrus-sasl-ldap              Relocations: (not relocatable)
 +Version     : 2.1.23                            Vendor: CentOS
 +Release     : 13.el6                        Build Date: Wed 07 Dec 2011 11:02:22 PM CET
 +Install Date: Wed 18 Jan 2012 11:19:41 PM CET      Build Host: c6b18n3.bsys.dev.centos.org
 +Group       : System Environment/Libraries   Source RPM: cyrus-sasl-2.1.23-13.el6.src.rpm
 +Size        : 18784                            License: BSD
 +Signature   : RSA/SHA1, Thu 08 Dec 2011 08:53:06 PM CET, Key ID 0946fca2c105b9de
 +Packager    : CentOS BuildSystem <http://bugs.centos.org>
 +URL         : http://asg.web.cmu.edu/sasl/sasl-library.html
 +Summary     : LDAP auxprop support for Cyrus SASL
 +Description :
 +The cyrus-sasl-ldap package contains the Cyrus SASL plugin which supports using
 +a directory server, accessed using LDAP, for storing shared secrets.
 +/usr/lib64/sasl2/libldapdb.so
 +/usr/lib64/sasl2/libldapdb.so.2
 +/usr/lib64/sasl2/libldapdb.so.2.0.23
 +</code>
 +
 +==== Prüfung ====
 +Mit Hilfe des Programms **pluginviewer** aus dem PRM **cyrus-sasl** überprüfen wir nun erneut, welche SASL-Plugins nun zur Verfügung stehen und geladen werden können.
 +
 +=== SASL Server-Plugins ===
 +   # pluginviewer -s
 +<code>Installed SASL (server side) mechanisms are:
 +PLAIN LOGIN ANONYMOUS CRAM-MD5 DIGEST-MD5 EXTERNAL
 +List of server plugins follows
 +Plugin "plain" [loaded], API version: 4
 + SASL mechanism: PLAIN, best SSF: 0, supports setpass: no
 + security flags: NO_ANONYMOUS
 + features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION
 +Plugin "login" [loaded], API version: 4
 + SASL mechanism: LOGIN, best SSF: 0, supports setpass: no
 + security flags: NO_ANONYMOUS
 + features:
 +Plugin "anonymous" [loaded], API version: 4
 + SASL mechanism: ANONYMOUS, best SSF: 0, supports setpass: no
 + security flags: NO_PLAINTEXT
 + features: WANT_CLIENT_FIRST
 +Plugin "crammd5" [loaded], API version: 4
 + SASL mechanism: CRAM-MD5, best SSF: 0, supports setpass: no
 + security flags: NO_ANONYMOUS|NO_PLAINTEXT
 + features: SERVER_FIRST
 +Plugin "digestmd5" [loaded], API version: 4
 + SASL mechanism: DIGEST-MD5, best SSF: 128, supports setpass: no
 + security flags: NO_ANONYMOUS|NO_PLAINTEXT|MUTUAL_AUTH
 + features: PROXY_AUTHENTICATION
 +</code>
 +=== SaSL Client-Plugins ===
 +   # pluginviewer -c
 +<code>Installed SASL (client side) mechanisms are:
 +PLAIN LOGIN ANONYMOUS CRAM-MD5 DIGEST-MD5 EXTERNAL
 +List of client plugins follows
 +Plugin "plain" [loaded], API version: 4
 + SASL mechanism: PLAIN, best SSF: 0
 + security flags: NO_ANONYMOUS
 + features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION
 +Plugin "login" [loaded], API version: 4
 + SASL mechanism: LOGIN, best SSF: 0
 + security flags: NO_ANONYMOUS
 + features: SERVER_FIRST
 +Plugin "anonymous" [loaded], API version: 4
 + SASL mechanism: ANONYMOUS, best SSF: 0
 + security flags: NO_PLAINTEXT
 + features: WANT_CLIENT_FIRST
 +Plugin "crammd5" [loaded], API version: 4
 + SASL mechanism: CRAM-MD5, best SSF: 0
 + security flags: NO_ANONYMOUS|NO_PLAINTEXT
 + features: SERVER_FIRST
 +Plugin "digestmd5" [loaded], API version: 4
 + SASL mechanism: DIGEST-MD5, best SSF: 128
 + security flags: NO_ANONYMOUS|NO_PLAINTEXT|MUTUAL_AUTH
 + features: PROXY_AUTHENTICATION|NEED_SERVER_FQDN
 +Plugin "EXTERNAL" [loaded], API version: 4
 + SASL mechanism: EXTERNAL, best SSF: 0
 + security flags: NO_ANONYMOUS|NO_PLAINTEXT|NO_DICTIONARY
 + features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION
 +</code>
 +
 +===== Authentifizierungs-Konfiguration am OpenLDAP-Server =====
 +==== Speicherung von Passwörtern ====
 +Bevor wir uns nun an die Konfiguration der SASL-Unterstützung am OpenLDAP-Server machen, wollen wir uns noch kurz überlegen, wie wir die Passworte in der Datenbank ablegen. Die vermutlich vordergründigste, oft geübte und gängige Praxis ist wohl die Passworte nicht direkt in der Datenbank abzulegen, sondern gehashte Speicherungen vorzunehmen. Die Passworte in der //**/etc/shadow**// ist eine gängige Variante dieses Vorgehends.
 +   # grep django /etc/shadow
 +
 +   django:$6$h6QWOPz5$053ur$Ch1kiS731nV0lLD3pPYQf1p0vk72XgPinPXjn32ZQmlTR0HRfB4aPelNJ1CFYF9pT3qt97bbSVUnxrB1:15187:0:99999:7:::
 +
 +Will nun der Server bei der Anmeldung überprüfen benötigt er was? Genau das Passwort in Klartext! denn Nur so ist er in der Lage, den Passworthash des übermittelten Klartextpasswortes mit dem Hash in seiner Datenbank zu vergleichen. Ist nun jemand in der Lage die Übertragung zu kompromittieren, hält er unweigerlich die Anmeldedaten in Händen. Und wer will das? Keiner!
 +
 +Mit Hilfe von CRAM((**C**hallenge**R**esponse**A**uthentication**M**ethod)) haben wir nun ein Authentifizierungsverfahren an der Hand, mit der wir das Vorgenannte Problem mit der Übertragung eines Passwortes elegant umschiffen. Denn beim Anmeldevorgang erzeugt der Server bei der Clientanfrage einen individuellen Sitzungsschlüssel, das //Challenge//, welches der Server zum Client überträgt. Client __und__ Server führen nun eine mathematische Operation mit dem nur ihnen bekannten Passwort durch. Das Rechenergebnis übermittelt der Client an den Server, der den empfangenen Wert mit seinem errechneten Ergebnis der zuvor angestellten Operation vergleicht. Stimmen die Ergebnisse überein, so kann der Server mit davon ausgehen, dass hat der Client das richtige Passwort kennt und verwendet! Ein Abhören der Leitung bringt nichts, da sich bei jeder Sitzung der Challenge-Wert ändert - ein abgefangenens Challenge ist für künftige Loginversuche daher völlig wertlos!
 +
 +<WRAP round important>Damit unser Server auch wirklich **sichere** Authentifizierungsmethoden anbieten kann, ist es notwendig die Passworte der Nutzer in der Datenbank in Klartext abzulegen.
 +
 +Nur so ist sichergestellt, dass die Passworte nie über das Internet übertragen werden müssen. Denn dort liegt das größte Bedrohungspotential. Unser Postmaster und Netzwerkadministrator hat auch ohne Passwort jederzeit die Möglichkeit auf Daten der Nutzer zuzugreifen!</WRAP>
 +
 +==== SASL-Unterstützung am OpenLDAP-Server ====
 +Da wir zur Nutzerverwaltung beim Cyrus-IMAP-Server auf unser zentralen Verzeichnisdienst OpenLDAP zurückgreifen wollen, müssen wir noch die Konfiguration am zentralen LDAP-server erweiteren. Ein bereits [[centos:ldap:start|installieren und funktionsfähigen LDAP-Server]] wird bei der weiteren Konfiguration vorausgesetzt.
 +
 +Der [[http://cyrusimap.web.cmu.edu/|Cyrus-IMAP-Mailserver]], bietet mehrere Verfahren zur Authentifizierung der einzelnen Benutzer bzw. eMail-Konten an. Bei unserer Installation wollen wir auf die folgenden beiden Methoden zurückgreifen:
 +  - Authentifizierung durch „Klartext“-Passwörter 
 +  - Authentifizierung durch „MD5-Verschlüsselten“-Passwörter (CRAM-MD5 und DIGEST-MD5) 
 +=== Installation ===
 +Für die Realisierung der Authentifizierungsmethode benötigen wir nun die betreffenden RPM-Pakete aus dem Base-Repository von [[http://centos.org|CentOS 6.x]], die wir mit Hilfe der Paketmanager **yum** installieren.
 +  - **cyrus-sasl-plain** <code># yum install cyrus-sasl-plain -y</code> Bei Bedarf informieren wir uns mit Hilfe des Aufrufes **rpm -qil** darüber, was genau nun dieses Paket bei der Installation mitbrachte. <code># rpm -qil cyrus-sasl-plain</code> <code>Name        : cyrus-sasl-plain             Relocations: (not relocatable)
 +Version     : 2.1.23                            Vendor: CentOS
 +Release     : 13.el6                        Build Date: Wed 07 Dec 2011 11:02:22 PM CET
 +Install Date: Thu 09 Feb 2012 08:52:57 PM CET      Build Host: c6b18n3.bsys.dev.centos.org
 +Group       : System Environment/Libraries   Source RPM: cyrus-sasl-2.1.23-13.el6.src.rpm
 +Size        : 37616                            License: BSD
 +Signature   : RSA/SHA1, Thu 08 Dec 2011 08:53:00 PM CET, Key ID 0946fca2c105b9de
 +Packager    : CentOS BuildSystem <http://bugs.centos.org>
 +URL         : http://asg.web.cmu.edu/sasl/sasl-library.html
 +Summary     : PLAIN and LOGIN authentication support for Cyrus SASL
 +Description :
 +The cyrus-sasl-plain package contains the Cyrus SASL plugins which support
 +PLAIN and LOGIN authentication schemes.
 +/usr/lib64/sasl2/liblogin.so
 +/usr/lib64/sasl2/liblogin.so.2
 +/usr/lib64/sasl2/liblogin.so.2.0.23
 +/usr/lib64/sasl2/libplain.so
 +/usr/lib64/sasl2/libplain.so.2
 +/usr/lib64/sasl2/libplain.so.2.0.23
 +</code>
 +  - **cyrus-sasl-md5** <code># yum install cyrus-sasl-md5 -y</code> Bei Bedarf informieren wir uns mit Hilfe des Aufrufes **rpm -qil** darüber, was genau nun dieses Paket bei der Installation mitbrachte. <code># rpm -qil cyrus-sasl-md5</code> <code>Name        : cyrus-sasl-md5               Relocations: (not relocatable)
 +Version     : 2.1.23                            Vendor: CentOS
 +Release     : 13.el6                        Build Date: Wed 07 Dec 2011 11:02:22 PM CET
 +Install Date: Thu 09 Feb 2012 09:00:51 PM CET      Build Host: c6b18n3.bsys.dev.centos.org
 +Group       : System Environment/Libraries   Source RPM: cyrus-sasl-2.1.23-13.el6.src.rpm
 +Size        : 75024                            License: BSD
 +Signature   : RSA/SHA1, Thu 08 Dec 2011 08:53:18 PM CET, Key ID 0946fca2c105b9de
 +Packager    : CentOS BuildSystem <http://bugs.centos.org>
 +URL         : http://asg.web.cmu.edu/sasl/sasl-library.html
 +Summary     : CRAM-MD5 and DIGEST-MD5 authentication support for Cyrus SASL
 +Description :
 +The cyrus-sasl-md5 package contains the Cyrus SASL plugins which support
 +CRAM-MD5 and DIGEST-MD5 authentication schemes.
 +/usr/lib64/sasl2/libcrammd5.so
 +/usr/lib64/sasl2/libcrammd5.so.2
 +/usr/lib64/sasl2/libcrammd5.so.2.0.23
 +/usr/lib64/sasl2/libdigestmd5.so
 +/usr/lib64/sasl2/libdigestmd5.so.2
 +/usr/lib64/sasl2/libdigestmd5.so.2.0.23
 +</code>
 +
 +Anschließend starten wir unseren OpenLDAP-Server einmal durch.
 +   # service slapd restart
 +
 +   Stopping slapd:                                            [  OK  ]
 +   Starting slapd:                                            [  OK  ]
 +
 +Fragen wir nun die unterstützten SASL-Mechanismen ab, so werden uns die beiden gerade installierten Cyrus-SASL-Mechanismen, angeboten. Hierzu verwenden wir folgenden Aufruf:
 +    # ldapsearch -LLL -ZZ -x -H ldap://ldap.dmz.nausch.org -s "base" -b "" -W -D "cn=Manager,dc=nausch,dc=org" supportedSASLMechanisms
 +
 +<code>Enter LDAP Password: 
 +dn:
 +supportedSASLMechanisms: DIGEST-MD5
 +supportedSASLMechanisms: PLAIN
 +supportedSASLMechanisms: CRAM-MD5
 +supportedSASLMechanisms: LOGIN
 +</code>
 +
 +==== SASL Authentifizierung mit technischem User ====
 +Wie schon bei der Konfiguration des OpenLDAP-Servers, wollen wir bei der SASL-Authentifizierung einen [[centos:ldap:tecbind|technischen User]] verwenden. Wir legen uns daher im ersten Schritt einen eigenen speziellen technischen User an, mit dem später die Anfragen an unseren OpenLDAP-Server gerichtet werden sollen.
 +=== SASLAuthenticationUser ===
 +Der Einfachheit halber wollen wir hierzu folgenden User in unserem DIT((**D**irectory **I**nformation **T**ree)) hinterlegen:
 +  * **uid=SASLAuthenticationUser,dc=nausch,dc=org**
 +
 +Zur sicheren Übertragung des Anmeldeschlüssels, speichern wir auch dieses Passwort des technischen Useres in [[centos:mail_c6:cyrus_c6?&#speicherung_von_passwoertern|Klartext in der Datenbank]] ab. Hierzu stellen wir die Verschlüsselung der Passworte von **SSHA** von **CLEARTEXT** um. Hierzu legen wir uns eine Konfigurationsdatei im *.**LDIF**-Format mit nachfolgendem Inhalt an.
 +   # vim /etc/openldap/ldif/password-hash.ldif
 +<file bash /etc/openldap/ldif/password-hash.ldif>dn: olcDatabase={-1}frontend,cn=config
 +delete: olcPasswordHash
 +olcPasswordHash: {SSHA}
 +-
 +add: olcPasswordHash
 +olcPasswordHash: {CLEARTEXT}
 +</file>
 +Die Daten aus dieser *.**LDIF**-Datei übetragen wir nun in den DIT((**D**irectory **I**nformation **T**ree)) unseres OpenLDAP-Servers.
 +   # ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/password-hash.ldif
 +
 +   Enter LDAP Password: 
 +   modifying entry "olcDatabase={-1}frontend,cn=config"
 +
 +Die Konfiguration unseres //technischen Users// nehmen wir nun auch mit Hilfe einer *.**LDIF**-Datei vor. Hierzu legen wir uns folgende Datei an.
 +   # vim /etc/openldap/ldif/SASLAuthenticationUser.ldif
 +<file bash /etc/openldap/ldif/SASLAuthenticationUser.ldif>dn: uid=SASLAuthenticationUser,dc=nausch,dc=org
 +cn: SASLAuthenticationUser
 +sn: SASLAuthenticationUser
 +uid: SASLAuthenticationUser
 +objectClass: inetOrgPerson
 +objectClass: simpleSecurityObject
 +objectClass: top
 +userPassword: Klausi-is-a-G33k!
 +structuralObjectClass: inetOrgPerson
 +authzTo: ldap:///dc=nausch,dc=org??sub?(objectClass=*)
 +</file>
 +
 +Bevor wir nun die gerade erstellte *.**LDIF**-Datei in unseren OpenLDAP-server übertragen können, ist es notwendig den Daemon zu stoppen.
 +   # service slapd stop
 +
 +   Stopping slapd:                                            [  OK  ]
 +
 +Anschließend übertragen wir die Daten aus der *.**LDIF**-Datei in den DIT((**D**irectory **I**nformation **T**ree)) unseres OpenLDAP-Servers.
 +   # slapadd -v -l /etc/openldap/ldif/SASLAuthenticationUser.ldif 
 +
 +   added: "uid=SASLAuthenticationUser,dc=nausch,dc=org" (0000000a)
 +   _#################### 100.00% eta   none elapsed            none fast!         
 +   Closing DB...
 +
 +Zum Schluß starten wir unseren OpenLDAP-Server wieder!
 +   # service slapd start
 +
 +   Starting slapd:                                            [  OK  ]
 +
 +=== SASL-Mappings ===
 +Damit der OpenLDAP-Server überhaupt mit SASL Anfragen umgehen kann, müssen noch zwei Erweiterungen vorgenommen werden.
 +
 +<WRAP round info>Weiterführend informationen findet man im [[http://www.openldap.org/doc/admin24/sasl.html#DIGEST-MD5|Kapitel DIGEST-MD5]], wie auch im [[http://www.openldap.org/doc/admin24/sasl.html#Mapping%20Authentication%20Identities|Mapping Authentication Identities]] des OpenLDAP-admin Guides</WRAP>
 +
 +  - **olcAuthzRegexp** \\ Hierzu legen wir uns eine Konfigurationsdatei im *.LDIF-Format mit nachfolgendem Inhalt an. <code># vim /etc/openldap/ldif/authz-regexp.ldif</code> <file bash /etc/openldap/ldif/authz-regexp.ldif>dn: cn=config
 +changetype: modify
 +add: olcAuthzRegexp
 +olcAuthzRegexp: uid=([^,@]*) ldap:///dc=nausch,dc=org??sub?(&(uid=$1)(objectClass=*))
 +</file>Die Daten aus dieser *.**LDIF**-Datei übetragen wir nun in den DIT((**D**irectory **I**nformation **T**ree)) unseres OpenLDAP-Servers. <code># ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/authz-regexp.ldif</code><code>Enter LDAP Password: 
 +modifying entry "cn=config"</code>
 +  - **olcAuthzPolicy** \\ Hierzu legen wir uns eine Konfigurationsdatei im *.LDIF-Format mit nachfolgendem Inhalt an. <code># vim /etc/openldap/ldif/authz-policy.ldif</code> <file bash /etc/openldap/ldif/authz-policy.ldif>dn: cn=config
 +changetype: modify
 +delete: olcAuthzPolicy
 +olcAuthzPolicy: none
 +-
 +add: olcAuthzPolicy
 +olcAuthzPolicy: to</file>Die Daten aus dieser *.**LDIF**-Datei übetragen wir nun in den DIT((**D**irectory **I**nformation **T**ree)) unseres OpenLDAP-Servers.<code># ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/authz-policy.ldif</code><code>Enter LDAP Password: 
 +modifying entry "cn=config"</code>
 +
 +Zum Schluß überprüfen wir nun noch, ob die beiden Konfigurationsänderungen von unserem OpenLDAP-Server auch wirklich akzeptiert wurden.
 +   # ldapsearch -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)" | grep olcAuth
 +
 +Nach der Eingabe des oben gezeigten Befehles, geben wir noch das Passwort für unseren OpenLDAP-Server ein und erhalten dann als Antwort:
 +   olcAuthzPolicy: to
 +   olcAuthzRegexp: {0}uid=([^,@]*) ldap:///dc=nausch,dc=org??sub?(&(uid=$1)(objectClass=*))
 +
 +
 +
 +
 +=== SASL-Access-Rights ===
 +Bevor wir uns nun daran machen, die Zugriffsrechte auf die Benutzerstrukturen in unserem DIT((**D**irectory **I**nformation **T**ree)) zu erweitern, sehen wir erst noch einmal an, welche Informationen aktuell gespeichert sind.
 +   # ldapsearch -W -x -D cn=config -b olcDatabase={-1}frontend,cn=config
 +<code bash>Enter LDAP Password: 
 +# extended LDIF
 +#
 +# LDAPv3
 +# base <olcDatabase={-1}frontend,cn=config> with scope subtree
 +# filter: (objectclass=*)
 +# requesting: ALL
 +#
 +
 +# {-1}frontend, config
 +dn: olcDatabase={-1}frontend,cn=config
 +olcPasswordHash: {CLEARTEXT}
 +objectClass: olcDatabaseConfig
 +objectClass: olcFrontendConfig
 +olcDatabase: {-1}frontend
 +olcAccess: {0}to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning  by self write  by dn="cn=Manager,dc=nausch,dc=org" write  by dn="cn=Technischeruser,dc=nausch,dc=org" read  by anonymous auth  by * none
 +olcAccess: {1}to dn="cn=Manager,dc=nausch,dc=org"  by self write  by * none
 +olcAccess: {2}to dn="cn=Technischeruser,dc=nausch,dc=org"  by self write  by dn="cn=Manager,dc=nausch,dc=org" write  by * none
 +olcAccess: {3}to dn.regex="cn=([^,]+),ou=Group,dc=nausch,dc=org"  by self write  by dn="cn=Manager,dc=nausch,dc=org" write  by dn="cn=Technischeruser,dc=nausch,dc=org" read  by dn.exact,expand="uid=$1,ou=People,dc=nausch,dc=org" read  by * none
 +olcAccess: {4}to dn.regex="uid=([^,]+),ou=People,dc=nausch,dc=org"  by self write  by dn="cn=Manager,dc=nausch,dc=org" write  by dn="cn=Technischeruser,dc=nausch,dc=org" read  by dn.exact,expand="uid=$1,ou=People,dc=nausch,dc=org" read  by * none
 +olcAccess:: ezV9dG8gKiAgYnkgc23ursCh1kiS731nV0lLD3pPVsZiB3cml0ZSAgYnkgZG4uYmFz1uYXVzY2gsZGM9b3JnIiB3cml0ZSAgYnkgKiByZWFkIA==
 +olcAddContentAcl: FALSE
 +olcLastMod: TRUE
 +olcMaxDerefDepth: 0
 +olcReadOnly: FALSE
 +olcSchemaDN: cn=Subschema
 +olcMonitoring: FALSE
 +
 +# search result
 +search: 2
 +result: 0 Success
 +
 +# numResponses: 2
 +# numEntries: 1
 +</code>
 +Da wir die Konfiguration unseres OpenLDAP-Servers nicht mit Hilfe von Konfigurationsdateien vorgenommen haben, sondern die Konfiguration im OpenLDAP-Server selbst vorhalten, importieren wir auch hier unsere neuen SASL-Access-Rights mit Hilfe einer kleinen **//ldif//**-Hilfsdatei.
 +Diese Datei legen wir im Verzeichnis //**/etc/openldap/ldif**// ab.
 +   # vim /etc/openldap/ldif/SASL-Access-Rights.ldif
 +<file bash /etc/openldap/ldif/SASL-Access-Rights.ldif>dn: olcDatabase={-1}frontend,cn=config
 +delete: olcAccess
 +olcAccess: {0}
 +olcAccess: {1}
 +olcAccess: {2}
 +olcAccess: {3}
 +olcAccess: {4}
 +olcAccess: {5}
 +-
 +add: olcAccess
 +olcAccess: to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning  by self write  by dn="cn=Manager,dc=nausch,dc=org" write  by dn="cn=Technischeruser,dc=nausch,dc=org" read  by dn="uid=SASLAuthenticationUser,dc=nausch,dc=org" read  by anonymous auth  by * none
 +olcAccess: to dn="cn=Manager,dc=nausch,dc=org"  by self write  by * none
 +olcAccess: to dn="cn=Technischeruser,dc=nausch,dc=org"  by self write  by dn="cn=Manager,dc=nausch,dc=org" write  by * none
 +olcAccess: to dn="uid=SASLAuthenticationUser,dc=nausch,dc=org"  by self write  by dn="cn=Manager,dc=nausch,dc=org" write  by * auth
 +olcAccess: to dn.regex="cn=([^,]+),ou=Group,dc=nausch,dc=org"  by self write  by dn="cn=Manager,dc=nausch,dc=org" write  by dn="cn=Technischeruser,dc=nausch,dc=org" read  by dn="uid=SASLAuthenticationUser,dc=nausch,dc=org" read  by dn.exact,expand="uid=$1,ou=People,dc=nausch,dc=org" read  by * none
 +olcAccess: to dn.regex="uid=([^,]+),ou=People,dc=nausch,dc=org"  by self write  by dn="cn=Manager,dc=nausch,dc=org" write  by dn="cn=Technischeruser,dc=nausch,dc=org" read  by dn="uid=SASLAuthenticationUser,dc=nausch,dc=org" read  by dn.exact,expand="uid=$1,ou=People,dc=nausch,dc=org" read  by * none
 +olcAccess: to *  by self write  by dn.base="cn=manager,dc=nausch,dc=org" write  by * read
 +</file>
 +
 +Anschließend ändern und aktivieren wir nun die Konfiguration unseres OpenLDAP-Servers, indem wir die gerade angelegte *.**LDIF**-Datei einspielen.
 +   # ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/SASL-Access-Rights.ldif 
 +
 +   Enter LDAP Password: 
 +   modifying entry "olcDatabase={-1}frontend,cn=config"
 +
 +Abschließend überprüfen wir ob unsere Änderungen übernommen wurden.
 +   # ldapsearch -W -x -D cn=config -b olcDatabase={-1}frontend,cn=config
 +<code bash>
 +Enter LDAP Password: 
 +# extended LDIF
 +#
 +# LDAPv3
 +# base <olcDatabase={-1}frontend,cn=config> with scope subtree
 +# filter: (objectclass=*)
 +# requesting: ALL
 +#
 +
 +# {-1}frontend, config
 +dn: olcDatabase={-1}frontend,cn=config
 +olcPasswordHash: {CLEARTEXT}
 +objectClass: olcDatabaseConfig
 +objectClass: olcFrontendConfig
 +olcDatabase: {-1}frontend
 +olcAddContentAcl: FALSE
 +olcLastMod: TRUE
 +olcMaxDerefDepth: 0
 +olcReadOnly: FALSE
 +olcSchemaDN: cn=Subschema
 +olcMonitoring: FALSE
 +olcAccess: {0}to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning  by self write  by dn="cn=Manager,dc=nausch,dc=org" write  by dn="cn=Technisch
 + eruser,dc=nausch,dc=org" read  by dn="uid=SASLAuthenticationUser,dc=nausch,dc=org" read  by anonymous auth  by * none
 +olcAccess: {1}to dn="cn=Manager,dc=nausch,dc=org"  by self write  by * none
 +olcAccess: {2}to dn="cn=Technischeruser,dc=nausch,dc=org"  by self write  by dn="cn=Manager,dc=nausch,dc=org" write  by * none
 +olcAccess: {3}to dn="uid=SASLAuthenticationUser,dc=nausch,dc=org"  by self write  by dn="cn=Manager,dc=nausch,dc=org" write  by * auth
 +olcAccess: {4}to dn.regex="cn=([^,]+),ou=Group,dc=nausch,dc=org"  by self write  by dn="cn=Manager,dc=nausch,dc=org" write  by dn="cn=Technischeruser,dc=na
 + usch,dc=org" read  by dn="uid=SASLAuthenticationUser,dc=nausch,dc=org" read  by dn.exact,expand="uid=$1,ou=People,dc=nausch,dc=org" read  by * none
 +olcAccess: {5}to dn.regex="uid=([^,]+),ou=People,dc=nausch,dc=org"  by self write  by dn="cn=Manager,dc=nausch,dc=org" write  by dn="cn=Technischeruser,dc=
 + nausch,dc=org" read  by dn="uid=SASLAuthenticationUser,dc=nausch,dc=org" read  by dn.exact,expand="uid=$1,ou=People,dc=nausch,dc=org" read  by * none
 +olcAccess: {6}to *  by self write  by dn.base="cn=manager,dc=nausch,dc=org" write  by * read
 +
 +# search result
 +search: 2
 +result: 0 Success
 +
 +# numResponses: 2
 +# numEntries: 1
 +</code>
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +===== Programmstart =====
 +
 +==== erster manueller Start ====
 +In RPM wird uns ein Startupscript mitgeliefert - über dieses starten wir unseren IMAP-Server.
 +
 +   # service cyrus-imapd start
 +
 +   Importing cyrus-imapd databases:                            OK  ]
 +   Starting cyrus-imapd:                                      [  OK  ]
 +
 +Ob der Server läuft können wir einfach überprüfen.
 +   # netstat -tulpen | grep 143
 +
 +   tcp        0      0 0.0.0.0:143                 0.0.0.0:                  LISTEN      0          122799     14383/cyrus-master  
 +   tcp        0      0 0.0.0.0:4190                0.0.0.0:                  LISTEN      0          122805     14383/cyrus-master  
 +
 +Oder:
 +   # lsof -i tcp:imap2
 +
 +   COMMAND     PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
 +   cyrus-mas 14383 cyrus    5u  IPv4 122799      0t0  TCP *:imap (LISTEN)
 +   imapd     14390 cyrus    4u  IPv4 122799      0t0  TCP *:imap (LISTEN)
 +   imapd     14394 cyrus    4u  IPv4 122799      0t0  TCP *:imap (LISTEN)
 +   imapd     14396 cyrus    4u  IPv4 122799      0t0  TCP *:imap (LISTEN)
 +   imapd     14398 cyrus    4u  IPv4 122799      0t0  TCP *:imap (LISTEN)
 +   imapd     14399 cyrus    4u  IPv4 122799      0t0  TCP *:imap (LISTEN)
 +
 +Als weiteren Test verbinden wir uns einfach mit Hilfe des Befehles **telnet** auf Port 143. Nach Eingabe einer Sequenz-Nummer, in unserem Beispiel //s001// verlassen wir mit dem Befehl **logout** wieder den IMAP-Server.
 +   # telnet localhost 143
 +
 +   Connected to localhost.
 +   Escape character is '^]'.
 +   * OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID LOGINDISABLED COMPRESS=DEFLATE] vml000070.dmz.nausch.org Cyrus IMAP v2.3.16-Fedora-RPM-2.3.16-6.el6_1.4 server ready
 +   
 +   s001 logout
 +   
 +   * BYE LOGOUT received
 +   s001 OK Completed
 +   Connection closed by foreign host.
 +
 +
 +==== automatisches Starten des Dienste beim Systemstart ====
 +Damit nun unser IMAP-Mailserver beim Booten automatisch gestartet wird, nehmen wir noch folgende Konfigurationsschritte vor.
 +   # chkconfig cyrus-imapd on
 +Anschließend überprüfen wir noch unsere Änderung:
 +   # chkconfig --list | grep cyrus-imapd
 +
 +   cyrus-imapd    0:off 1:off 2:on 3:on 4:on 5:on 6:off
 +
 +
 +===== System-/Logintests =====
 +
 +==== Einlieferung via LMTP ====
 +Genauso wie bei //SMTP// erfolgt bei //LMTP//((**L**ocal **M**ail **T**ransfer **P**rotocol)) erfolgt der Kommunikationsablauf mit Hilfe von Befehlen, wie
 +  * **MAIL FROM**
 +  * **RCPT TO**
 +  * **DATA**
 +  * **LHLO** bei LMTP und **HELO** bzw. **EHLO** bei SMTP 
 +
 +Wir liefern nun unsere erste Nachricht auf dem Port **24** (LMTP Mail Delivery) ein. Unsere eMail wird dabei folgende Daten umfassen:
 +  * Einliefernder Host: **vml000080.dmz.nausch.org**
 +  * Absenderadresse: **michael@nausch.org**
 +  * Empfänger: **django@nausch.org**
 +
 +Wir bauen also eine Verbindung zu unserem IMAP-Server auf Port **24** auf.
 +   # telnet localhost 24
 +<code>Trying 127.0.0.1...
 +Connected to localhost.
 +Escape character is '^]'.
 +220 imap.nausch.org server ready
 +LHLO vml000080.dmz.nausch.org
 +250-imap.nausch.org
 +250-8BITMIME
 +250-ENHANCEDSTATUSCODES
 +250-PIPELINING
 +250-SIZE
 +250-STARTTLS
 +250-AUTH EXTERNAL
 +250 IGNOREQUOTA
 +mail from:<michael@nausch.org>
 +250 2.1.0 ok
 +rcpt to:<django@nausch.org>
 +250 2.1.5 ok
 +DATA
 +354 go ahead
 +From: michael@nausch.org
 +To: Django@nausch.org
 +Subj: Testmail
 +Date: 2012-02-20 17:15
 +
 +Ahoi,
 +das ist eine Testmail, eingeliefert via telnet imap-server auf Port 24
 +.
 +250 2.1.5 Ok
 +quit
 +221 2.0.0 bye
 +Connection closed by foreign host.
 +</code>
 +==== imtest ====
 +Mit dem Programm **imtest** aus dem Paket //**cyrus-imapd-utils**// können wir sowohl den Zugriff auf unseren IMAP-Server testen, wie auch die Mailbox abfragen. 
 +=== Logintest ===
 +Im ersten Schritt testen wir nun den Zugriff auf unseren IMAP-Server.
 +   # imtest -p imap -a Django -m DIGEST-MD5 localhost
 +Mit der Zeichenfolge **S:** werden dabei die Meldungen des Servers und mit **C:** die Meldungen des Clients gekennzeichnet.
 +<code>S: * OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID STARTTLS LOGINDISABLED AUTH=CRAM-MD5 AUTH=DIGEST-MD5 SASL-IR COMPRESS=DEFLATE] imap.nausch.org server ready
 +C: A01 AUTHENTICATE DIGEST-MD5
 +S: + bm9uY2U9ImpSaFpFSC9ORjBOJ3ur$1Ck1$T31nR1eSs3nAr$eh0L3S2dSaXVaekJIQ2t2OWJ0RW9SbzROUsRTA9IixyZWFsbT0iaW1hcC5uYXVzY2gub3JnIixxb3A9ImF1dGgsYXV0aC1pbnQsYXV0aC1jb25mIixjaXBoZXI9InJjNC00MCxyYzQtNTYscmM0LGRlcywzZGVzIixtYXhidWY9NDA5NixjaGFyc2V0PXV0Zi04LGFsZ29yaXRobT1tZDUtc2Vzcw==
 +Please enter your password: 
 +C: dXNlcm5sg54hbWU9ImluZ2UiLHJlYWJpbWFwLm5hdXNjaC5vcmciLG5vbmNlPSJqUmhaRUgvTkYwTlVSQVdgY2cEtnUml1WnpCSENrdjlidEVvUm80TlArbEUwPSIsY25vbmNlPSJMZjkybi9aSU1qVTRLdTUvb29hSzJJcjRVTFhhKzFBRFM5azF2QVB4d1BJPSIsbmM9MDAwMDAwMDEscW9wPWF1dGgtY29uZixjaXBoZXI9cmM0LG1heGJ1Zj0xMDI0LGRpZ2VzdC11cmk9ImltYXAvbG9jYWxob3N0IixyZXNwb25zZT00NGIwNWU4MGFkNWNhNTUzYTM3NmI5NjM5Nzg3NzU0ZA==
 +S: + cnNwYXV0a$Up3Rg31leDAxYiN2U0ZWViZGMzZTNhZDZlMWE3YmZhODQ5NGRhODBlMw==
 +C: 
 +S: A01 OK Success (privacy protection)
 +Authenticated.
 +Security strength factor: 128
 +C: C01 CAPABILITY
 +S: * CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID LOGINDISABLED AUTH=CRAM-MD5 AUTH=DIGEST-MD5 COMPRESS=DEFLATE 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 SCAN IDLE LISTEXT LIST-SUBSCRIBED X-NETSCAPE URLAUTH
 +S: C01 OK Completed
 +</code>
 +Das Beispiel zeigt einen erfolgreichen LOGIN bei unserem IMAP-Server. Mit der Sequenznummer **01** und dem Befehl **LOGOUT** melden wir uns vom IMAP-server wieder ab.
 +  01 LOGOUT
 +<code>* BYE LOGOUT received
 +01 OK Completed
 +Connection closed.
 +</code>
 +
 +=== Mailboxabfrage ===
 +Im nächsten Schritt fragen wir die Mailbox ab. Hierzu melden wir uns wieder mit Hilfe von **imtest** an unserem IMAP-Server an.
 +   # imtest -p imap -a Django -m DIGEST-MD5 localhost
 +Anschließend fragen wir unsere Testmailbox ab. Hierzu verwenden wir immer die folgende Notation: \\
 +**Sequenz-Nummer** **BEFEHL**
 +Als erstes lassen wir uns den Inhalt unserer Mailbox anzeigen:
 +  01 LIST "" *
 +<code>* LIST (\HasChildren) "/" "INBOX"
 +* LIST (\HasNoChildren) "/" "INBOX/achive"
 +* LIST (\HasNoChildren) "/" "INBOX/inbox"
 +01 OK Completed (0.000 secs 4 calls)
 +</code>
 +
 +Dann fragen wir den Status unserer Mailbox ab:
 +  02 SELECT INBOX
 +<code>* FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
 +* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen \*)]  
 +* 1 EXISTS
 +* 1 RECENT
 +* OK [UNSEEN 1]  
 +* OK [UIDVALIDITY 1329754509]  
 +* OK [UIDNEXT 2]  
 +* OK [NOMODSEQ] Sorry, modsequences have not been enabled on this mailbox
 +* OK [URLMECH INTERNAL]
 +02 OK [READ-WRITE] Completed
 +</code>
 +
 +Im nächsten Schritt fragen wir den Status der Inbox ab, da wir wissen wollen, ob unsere Testnachricht auch erfolgreich eingestellt wurde.
 +  03 STATUS INBOX (MESSAGES)
 +
 +<code>* STATUS INBOX (MESSAGES 1)
 +03 OK Completed
 +</code>
 +
 +Unsere testnachricht befindet sich also in unserer Inbox und wir holen diese Nachricht ab und lassen uns diese somit am Bildschirm ausgeben.
 +  04 UID fetch 1:1 (UID RFC822.SIZE FLAGS BODY.PEEK[])
 +
 +<code>* 1 FETCH (FLAGS (\Recent) UID 1 RFC822.SIZE 330 BODY[] {330}
 +Return-Path: <michael@nausch.org>
 +Received: from vml000080.dmz.nausch.org (localhost [127.0.0.1])
 + by imap.nausch.org with LMTPA;
 + Mon, 20 Feb 2012 18:28:19 +0100
 +X-Sieve: CMU Sieve 2.3
 +From: michael@nausch.org
 +To: django@nausch.org
 +Subj: Testmail
 +Date: 2012-02-20 17:15
 +Message-ID: <cmu-lmtpd-31727-1329758899-0@imap.nausch.org>
 +
 +Ahoi,
 +das ist eine Testmail, eingeliefert via telnet imap-server auf Port 24
 +)
 +04 OK Completed (0.000 sec)
 +</code>
 +Zum Schluß melden wir uns wieder von unserem IMAP-Server ab.
 +
 +  05 LOGOUT
 +<code>* BYE LOGOUT received
 +05 OK Completed
 +Connection closed.
 +</code>
 +
 +
 +
 +====== Links ======
 +  * **[[centos:mail_c6:start|Zurück zum Kapitel >>Mailserverinstallation unter CentOS 6<<]]**
 +  * **[[wiki:start|Zurück zu >>Projekte und Themenkapitel<<]]**
 +  * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]**
 +
  
  • centos/mail_c6/cyrus_c6.txt
  • Zuletzt geändert: 20.04.2018 10:50.
  • von 127.0.0.1