Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:mail_c6:cyrus_c6 [18.01.2012 21:16. ] – [Postfix] django | centos: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 ====== | ||
+ | {{: | ||
+ | |||
+ | Ü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, | ||
+ | ===== 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 | ||
+ | < | ||
+ | Version | ||
+ | Release | ||
+ | Install Date: Mon 26 Dec 2011 10:27:26 PM CET Build Host: c6b5.bsys.dev.centos.org | ||
+ | Group : System Environment/ | ||
+ | Size : 45641427 | ||
+ | Signature | ||
+ | Packager | ||
+ | URL : http:// | ||
+ | Summary | ||
+ | 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 " | ||
+ | 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, | ||
+ | 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/ | ||
+ | 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. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | ==== cyrus-imapd-utils ==== | ||
+ | # rpm -qil cyrus-imapd-utils | ||
+ | < | ||
+ | Version | ||
+ | Release | ||
+ | Install Date: Mon 26 Dec 2011 10:27:06 PM CET Build Host: c6b5.bsys.dev.centos.org | ||
+ | Group : Applications/ | ||
+ | Size : 733204 | ||
+ | Signature | ||
+ | Packager | ||
+ | URL : http:// | ||
+ | Summary | ||
+ | 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. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | ===== Server-Konfiguration ===== | ||
+ | |||
+ | ==== imapd.conf ==== | ||
+ | In der Konfigurationsdatei // | ||
+ | # vim / | ||
+ | <file bash / | ||
+ | # Defaultkonfigurationsdatei aus dem RPM-Paket cyrus-imapd angepasst an die | ||
+ | # lokalen Rahmenbedingungen und versehen mit Kommentaren | ||
+ | # Django : 2011-12-08 | ||
+ | |||
+ | # Konfigurationsverzeichnis der IMAP-Servers, | ||
+ | # wie die Berechtigungen, | ||
+ | # Mailboxen gespeichert | ||
+ | configdirectory: | ||
+ | |||
+ | # Die Default-Partition, | ||
+ | partition-default: | ||
+ | |||
+ | # postmaster, gibt den Postmaster an, also den E-Mail Administrator. Dies ist auch die | ||
+ | # Absenderadresse, | ||
+ | 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: / | ||
+ | |||
+ | # Pfadangaben zum Befehl sendmail. Sieve verschickt über den Befehl sendmail | ||
+ | # Reject-, Redirect- und Vacation-Nachrichten | ||
+ | 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. | ||
+ | # " | ||
+ | # " | ||
+ | # des Servers | ||
+ | # " | ||
+ | # | ||
+ | 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 / | ||
+ | hashimapspool: | ||
+ | |||
+ | # anonymen Benutzerzugang sperren, bedeutet, wie der Name schon sagt, | ||
+ | # dass sich alle Benutzer authentifizieren müssen. | ||
+ | allowanonymouslogin: | ||
+ | |||
+ | # Plaintexteingabe beim Lpgin erlauben? Nur zum Testen und Spielen von web-cyradm aktiviert. | ||
+ | allowplaintext: | ||
+ | |||
+ | # Virtuellen Domain-Support aktivieren, d.h. Cyrus erzeugt die neuen Nutzerpostfächer | ||
+ | # jeweils unter der betreffenden Domainstruktur | ||
+ | virtdomains: | ||
+ | |||
+ | # Unqualifizierte Postfächer werden unterhalb des des user-Verzeichnisses der | ||
+ | # default-Domäne angeordnet | ||
+ | # defaultdomain: | ||
+ | |||
+ | # Nutzung des auxprop-Plugins zur Benutzer-Authentifizierung | ||
+ | sasl_pwcheck_method: | ||
+ | # Nutzung des ldapdb-Treibers für den Zugriff auf einen OpenLDAP-Server | ||
+ | sasl_auxprop_plugin: | ||
+ | |||
+ | # Nutzerauthentifizierung mit Hilfe folgender Verfahren: | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | sasl_mech_list: | ||
+ | |||
+ | # Definition der Anbindung an unseren zentralen LDAP-Server | ||
+ | sasl_ldapdb_uri: | ||
+ | sasl_ldapdb_id: | ||
+ | sasl_ldapdb_pw: | ||
+ | sasl_ldapdb_mech: | ||
+ | |||
+ | # Konvertieren der Usernamen in Kleinbuchstaben vor dem Login/ | ||
+ | username_tolower: | ||
+ | |||
+ | # lmtpd gibt einen permaneten Fehlercode zurück, wenn die Quota einer User-Mailbox | ||
+ | # ausgereizt wurde. | ||
+ | lmtp_overquota_perm_failure: | ||
+ | |||
+ | # lmtpd konvertiert automatisch Empfängeradressen in Kleinbuchstaben | ||
+ | lmtp_downcase_rcpt: | ||
+ | |||
+ | # 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: | ||
+ | |||
+ | # 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: | ||
+ | |||
+ | # Loggt sich ein User neu an, oder es wird eine Nachricht per lmtpd | ||
+ | # angeliefert, | ||
+ | # mit den definierten Ordnern angelegt | ||
+ | ### | ||
+ | autocreateinboxfolders: | ||
+ | |||
+ | # Loggt sich ein User neu an, oder es wird eine Nachricht per lmtpd | ||
+ | # angeliefert, | ||
+ | # folgende Ordner abboniert | ||
+ | autosubscribeinboxfolders: | ||
+ | |||
+ | # Ist diese Option auf " yes" gesetzt, würde Cyrus keine E-Mails im | ||
+ | # 8 Bit Format annehmen. Ist sie auf " | ||
+ | # 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 " | ||
+ | # " | ||
+ | # Wichtig wird diese Option sobald Benutzernamen Punkte enthalten. | ||
+ | unixhierarchysep: | ||
+ | |||
+ | # TLS-Einstellungen für IMAP over SSL (Port 993) | ||
+ | tls_cert_file: | ||
+ | tls_key_file: | ||
+ | tls_ca_file: | ||
+ | |||
+ | # uncomment this if you're operating in a DSCP environment (RFC-4594) | ||
+ | # qosmarking: af13 | ||
+ | </ | ||
+ | |||
+ | ==== cyrus.conf ==== | ||
+ | In der Konfigurationsdatei // | ||
+ | # vim / | ||
+ | <file bash / | ||
+ | # 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=" | ||
+ | |||
+ | # this is only necessary if using idled for IMAP IDLE | ||
+ | idled cmd=" | ||
+ | } | ||
+ | |||
+ | # UNIX sockets start with a slash and are put into / | ||
+ | SERVICES { | ||
+ | # add or remove based on preferences | ||
+ | imap cmd=" | ||
+ | # Django : 2011-12-08 | ||
+ | # nachfolgende drei Zeilen deaktiviert, | ||
+ | # Dienste imap und sieve nutzen wollen und werden | ||
+ | # imaps cmd=" | ||
+ | # pop3 cmd=" | ||
+ | # pop3s cmd=" | ||
+ | sieve cmd=" | ||
+ | |||
+ | # these are only necessary if receiving/ | ||
+ | # nntp cmd=" | ||
+ | # nntps cmd=" | ||
+ | |||
+ | # 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, | ||
+ | # lmtpunix | ||
+ | # | ||
+ | # Befindet sich der MTA und MDA auf zwei getrennten Servern, so wird die | ||
+ | # Anbindung über eine TCP/ | ||
+ | lmtp cmd=" | ||
+ | |||
+ | lmtpunix cmd=" | ||
+ | |||
+ | # this is only necessary if using notifications | ||
+ | # Django : 2011-12-08 | ||
+ | # Informationen über eintreffende Nachrichten an ein weiteres Postfach | ||
+ | # weiterleiten. | ||
+ | notify cmd=" | ||
+ | } | ||
+ | |||
+ | EVENTS { | ||
+ | # this is required | ||
+ | checkpoint cmd=" | ||
+ | |||
+ | # this is only necessary if using duplicate delivery suppression, | ||
+ | # Sieve or NNTP | ||
+ | delprune cmd=" | ||
+ | |||
+ | # this is only necessary if caching TLS sessions | ||
+ | tlsprune cmd=" | ||
+ | # 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 | ||
+ | }</ | ||
+ | ==== 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, | ||
+ | |||
+ | == master.conf == | ||
+ | In der // | ||
+ | # vim / | ||
+ | <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 | ||
+ | user=cyrus argv=/ | ||
+ | ... | ||
+ | </ | ||
+ | == main.cf == | ||
+ | In der // | ||
+ | # vim / | ||
+ | < | ||
+ | # Django : 2009-02-07 Aktiviert für MDA-Support cyrus aktiviert | ||
+ | mailbox_transport = cyrus | ||
+ | cyrus_destination_recipient_limit=1 | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | |||
+ | === 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 / | ||
+ | <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:/ | ||
+ | |||
+ | # Lookup-Tabelle zum Aktivieren einer alternativen Mailrouting bei der Zustellung an einen weiteren Mailserver | ||
+ | transport_maps = btree:/ | ||
+ | </ | ||
+ | |||
+ | 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 | ||
+ | # Nach dem Ändern und/oder Erweitern der Tabelle, muß noch mittels | ||
+ | # die zugehörige Datenbank erzeugt werden. | ||
+ | # | ||
+ | # Alle eMails, die an Subdomains von nausch.org gerichtet sind (" | ||
+ | # werden an den/die Mailserver von intra.nausch.org (MX-Records) weitergeleitet. (keine " | ||
+ | # | ||
+ | |||
+ | # Mails an backup.nausch.org werden an den Mailserver (A-Record) auf Port 25 mit Namen mail.intra.nausch.org geschickt. | ||
+ | # | ||
+ | </ | ||
+ | - **relay_domains**: | ||
+ | # 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 | ||
+ | # 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 | ||
+ | - **transport_maps __UND__ relay_domains**: | ||
+ | # 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 | ||
+ | # 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 | ||
+ | # | ||
+ | # 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 | ||
+ | omni128.de | ||
+ | wetterstation-pliening.info | ||
+ | ebersberger-liedersammlung.de | ||
+ | |||
+ | == master.conf == | ||
+ | In der // | ||
+ | # vim / | ||
+ | <code bash>... | ||
+ | local | ||
+ | ... | ||
+ | </ | ||
+ | ==== 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 // | ||
+ | |||
+ | vim / | ||
+ | |||
+ | # 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, | ||
+ | # service iptables restart | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | ===== Authentifizierungs-Konfiguration am IMAP-Server ===== | ||
+ | Der [[http:// | ||
+ | |||
+ | <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:// | ||
+ | |||
+ | Nachfolgend gehen wir auf die wichtigsten drei Varianten ein. | ||
+ | * **cyrus-sasl-plain**: | ||
+ | * **cyrus-sasl-md5**: | ||
+ | * **cyrus-sasl-ldap**: | ||
+ | Mit Hilfe des Programms **pluginviewer** aus dem PRM **cyrus-sasl** können alle zur Verfügung stehenden und ladbaren | ||
+ | - Ausgabe der **auxprop-plugins** < | ||
+ | sasldb | ||
+ | List of auxprop plugins follows | ||
+ | Plugin " | ||
+ | supports store: yes</ | ||
+ | - Ausgabe der **Serverseitigen Authentifizierungsplugins (SASL)** < | ||
+ | PLAIN LOGIN ANONYMOUS EXTERNAL | ||
+ | List of server plugins follows | ||
+ | Plugin " | ||
+ | SASL mechanism: PLAIN, best SSF: 0, supports setpass: no | ||
+ | security flags: NO_ANONYMOUS | ||
+ | features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION | ||
+ | Plugin " | ||
+ | SASL mechanism: LOGIN, best SSF: 0, supports setpass: no | ||
+ | security flags: NO_ANONYMOUS | ||
+ | features: | ||
+ | Plugin " | ||
+ | SASL mechanism: ANONYMOUS, best SSF: 0, supports setpass: no | ||
+ | security flags: NO_PLAINTEXT | ||
+ | features: WANT_CLIENT_FIRST</ | ||
+ | - Ausgabe der **Clientseitigen Authentifizierungsplugins (SASL)** < | ||
+ | PLAIN LOGIN ANONYMOUS EXTERNAL | ||
+ | List of client plugins follows | ||
+ | Plugin " | ||
+ | SASL mechanism: PLAIN, best SSF: 0 | ||
+ | security flags: NO_ANONYMOUS | ||
+ | features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION | ||
+ | Plugin " | ||
+ | SASL mechanism: LOGIN, best SSF: 0 | ||
+ | security flags: NO_ANONYMOUS | ||
+ | features: SERVER_FIRST | ||
+ | Plugin " | ||
+ | SASL mechanism: ANONYMOUS, best SSF: 0 | ||
+ | security flags: NO_PLAINTEXT | ||
+ | features: WANT_CLIENT_FIRST | ||
+ | Plugin " | ||
+ | SASL mechanism: EXTERNAL, best SSF: 0 | ||
+ | security flags: NO_ANONYMOUS|NO_PLAINTEXT|NO_DICTIONARY | ||
+ | features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION</ | ||
+ | |||
+ | ==== 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 | ||
+ | < | ||
+ | Version | ||
+ | Release | ||
+ | Install Date: Wed 21 Dec 2011 09:11:29 AM CET Build Host: c6b18n3.bsys.dev.centos.org | ||
+ | Group : System Environment/ | ||
+ | Size : 37616 License: BSD | ||
+ | Signature | ||
+ | Packager | ||
+ | URL : http:// | ||
+ | Summary | ||
+ | Description : | ||
+ | The cyrus-sasl-plain package contains the Cyrus SASL plugins which support | ||
+ | PLAIN and LOGIN authentication schemes. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== 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 | ||
+ | < | ||
+ | Version | ||
+ | Release | ||
+ | Install Date: Wed 18 Jan 2012 11:16:58 PM CET Build Host: c6b18n3.bsys.dev.centos.org | ||
+ | Group : System Environment/ | ||
+ | Size : 75024 License: BSD | ||
+ | Signature | ||
+ | Packager | ||
+ | URL : http:// | ||
+ | Summary | ||
+ | Description : | ||
+ | The cyrus-sasl-md5 package contains the Cyrus SASL plugins which support | ||
+ | CRAM-MD5 and DIGEST-MD5 authentication schemes. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | ==== 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 | ||
+ | < | ||
+ | Version | ||
+ | Release | ||
+ | Install Date: Wed 18 Jan 2012 11:19:41 PM CET Build Host: c6b18n3.bsys.dev.centos.org | ||
+ | Group : System Environment/ | ||
+ | Size : 18784 License: BSD | ||
+ | Signature | ||
+ | Packager | ||
+ | URL : http:// | ||
+ | Summary | ||
+ | Description : | ||
+ | The cyrus-sasl-ldap package contains the Cyrus SASL plugin which supports using | ||
+ | a directory server, accessed using LDAP, for storing shared secrets. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | ==== 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 | ||
+ | < | ||
+ | PLAIN LOGIN ANONYMOUS CRAM-MD5 DIGEST-MD5 EXTERNAL | ||
+ | List of server plugins follows | ||
+ | Plugin " | ||
+ | SASL mechanism: PLAIN, best SSF: 0, supports setpass: no | ||
+ | security flags: NO_ANONYMOUS | ||
+ | features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION | ||
+ | Plugin " | ||
+ | SASL mechanism: LOGIN, best SSF: 0, supports setpass: no | ||
+ | security flags: NO_ANONYMOUS | ||
+ | features: | ||
+ | Plugin " | ||
+ | SASL mechanism: ANONYMOUS, best SSF: 0, supports setpass: no | ||
+ | security flags: NO_PLAINTEXT | ||
+ | features: WANT_CLIENT_FIRST | ||
+ | Plugin " | ||
+ | SASL mechanism: CRAM-MD5, best SSF: 0, supports setpass: no | ||
+ | security flags: NO_ANONYMOUS|NO_PLAINTEXT | ||
+ | features: SERVER_FIRST | ||
+ | Plugin " | ||
+ | SASL mechanism: DIGEST-MD5, best SSF: 128, supports setpass: no | ||
+ | security flags: NO_ANONYMOUS|NO_PLAINTEXT|MUTUAL_AUTH | ||
+ | features: PROXY_AUTHENTICATION | ||
+ | </ | ||
+ | === SaSL Client-Plugins === | ||
+ | # pluginviewer -c | ||
+ | < | ||
+ | PLAIN LOGIN ANONYMOUS CRAM-MD5 DIGEST-MD5 EXTERNAL | ||
+ | List of client plugins follows | ||
+ | Plugin " | ||
+ | SASL mechanism: PLAIN, best SSF: 0 | ||
+ | security flags: NO_ANONYMOUS | ||
+ | features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION | ||
+ | Plugin " | ||
+ | SASL mechanism: LOGIN, best SSF: 0 | ||
+ | security flags: NO_ANONYMOUS | ||
+ | features: SERVER_FIRST | ||
+ | Plugin " | ||
+ | SASL mechanism: ANONYMOUS, best SSF: 0 | ||
+ | security flags: NO_PLAINTEXT | ||
+ | features: WANT_CLIENT_FIRST | ||
+ | Plugin " | ||
+ | SASL mechanism: CRAM-MD5, best SSF: 0 | ||
+ | security flags: NO_ANONYMOUS|NO_PLAINTEXT | ||
+ | features: SERVER_FIRST | ||
+ | Plugin " | ||
+ | SASL mechanism: DIGEST-MD5, best SSF: 128 | ||
+ | security flags: NO_ANONYMOUS|NO_PLAINTEXT|MUTUAL_AUTH | ||
+ | features: PROXY_AUTHENTICATION|NEED_SERVER_FQDN | ||
+ | Plugin " | ||
+ | SASL mechanism: EXTERNAL, best SSF: 0 | ||
+ | security flags: NO_ANONYMOUS|NO_PLAINTEXT|NO_DICTIONARY | ||
+ | features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION | ||
+ | </ | ||
+ | |||
+ | ===== 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, | ||
+ | # grep django /etc/shadow | ||
+ | |||
+ | | ||
+ | |||
+ | 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, | ||
+ | |||
+ | 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, | ||
+ | |||
+ | <WRAP round important> | ||
+ | |||
+ | Nur so ist sichergestellt, | ||
+ | |||
+ | ==== 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: | ||
+ | |||
+ | Der [[http:// | ||
+ | - 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:// | ||
+ | - **cyrus-sasl-plain** < | ||
+ | Version | ||
+ | Release | ||
+ | Install Date: Thu 09 Feb 2012 08:52:57 PM CET Build Host: c6b18n3.bsys.dev.centos.org | ||
+ | Group : System Environment/ | ||
+ | Size : 37616 License: BSD | ||
+ | Signature | ||
+ | Packager | ||
+ | URL : http:// | ||
+ | Summary | ||
+ | Description : | ||
+ | The cyrus-sasl-plain package contains the Cyrus SASL plugins which support | ||
+ | PLAIN and LOGIN authentication schemes. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | - **cyrus-sasl-md5** < | ||
+ | Version | ||
+ | Release | ||
+ | Install Date: Thu 09 Feb 2012 09:00:51 PM CET Build Host: c6b18n3.bsys.dev.centos.org | ||
+ | Group : System Environment/ | ||
+ | Size : 75024 License: BSD | ||
+ | Signature | ||
+ | Packager | ||
+ | URL : http:// | ||
+ | Summary | ||
+ | Description : | ||
+ | The cyrus-sasl-md5 package contains the Cyrus SASL plugins which support | ||
+ | CRAM-MD5 and DIGEST-MD5 authentication schemes. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | Anschließend starten wir unseren OpenLDAP-Server einmal durch. | ||
+ | # service slapd restart | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | Fragen wir nun die unterstützten SASL-Mechanismen ab, so werden uns die beiden gerade installierten Cyrus-SASL-Mechanismen, | ||
+ | # ldapsearch -LLL -ZZ -x -H ldap:// | ||
+ | |||
+ | < | ||
+ | dn: | ||
+ | supportedSASLMechanisms: | ||
+ | supportedSASLMechanisms: | ||
+ | supportedSASLMechanisms: | ||
+ | supportedSASLMechanisms: | ||
+ | </ | ||
+ | |||
+ | ==== SASL Authentifizierung mit technischem User ==== | ||
+ | Wie schon bei der Konfiguration des OpenLDAP-Servers, | ||
+ | === SASLAuthenticationUser === | ||
+ | Der Einfachheit halber wollen wir hierzu folgenden User in unserem DIT((**D**irectory **I**nformation **T**ree)) hinterlegen: | ||
+ | * **uid=SASLAuthenticationUser, | ||
+ | |||
+ | Zur sicheren Übertragung des Anmeldeschlüssels, | ||
+ | # vim / | ||
+ | <file bash / | ||
+ | delete: olcPasswordHash | ||
+ | olcPasswordHash: | ||
+ | - | ||
+ | add: olcPasswordHash | ||
+ | olcPasswordHash: | ||
+ | </ | ||
+ | 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 / | ||
+ | |||
+ | Enter LDAP Password: | ||
+ | | ||
+ | |||
+ | Die Konfiguration unseres // | ||
+ | # vim / | ||
+ | <file bash / | ||
+ | cn: SASLAuthenticationUser | ||
+ | sn: SASLAuthenticationUser | ||
+ | uid: SASLAuthenticationUser | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | userPassword: | ||
+ | structuralObjectClass: | ||
+ | authzTo: ldap:/// | ||
+ | </ | ||
+ | |||
+ | 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 | ||
+ | |||
+ | | ||
+ | |||
+ | 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 / | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Zum Schluß starten wir unseren OpenLDAP-Server wieder! | ||
+ | # service slapd start | ||
+ | |||
+ | | ||
+ | |||
+ | === SASL-Mappings === | ||
+ | Damit der OpenLDAP-Server überhaupt mit SASL Anfragen umgehen kann, müssen noch zwei Erweiterungen vorgenommen werden. | ||
+ | |||
+ | <WRAP round info> | ||
+ | |||
+ | - **olcAuthzRegexp** \\ Hierzu legen wir uns eine Konfigurationsdatei im *.LDIF-Format mit nachfolgendem Inhalt an. < | ||
+ | changetype: modify | ||
+ | add: olcAuthzRegexp | ||
+ | olcAuthzRegexp: | ||
+ | </ | ||
+ | modifying entry " | ||
+ | - **olcAuthzPolicy** \\ Hierzu legen wir uns eine Konfigurationsdatei im *.LDIF-Format mit nachfolgendem Inhalt an. < | ||
+ | changetype: modify | ||
+ | delete: olcAuthzPolicy | ||
+ | olcAuthzPolicy: | ||
+ | - | ||
+ | add: olcAuthzPolicy | ||
+ | olcAuthzPolicy: | ||
+ | modifying entry " | ||
+ | |||
+ | 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 " | ||
+ | |||
+ | Nach der Eingabe des oben gezeigten Befehles, geben wir noch das Passwort für unseren OpenLDAP-Server ein und erhalten dann als Antwort: | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | === 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, | ||
+ | <code bash> | ||
+ | # extended LDIF | ||
+ | # | ||
+ | # LDAPv3 | ||
+ | # base < | ||
+ | # filter: (objectclass=*) | ||
+ | # requesting: ALL | ||
+ | # | ||
+ | |||
+ | # {-1}frontend, | ||
+ | dn: olcDatabase={-1}frontend, | ||
+ | olcPasswordHash: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | olcDatabase: | ||
+ | olcAccess: {0}to attrs=userPassword, | ||
+ | olcAccess: {1}to dn=" | ||
+ | olcAccess: {2}to dn=" | ||
+ | olcAccess: {3}to dn.regex=" | ||
+ | olcAccess: {4}to dn.regex=" | ||
+ | olcAccess:: ezV9dG8gKiAgYnkgc23ursCh1kiS731nV0lLD3pPVsZiB3cml0ZSAgYnkgZG4uYmFz1uYXVzY2gsZGM9b3JnIiB3cml0ZSAgYnkgKiByZWFkIA== | ||
+ | olcAddContentAcl: | ||
+ | olcLastMod: TRUE | ||
+ | olcMaxDerefDepth: | ||
+ | olcReadOnly: | ||
+ | olcSchemaDN: | ||
+ | olcMonitoring: | ||
+ | |||
+ | # search result | ||
+ | search: 2 | ||
+ | result: 0 Success | ||
+ | |||
+ | # numResponses: | ||
+ | # numEntries: 1 | ||
+ | </ | ||
+ | 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 **// | ||
+ | Diese Datei legen wir im Verzeichnis // | ||
+ | # vim / | ||
+ | <file bash / | ||
+ | delete: olcAccess | ||
+ | olcAccess: {0} | ||
+ | olcAccess: {1} | ||
+ | olcAccess: {2} | ||
+ | olcAccess: {3} | ||
+ | olcAccess: {4} | ||
+ | olcAccess: {5} | ||
+ | - | ||
+ | add: olcAccess | ||
+ | olcAccess: to attrs=userPassword, | ||
+ | olcAccess: to dn=" | ||
+ | olcAccess: to dn=" | ||
+ | olcAccess: to dn=" | ||
+ | olcAccess: to dn.regex=" | ||
+ | olcAccess: to dn.regex=" | ||
+ | olcAccess: to * by self write by dn.base=" | ||
+ | </ | ||
+ | |||
+ | Anschließend ändern und aktivieren wir nun die Konfiguration unseres OpenLDAP-Servers, | ||
+ | # ldapmodify -W -x -D cn=config -f / | ||
+ | |||
+ | Enter LDAP Password: | ||
+ | | ||
+ | |||
+ | Abschließend überprüfen wir ob unsere Änderungen übernommen wurden. | ||
+ | # ldapsearch -W -x -D cn=config -b olcDatabase={-1}frontend, | ||
+ | <code bash> | ||
+ | Enter LDAP Password: | ||
+ | # extended LDIF | ||
+ | # | ||
+ | # LDAPv3 | ||
+ | # base < | ||
+ | # filter: (objectclass=*) | ||
+ | # requesting: ALL | ||
+ | # | ||
+ | |||
+ | # {-1}frontend, | ||
+ | dn: olcDatabase={-1}frontend, | ||
+ | olcPasswordHash: | ||
+ | objectClass: | ||
+ | objectClass: | ||
+ | olcDatabase: | ||
+ | olcAddContentAcl: | ||
+ | olcLastMod: TRUE | ||
+ | olcMaxDerefDepth: | ||
+ | olcReadOnly: | ||
+ | olcSchemaDN: | ||
+ | olcMonitoring: | ||
+ | olcAccess: {0}to attrs=userPassword, | ||
+ | | ||
+ | olcAccess: {1}to dn=" | ||
+ | olcAccess: {2}to dn=" | ||
+ | olcAccess: {3}to dn=" | ||
+ | olcAccess: {4}to dn.regex=" | ||
+ | | ||
+ | olcAccess: {5}to dn.regex=" | ||
+ | | ||
+ | olcAccess: {6}to * by self write by dn.base=" | ||
+ | |||
+ | # search result | ||
+ | search: 2 | ||
+ | result: 0 Success | ||
+ | |||
+ | # numResponses: | ||
+ | # numEntries: 1 | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Programmstart ===== | ||
+ | |||
+ | ==== erster manueller Start ==== | ||
+ | In RPM wird uns ein Startupscript mitgeliefert - über dieses starten wir unseren IMAP-Server. | ||
+ | |||
+ | # service cyrus-imapd start | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | Ob der Server läuft können wir einfach überprüfen. | ||
+ | # netstat -tulpen | grep 143 | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | Oder: | ||
+ | # lsof -i tcp:imap2 | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Als weiteren Test verbinden wir uns einfach mit Hilfe des Befehles **telnet** auf Port 143. Nach Eingabe einer Sequenz-Nummer, | ||
+ | # telnet localhost 143 | ||
+ | |||
+ | | ||
+ | | ||
+ | * 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 | ||
+ | | ||
+ | |||
+ | |||
+ | ==== 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 | ||
+ | |||
+ | | ||
+ | |||
+ | |||
+ | ===== System-/ | ||
+ | |||
+ | ==== Einlieferung via LMTP ==== | ||
+ | Genauso wie bei //SMTP// erfolgt bei // | ||
+ | * **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: | ||
+ | * Empfänger: **django@nausch.org** | ||
+ | |||
+ | Wir bauen also eine Verbindung zu unserem IMAP-Server auf Port **24** auf. | ||
+ | # telnet localhost 24 | ||
+ | < | ||
+ | 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:< | ||
+ | 250 2.1.0 ok | ||
+ | rcpt to:< | ||
+ | 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. | ||
+ | </ | ||
+ | ==== imtest ==== | ||
+ | Mit dem Programm **imtest** aus dem Paket // | ||
+ | === 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. | ||
+ | < | ||
+ | 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 | ||
+ | </ | ||
+ | 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 | ||
+ | < | ||
+ | 01 OK Completed | ||
+ | Connection closed. | ||
+ | </ | ||
+ | |||
+ | === 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 "" | ||
+ | < | ||
+ | * LIST (\HasNoChildren) "/" | ||
+ | * LIST (\HasNoChildren) "/" | ||
+ | 01 OK Completed (0.000 secs 4 calls) | ||
+ | </ | ||
+ | |||
+ | Dann fragen wir den Status unserer Mailbox ab: | ||
+ | 02 SELECT INBOX | ||
+ | < | ||
+ | * 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 | ||
+ | </ | ||
+ | |||
+ | 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) | ||
+ | |||
+ | < | ||
+ | 03 OK Completed | ||
+ | </ | ||
+ | |||
+ | 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[]) | ||
+ | |||
+ | < | ||
+ | Return-Path: | ||
+ | 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: < | ||
+ | |||
+ | Ahoi, | ||
+ | das ist eine Testmail, eingeliefert via telnet imap-server auf Port 24 | ||
+ | ) | ||
+ | 04 OK Completed (0.000 sec) | ||
+ | </ | ||
+ | Zum Schluß melden wir uns wieder von unserem IMAP-Server ab. | ||
+ | |||
+ | 05 LOGOUT | ||
+ | < | ||
+ | 05 OK Completed | ||
+ | Connection closed. | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ====== Links ====== | ||
+ | * **[[centos: | ||
+ | * **[[wiki: | ||
+ | * **[[http:// | ||
+ | |||