Die Installation von cyrus funktioniert bei Debian schon fast komplett inklusive aller Einstellungen von alleine. In der Standardkonfiguration geschieht die Authentifikation über sasldb, was zur Folge hat, daß man Mailbenutzer nicht auf dem System als „echte“ Benutzer führen muß.
In diesem Howto soll auch die Benutzerführung per LDAP besprochen und erklärt werden.
cyrus ist installiert und läuft mit der Standardkonfiguration. Hier findet Ihr ein Howto, wie man cyrus und exim4 miteinander verbindet.
Installation folgender Pakete:
apt-get install cyrus-admin-2.2 cyrus-common-2.2 cyrus-imapd-2.2
Die Konfiguration von cyrus besteht prinzipiell aus zwei Teilen. In der /etc/cyrus.conf werden die Dienste / Services, Proxy usw., in der /etc/imap.conf der Zugang, SSL usw. konfiguriert.
Zu Beginn aktiviert man die benötigten Dienste (IMAP, IMAPs, POP, POPs usw.). Dieses wird in der Datei /etc/cyrus.conf ab etwa der Zeile 30 unter dem Stichpunkt SERVICES.
<file bash|/etc/cyrus.conf> ## Zeile 32
imap cmd="imapd -U 30" listen="imap" prefork=0 maxchild=100
## imaps aktivieren
imaps cmd="imapd -s -U 30" listen="imaps" prefork=0 maxchild=100
## ——- ## pop3 aktivieren
#pop3 cmd="pop3d -U 30" listen="pop3" prefork=0 maxchild=50
#pop3s cmd="pop3d -s -U 30" listen="pop3s" prefork=0 maxchild=50
## ——- </file>
Um den Zugang zu timsieve-Dienst, dem Dienst zur Filtereinstellung 1), auch aus dem Netzwerk erreichbar zu machen, muß folgende Zeile in der /etc/cyrus.conf geändert werden:
<file bash|/etc/cyrus.conf>
## Zeile 47
sieve cmd="timsieved" listen="sieve" prefork=0 maxchild=100
## ————– </file>
Damit bei einer Suche in den Mailboxen von einem Client nicht alle Mails einzeln aufgerufen werden und durchsucht werden müssen, gibt es die Möglichkeit einen Index zu erstellen. Diese Aufgabe erledigt squatter. Es wird im Bereich EVENTS { der cyrus.conf aktiviert:
<file|/etc/cyrus.conf – Zeile 83>
# reindex changed mailboxes (fulltext) approximately every other hour
squatter_1 cmd="/usr/bin/nice -n 19 /usr/sbin/squatter -s" period=120
</file>
Nun muß die detaillierte Konfiguration des Servers erfolgen. Diese erfolgt in der Datei /etc/imap.conf.
Zur Konfiguration der IMAP-Einstellungen, Authentifizierungsverfahren und weiteres muß man die Datei /etc/imapd.conf editieren.
UNIX Hierarchy Convention ermöglicht Benutzer mit Punkt (z.B. foo.bar@foobar.fb). Der Punkt wird auf Dateiebene in “^“ umgewandelt:
<file bash|/etc/imap.conf>
## Zeile 28 ändern
unixhierarchysep: yes
</file>
Der Nutzer cyrus wird der Administrator. Es können auch weitere oder andere Benutzer zu Administratoren werden. <file bash|/etc/imap.conf> ## Zeile 53 auskommentieren admins: cyrus </file>
Ein Wert größer al Null setzt einen Quota. Ein Wert der nicht 0 ist, erlaubt dem Benutzer das anlegen seiner eigenen INBOX
<file bash|/etc/imap.conf – Zeile 102>
autocreatequota: -1
</file>
Benutzerspezifische sieve Regeln können zwar erstellt werden, aber es werden keine im Home-Verzeichnis ausgewertet. <file bash|/etc/imap.conf – Zeile 102> # If enabled, cyrdeliver will look for Sieve scripts in user's home # directories: ~user/.sieve. sieveusehomedir: false </file>
Dieses sollte abgeschaltet bleiben, da alle Nutzer die sieve-Filterregeln ins System selber einplegen sollen (Sicherheitsgründe) und es virtuelle Nutzer gibt, die kein Home-Verzeichnis besitzen.
Nachrichten, die an mehrere Empfänger gesendet werden, werden nur einmal gespeichert. <file bash|/etc/imap.conf – Zeile 130> # If you want to enable a single instance store (messages sent to multiple # recipients are only saved once), create or enable the following option: singleinstancestore: yes </file>
: Funktioniert noch nicht. Muß ich mir nochmal anschauen.
Es soll der MAIL- und SIEVE Notifikationsdienst aktiviert werden: <file bash|/etc/imap.conf> ## Zeile 107 auskommentieren # notifyd(8) method to use for „MAIL“ notifications. If not set, „MAIL“ # notifications are disabled. Valid methods are: null, log, zephyr mailnotifier: zephyr
# notifyd(8) method to use for „SIEVE“ notifications. If not set, „SIEVE“ # notifications are disabled. This method is only used when no method is # specified in the script. Valid methods are null, log, zephyr, mailto sievenotifier: zephyr </file>
Wenn man virtuelle Domains nutzen möchte und diese auf der gleichen IP zusammenführen möchte, so muß man diese auflisten.
Hier wird beschrieben, wie man mit Cyrus domainspezifische Benutzer verwalten kann. Das bedeutet, daß es den Benutzer foo mehrmals geben kann. Denn entscheidend ist der Domainname. Dabei werden die Benutzer immer mit der gesamten Mailadresse angelegt (z.B. foo@bar.foo)
Es müssen alle Domains gelistet werden, für die dieser Cyrus-Server zuständig ist. <file bash|/etc/imap.conf – Zeile 159> loginrealms: domain1.com domain2.net </file>
Diese Option muß nur in Außnamefällen geändert werden (siehe Dukumentation) <file bash|/etc/imap.conf – Zeile 169> #virtdomains: userid </file>
Diese Domain wird genommen, wenn die Domain eines Benutzers nicht erkannt wird oder der Reverse-lookup der IP-Adresse nicht funktioniert hat. <file bash|/etc/imap.conf – Zeile 175> #defaultdomain: </file>
Hier wird die Sache nun Komplizierter, da es viele Möglichkeiten gibt die Benutzer zu Authentifizieren. Ich haber daher diese Möglichkeiten ausgegliedert, da ansonsten dieses Howto zu unübersichtlich werden würde.
Nach dem Klicken eines der folgenden Links gelangt man zu den verschiedenen Methoden und wird am Ende wieder zurück an diese Stelle geleitet. Auch ist es möglich von dort aus eine der anderen Methoden auszuwählen.
Jede Methode hat ihre Vor- und Nachteile. Diese versuche ich hier in Kürze zusammenzufassen. Gemein haben sie alle, daß sie über die Zwischenschicht von sasl laufen. Cyrus bietet auch eine direkte Anbindung an zum Beispiel LDAP an. Dieses bespreche ich hier nicht, da SASL sich als flexibelster Vertreter herausgestellt hat.
Die erforderliche Sicherheit der Passwörter und Übertragung der Mails erreicht man durch den Einsatz von Verschlüsselung. Um diese nutzen zu können muß man Cyrus mit Zertifikaten ausstatten. Wenn man keine kaufen möchte – die Preise sind sehr hoch – dann muß man sich seine eigene CA bauen. Dieses wird in einem anderen HowTo beschrieben.
Die Konfigurationsdatei von Cyrus bietet eine sehr detaillierte Möglichkeit Zertifikate einzurichten. Jeder Teildienst (POP3/IMAP/SIEVE…) kann ein eigenes Zertifikat besitzen. Hier wird nur eines für alle Dienste benutzt. Es kann aber durchaus sinnvoll sein, ein gesondertes LMTP-Zertifikat zu erstellen und die Kommunikation mit Exim fester zu binden.
Das Erstellen eines Zertifikates wird ebenfall in dem oben angegebenen HowTo beschrieben.
Man muß das öffentliche Zertifikat der Root-CA und den öffentlichen und privaten Schlüssel für Cyrus auf den Server kopieren. Es bietet sich dafür das vom Paket openssl angelegte Verzeichnis an.
apt-get install openssl cp <cacert> /etc/ssl/ cp <cyruscert> /etc/ssl/mycert/ cp <cyruskey> /etc/ssl/private/ chmod og-rwx /etc/ssl/private/*
Das Verzeichnis /etc/ssl/private/ muß für alle lesbar sein. Das sollte eigentlich nicht so Konfiguriert werden, aber anders ist es nicht möglich, daß Cyrus seinen privaten Schlüssel lesen kann.
Es ist zu beachten, daß man die Dateirechte so eingeschränkt wie möglich setzt.
chmod a+rx /etc/ssl/private chown cyrus.mail <cyruskey> chmod 600 <cyruskey>
Nun müssen die Zertifikate in der Konfigurationsdatei angegeben werden.
<file bash|/etc/imap.conf – Zeile 204> # File containing the global certificate used for ALL services (imap, pop3, # lmtp, sieve) tls_cert_file: /etc/ssl/mycerts/ssl-cert-snakeoil.pem
# File containing the private key belonging to the global server certificate. tls_key_file: /etc/ssl/private/ssl-cert-snakeoil.key
# File containing one or more Certificate Authority (CA) certificates. tls_ca_file: /etc/ssl/bithammer_cacert.pem
# Path to directory with certificates of CAs. tls_ca_path: /etc/ssl/certs </file>
Es werden die erlaubten SSL/TLS Verschüsselungsalgorithmen in absteigender Reihenfolge angegeben. <file bash|/etc/imap.conf – Zeile 262> # The list of SSL/TLS ciphers to allow, in decreasing order of precedence. # The format of the string is described in ciphers(1). The Debian default # selects TLSv1 high-security ciphers only, and removes all anonymous ciphers # from the list (because they provide no defense against man-in-the-middle # attacks). It also orders the list so that stronger ciphers come first. # tls_cipher_list: TLSv1+HIGH:!aNULL:@STRENGTH # Einstellung von http://www.doorbot.com/guides/sendmail/securemail/ tls_cipher_list: SSLv3:SSLv2:TLSv1:!NULL:!EXPORT:!DES:!LOW:@STRENGTH </file>
Nun kann man für die Benutzer mit Hilfe des Programmes cyradm die Mailboxen anlegen. Dabei ist eventuell zu beachten, daß der hostname des Cyrus-Administrators angegeben werden muß – anstatt localhost:
cyradm --user cyrus localhost
Daraufhin erhält man eine Konsole mit der man die Mailboxen erstellen kann. Mit help kann man sich die zur Verfügung stehenden Befehle anzeigen lassen.
cm user/<neuerNutzer> ... oder cm user/<foo.bar@foobar.fo> ... oder, wenn man keine 'altnamespaces' nutzt cm user.<Benutzername>
Ich habe das Standard syslog-Paket auf syslog-ng umgestellt. Tja… warum eigentlich??? Naja… muß ich wohl nochmal recherchieren!
Bei mir läuft syslog-ng. Zumindest in dieser Konfiguration wird der Output von Cyrus in das mail.log und syslog geschreiben. Dieses produziert nicht nur unnötig große Logdateien, sondern macht diese auch unübersichtlich.
Um diesem Treiben entgegenzuwirken, muß man folgende Änderung vornehmen.
<file bash|/etc/syslog-ng/syslog-ng.conf> # all messages except from the auth and authpriv facilities filter f_syslog { not facility(auth, authpriv) and not match(cyrus); }; # ———————- </file>
Dieses bewirkt aber, daß keine Ausgabe von Cyrus mehr ins Syslog geschrieben wird!
Wenn man ein eigenes Log für Cyrus haben möchte, dann muß man andere Änderungen vornehmen.
<file bash|/etc/syslog-ng/syslog-ng.conf>
destination cyrus { file("/var/log/mail/cyrus"); };
filter f_cyrus { match(cyrus); }; #dodany filtr cyrusa
filter not_log { not match(cyrus) and not facility(mail); }; #dodany filtr nie wrzucajacy powyzszych do sysloga
#bylo: log { source(src); filter(f_syslog); destination(syslog); };
log { source(src); filter(f_syslog); filter(not_log); destination(syslog); }; #dodane logi pocztowe
log { source(src); filter(f_cyrus); destination(cyrus); };
</file>
Dabei müssen die source-Einträge eventuell angepaßt werden.
Gefunden: http://lists.pld-linux.org/mailman/pipermail/pld-users-pl/2005-February/048665.html
: notify, ….
: Ab hier nicht überarbeitet!!!
Um sich in sieve einzuloggen, muß man natürlich einen Account haben. Zudem muß man, wenn man nicht als der Nutzer auf dem Server eingeloggt ist, als den man sich in sieve anmelden möchte, mit
# timsieve -u <user> -a <user> -p
anmelden.
Oct 18 21:16:29 server cyrus/imap[20216]: SQUAT failed to open index file Oct 18 21:16:29 server cyrus/imap[20216]: SQUAT failed
Es fehlt eine Indexdatei. Wie man sie erstellen lassen kann, findet man hier.
AnkerLink