Cyrus Imapd
Wir werden hier beschreiben, wie man Cyrus Version 2.2 installiert. Ziel wird es sein, Cyrus zu installieren, Sieve zu konfigurieren, ein MySQL Backend einzurichten und das ganze noch mit Sendmail als Mailer zu verknüpfen.
Inhaltsverzeichnis |
Installation von Cyrus
Am einfachsten ist es wieder via ports:
-su-2.05b# cd /usr/ports/mail/cyrus-imapd22 -su-2.05b# make install clean
Dabei wird auch das Cyrus-SASL Paket installiert, welches wir später benötigen.
Bei der Auswahl habe ich folgendes ausgewählt:
?????????????????????????????????????????????????????????????????????? ? Options for cyrus-imapd 2.2.12_1 ? ? ?????????????????????????????????????????????????????????????????? ? ? ? [ ] AUTH_KRB5 Use Kerberos5 authorization module ? ? ? ? [ ] BDB_3 Use BerkeleyDB v3 ? ? ? ? [ ] BDB_4 Use BerkeleyDB v4 ? ? ? ? [ ] BDB_41 Use BerkeleyDB v4.1 ? ? ? ? [ ] BDB_42 Use BerkeleyDB v4.2 ? ? ? ? [X] BDB_43 Use BerkeleyDB v4.3 ? ? ? ? [ ] DRAC Enable DRAC support ? ? ? ? [ ] IDLE_IDLED Enable IMAP IDLE method idled ? ? ? ? [X] IDLE_POLL Enable IMAP IDLE method idle-polling ? ? ? ? [ ] LDAP_PTLOADER Enable LDAP ptloader (experimantal) ? ? ? ? [ ] LISTEXT Enable IMAP List extensions ? ? ? ? [ ] MURDER Enable IMAP Murder support ? ? ? ? [ ] NETSCAPEHACK Enable X-NETSCAPE extensions ? ? ? ? [ ] NNTP Enable NNTP support ? ? ? ? [ ] SNMP_4 Enable SNMP support using net-snmp v4 ? ? ? ? [ ] SNMP_5 Enable SNMP support using net-snmp v5 ? ? ? ? [ ] PASS8BITHACK Add pass8bit option (not recommended) ? ? ?????????????????????????????????????????????????????????????????????? ? [ OK ] Cancel ? ??????????????????????????????????????????????????????????????????????
Anschliessend dürfen wir die Datei /etc/services editieren. Dazu fügen wird folgenden Eintrag hinzu:
sieve 2000/tcp # Sieve Protokoll
Mit der Abhängigkeit wird gleichzeitig noch Cyrus-Sasl installiert. Da wir ja WITH_MYSQL=yes in /etc/make.conf definiert haben, wird Sasl mit MySQL Unterstützung kompiliert, was wir ja so möchten.
Anpassungen für Cyrus im /etc/rc.conf
Im /etc/rc.conf fügen wir folgendes hinzu:
cyrus_imapd_enable="YES"
Paar Worte zu PAM
Mit dem neuen MySQL Plugin für SASL ist es nicht mehr nötig, PAM zu benutzen. Man kann sich also saslauthd_enable="YES" und saslauthd_flags="-a PAM" ersparen.
Anpassen der imapd.conf und erstellen der Verzeichnisstrukturen
Um weiterzufahren, muss man das File /usr/local/etc/imapd.conf anpassen. Welche Änderungen man alle machen kann, erfährt man, indem man man imapd.conf eingibt. Leider fehlen die sasl_sql_* Direktiven. Meine Version sieht etwa so aus:
configdirectory: /var/imap partition-default: /var/spool/imap allowplaintext: yes timeout: 30 poptimeout: 10 admins: root admin autocreatequota: 0 duplicatesuppression: yes reject8bit: no sieveusehomedir: false sievedir: /var/imap/sieve postmaster: postmaster sieve_maxscriptsize: 64 sieve_maxscripts: 5 sasl_pwcheck_method: auxprop sasl_auxprop_plugin: sql sasl_sql_engine: mysql sasl_sql_hostnames: localhost sasl_sql_user: sqlusername sasl_sql_passwd: sqlpassword sasl_sql_database: cyrus sasl_sql_verbose: no sasl_sql_select: SELECT password FROM cyrus_email WHERE username = '%u' AND active='1' sasl_sql_usessl: 0 sasl_mech_list: login plain cram-md5 digest-md5 tls_cert_file: /var/imap/server.pem tls_key_file: /var/imap/server.pem tls_ca_file: /var/imap/server.pem
Das File /usr/local/etc/cyrus.conf muss in der Regel nicht modifziert werden. Es beschreibt, welche Daemons gestartet werden sollen (z.B. imap, imaps, pop3s, etc.)
Anschliessend fürt man als root folgenden befehl aus:
-su-2.05b# /usr/local/cyrus/bin/mkimap reading configure file... i will configure directory /var/imap. i saw partition /var/spool/imap. done configuring /var/imap... creating /var/spool/imap... done -su-2.05b#
Somit wäre mal das Grundgerüst von Cyrus erstellt.
SSL Zertifikat installieren
Jetzt packen wir fürs TLS noch ein selbstgestriktes SSL Zertifikat rein:
-su-2.05b# rm /var/imap/server.pem -su-2.05b# openssl req -new -x509 -nodes -out /var/imap/server.pem -keyout /var/imap/server.pem -days 365 Generating a 1024 bit RSA private key .++++++ .......++++++ writing new private key to '/var/imap/server.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:CH State or Province Name (full name) [Some-State]:Zurich Locality Name (eg, city) []:Zurich Organization Name (eg, company) [Internet Widgits Pty Ltd]:Glogger Net Organizational Unit Name (eg, section) []:Security Team Common Name (eg, YOUR name) []:daisy.mrmouse.ch <--Wichtig: muss gleich Servername sein! Email Address []:meine@emailadresse.com -su-2.05b#
Das Zertifikat sieht am Schluss etwa aus aus:
-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQCyJ87pT3UFpNqxWugX1Xfe/sLSuurSvs4ESwCHHIGpemvNpG// ... ... jI0FoB9Mc6zFDYBL7qbamWBznjusYIXV2BkdCG6HY+bb -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIDuDCCAyGgAwIBAgIJAN9wMghc+ESVMA0GCSqGSIb3DQEBBAUAMIGaMQswCQYD VQQGEwJDSDEPMA0GA1UECBMGWnVyaWNoMQ8wDQYDVQQHEwZadXJpY2gxFjAUBgNV ... ... nYwGNkD1wZzHAkILCtX6+W2DqC4qvJGrbhEC8/hj9mCBuREcepvMp1qZ8khsv1G8 Vhbp+65LRBPc48Yxv5qj5FznGh/
Da kann man sich leicht ausmalen, wie man ein gekauftes Zertifikat installieren muss.
Einrichten von Cyrus ans MySQL-Backend
Wichtig ist, dass Cyrus-Sasl mit MySQL Unterstützung (WITH_MYSQL=Yes -> am Besten ins /etc/make.conf) kompiliert wurde. Für den POP und IMAP zugriff sind die entsprechenden Direktiven schon im /usr/local/etc/imapd.conf angepasst worden:
... sasl_sql_engine: mysql sasl_sql_hostnames: localhost sasl_sql_user: sqlusername sasl_sql_passwd: sqlpassword sasl_sql_database: cyrus sasl_sql_verbose: no sasl_sql_select: SELECT password FROM cyrus_email WHERE username = '%u' AND active='1' sasl_sql_usessl: 0 ...
Damit das ganze auch funktioniert, müssen wir eine Tabelle haben, wo wir die Benutzernamen und Passwörter speichern können:
CREATE TABLE `cyrus_email` ( `id` int(11) NOT NULL auto_increment, `username` varchar(50) NOT NULL default , `password` varchar(50) NOT NULL default , `real_name` varchar(150) NOT NULL default , `active` tinyint(4) NOT NULL default '1', PRIMARY KEY (`id`), UNIQUE KEY `id_2` (`id`), KEY `id` (`id`) );
Syslog Anpassung
Ich will, dass er nicht die ganzen Logs im /var/log/messages abspeichert, sondern in ein separtes File /var/log/imapd.log Dazu packe ich folgende Zeile ins /etc/syslog.conf rein:
local6.debug /var/log/imapd.log
Erstelle die Datei:
-su-2.05b# true > /var/log/imapd.log
Und restarte anschliessend syslog:
-su-2.05b# /etc/rc.d/syslogd restart Stopping syslogd. Starting syslogd. -su-2.05b#
Sendmail
Hier schreit jetzt das halbe Internet, aber ich persönlich bevorzuge Sendmail. Wer Postfix, Exim oder gar QMail nutzen möchte, darf dies selbstverständlich machen. Um weiterzumachen, empfehle ich das Kapitel Sendmail zu lesen.
Administration von Cyrus
Das wichtigste Tool für die Adminstration von Cyrus ist das cyradm Tool. Sollte das tool nicht funktionieren, könnte es daran liegen, dass ein gewissen Perl modul fehlt. Diese am besten nachinstallieren:
-su-2.05b# /usr/ports/mail/pear-Net_Cyrus -su-2.05b# make install clean
Cyradm
am einfachsten ruft man es in der Shell auf:
-su-2.05b# cyradm localhost Password: localhost>
Hier die wichtigsten Befehle, die man brauchen kann - für eine Komplette übersicht empfehle ich man cyradm:
- Erstellen einer Mailbox: cm user.steven
- Anschauen von Berechtigungen: lam user.steven
- Löschen einer Mailbox (evlt. vorher noch Berechtigung dafür anpassen): dm user.steven.
Beim Löschen muss man darauf achten, dass man vorher das deleteright (siehe deleteright in /usr/local/etc/imapd.conf) setzt. Also z.B. sam user.steven admin c
Probleme mit Cyrus / Tips & Tricks
ctl_cyrusdb bringt ERROR
Bei der Installation mit DB3 habe ich schon mal gesehen, dass folgender Fehler aufgetreten (periodisch mit ctl_cyrusdb alle 30 Minuten oder bei Start/Stop/Restart des Cyrus imapd):
Sep 15 20:43:46 testserver master[40252]: process started Sep 15 20:43:46 testserver master[40253]: about to exec /usr/local/cyrus/bin/ctl_cyrusdb Sep 15 20:43:47 testserver ctl_cyrusdb[40253]: recovering cyrus databases Sep 15 20:43:47 testserver ctl_cyrusdb[40253]: skiplist: recovered /var/imap/mailboxes.db (476 records, 73580 bytes) in 0 seconds Sep 15 20:43:47 testserver ctl_cyrusdb[40253]: skiplist: recovered /var/imap/annotations.db (0 records, 144 bytes) in 0 seconds Sep 15 20:43:47 testserver ctl_cyrusdb[40253]: done recovering cyrus databases Sep 15 20:43:47 testserver master[40252]: ready for work Sep 15 20:43:47 testserver master[40254]: about to exec /usr/local/cyrus/bin/ctl_cyrusdb Sep 15 20:43:47 testserver ctl_cyrusdb[40254]: checkpointing cyrus databases Sep 15 20:43:47 testserver ctl_cyrusdb[40254]: archiving database file: /var/imap/annotations.db Sep 15 20:43:47 testserver ctl_cyrusdb[40254]: DBERROR: error listing log files: DB_NOTFOUND: No matching key/data pair found Sep 15 20:43:47 testserver master[40252]: process 40254 exited, status 1 Sep 15 20:43:47 testserver ctl_cyrusdb[40254]: DBERROR: archive /var/imap/db: cyrusdb error Sep 15 20:43:47 testserver ctl_cyrusdb[40254]: archiving database file: /var/imap/mailboxes.db Sep 15 20:43:47 testserver ctl_cyrusdb[40254]: DBERROR: error listing log files: DB_NOTFOUND: No matching key/data pair found Sep 15 20:43:47 testserver ctl_cyrusdb[40254]: DBERROR: archive /var/imap/db: cyrusdb error Sep 15 20:43:47 testserver ctl_cyrusdb[40254]: done checkpointing cyrus databases Sep 15 20:45:44 testserver master[40252]: exiting on SIGTERM/SIGINT
Ich konnte dies lösen, indem ich nochmal ins /usr/ports/mail/cyrus-imapd22 gewechselt habe, und anstelle DBD_3 nun DBD_43 ausgewählt habe:
-su-2.05b# cd /usr/ports/mail/cyrus-imapd22 -su-2.05b# make config ... lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x Options for cyrus-imapd 2.2.12_1 x x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x x x ... (andere optionen) ... x x x x [X] BDB_43 Use BerkeleyDB v4.3 x x x x ... (andere optionen) ... x x tqmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjqu x [ OK ] Cancel x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj ...
Dann hiess es, den alten Source nocheinmal zu deinstallieren:
-su-2.05b# make deinstall clean
Und anschliessend das ganze neu zu installieren
-su-2.05b# make install clean
(wer will, kann hier auch mit make FORCE_PKG_REGISTER=yes install das ganze überschreiben)
Weblinks
Cyrus Imapd
- Cyrus Homepage
- Cyrus Wiki
- Managing IMAP: Chapter 9: Cyrus System Administration
- Gutes Howto für Sendmail mit Milter, AMaViS, Cyrus IMAP + SSL, Anti Spam
- Automatisches erstellen von Mailboxen bei Login oder E-Mail
- Diverse nützliche Patches für Cyrus