Cyrus Imapd

Aus Wiki.hidden.ch
Wechseln zu: Navigation, Suche

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.


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 Sasl