cyrusv2 und nicht-existente User
Eine Sache, die verdammt nervig ist: sendmail nimmt Mail entgegen, und als confLOCAL_MAILER ist cyrusv2 definiert; sendmail übergibt diese Mails, jedoch prüfen weder er noch der cyrus, ob die Empfängeradresse tatsächlich existiert. Existiert sie nicht, wird postmaster benachrichtigt – was im Ernstfall für einen Overhead von mehreren 100 Mails pro Tag führen kann.
Schauen wir uns das einmal genauer an: ich habe einen User mary, der eine lokale cyrus-Mailbox hat; den User blafasel gibt es nicht.
$ /usr/sbin/sendmail -bv mary
mary... deliverable: mailer cyrusv2, user mary
$ /usr/sbin/sendmail -bv blafasel
mary... deliverable: mailer cyrusv2, user blafasel
Sprich: dem sendmail ist es völlig egal, der schiebt alles an cyrus weiter. Um das zu verhindern, sind einige Änderungen an der Konfiguration nötig – in erster Linie benötigen wir ein zusätzliches FEATURE-File für den sendmail:
$ cd /usr/share/sendmail-cf/feature/
$ wget http://www.bsdbox.de/downloads/emailserver/ckuser_cyrus.m4
In meinem Fall musste dieses File ein wenig modifiziert werden; mein cyrus (unter Fedora) legt all seine Sockets nach /var/lib/imap/socket/, das File gibt einen anderen Default-Wert aus:
14c14
< ifelse(len(X`'_ARG_), `1', `local:/var/lib/imap/socket/smmapd', _ARG_))
---
> ifelse(len(X`'_ARG_), `1', `local:/var/imapd/socket/smmapd', _ARG_))
Also den Pfad zum Socket entsprechend anpassen und sich merken (!). Als nächstes muss die Konfiguration des sendmail angepasst werden; hierzu wird die sendmail.mc editiert und ziemlich am Ende (nach define(confLOCAL_MAILER’,cyrusv2')dnl) folgendes hinzugefügt:
FEATURE(`ckuser_cyrus')dnl
Anschließend die sendmail.cf neu generieren:
$ m4 sendmail.mc > sendmail.cf
Zuletzt muss auch dem cyrus gesagt werden, dass er etwas mit diesem Socket zu tun hat; anzupassen ist /etc/cyrus.conf, meine sieht beispielsweise nun so aus:
START {
recover cmd="ctl_cyrusdb -r"
idled cmd="idled"
}
SERVICES {
##imap cmd="imapd" listen="imap" prefork=5
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
##nntp cmd="nntpd" listen="nntp" prefork=3
##nntps cmd="nntpd -s" listen="nntps" prefork=1
##lmtp cmd="lmtpd" listen="lmtp" prefork=0
lmtpunix cmd="lmtpd" listen="/var/lib/imap/socket/lmtp" prefork=1
smmapd cmd="smmapd" listen="/var/lib/imap/socket/smmapd" prefork=1
##notify cmd="notifyd" listen="/var/lib/imap/socket/notify" proto="udp" prefork=1
}
EVENTS {
checkpoint cmd="ctl_cyrusdb -c" period=30
delprune cmd="cyr_expire -E 3" at=0400
tlsprune cmd="tls_prune" at=0400
squatter cmd="/usr/lib/cyrus-imapd/squatter -r *" period=120
}
Nun den cyrus neu starten – aufmerksam das Logfile beobachten! Kommen keine Fehlermeldungen (beziehungsweise nach Behebung eventueller Fehler) kann nun auch der sendmail durchgestartet werden. Auch hier alles okay? Nun denn – ein Testlauf:
$ /usr/sbin/sendmail -bv mary
mary... deliverable: mailer cyrusv2, user mary
$ /usr/sbin/sendmail -bv blafasel
blafasel... Mailbox is not available.
That’s great!
Hinterlasse einen Kommentar
Ich freue mich über jeden Kommentar, es sei denn, er ist blöd.
Deshalb sind die Kommentare auf dieser Seite auch generell moderiert.