Nachdem die Grundvorraussetzungen im ersten Teil geschaffen wurden, wenden wir uns in diesem Teil der Anpassung, Installation und Konfiguration von dovecot zu. Obwohl fast alles im Blog detailliert beschrieben ist, empfehle ich, die Konfigurationsdateien für das Mailsystem herunterzuladen.
Installation von Dovecot
Nach einem
sudo apt-get install dovecot-common dovecot-imapd dovecot-pop3d
sind die notwendigen Dovecot-Pakete installiert.
Anpassung der Installation
Dovecot verwendet zur Zustellung von Mails den Dovecot Local Delivery Agent (LDA). Damit dieser die Mails in allen Verzeichnissen der Benutzer ablegen kann, benötigt er root-Rechte, die wir über das Setuid-Bit vergeben. Zum Mailversand setzen wir jedoch exim als Message Transfer Agent (MTA) ein, so dass Mails nie direkt via Dovecot-LDA, sondern immer indirekt über exim zugestellt werden. Da deshalb nur exim den Dovecot LDA aufrufen muss, wäre es sicherheitstechnisch bedenklich, könnte jeder Benutzer den Dovecot LDA mit Setuid-Bit aufrufen (eine Sicherheitslücke im Dovecot LDA würde dann sofort das gesamte System kompromittieren). Deshalb richten wir einen speziellen Benutzer namens secmail ein, der diese Rechte besitzt und dessen sich exim dann bedienen soll.
sudo adduser --system --group --disabled-login --shell /bin/false --home /home/secmail secmail
Anschließend müssen wir für unsere Konfiguration das setuid-Bit für Dovecots LDA setzen, damit dieser zur Zustellung jeweils auf die jeweilige Benutzer-ID wechseln kann. Durch den Aufruf von dpkg-statoverride werden die Berechtigungen auch bei Paketaktualisierungen beibehalten, obwohl der Einsatz auch einige Nachteile mit sich bringt.
sudo dpkg-statoverride --update --add root secmail 4710 /usr/lib/dovecot/deliver
Konfiguration von dovecot
Zunächst kopieren wir die im ersten Teil der Anleitung erzeugten Dateien des Client-Zertifikats für dovecot in das Konfigurationsverzeichnis und passen die Berechtigungen an.
sudo cp /etc/ssl/easy-rsa/keys/dovecot-client.key /etc/ssl/easy-rsa/keys/dovecot-client.crt /etc/dovecot
sudo chown root.dovecot /etc/dovecot/dovecot-client.{key,crt}
sudo chmod 640 /etc/dovecot/dovecot-client.key
Die Konfiguration von dovecot ist im Vergleich zu anderen Mailservern wie qmail, courier-imap oder cyrus einfach und gut dokumentiert. Meine um Kommentare und Leerzeilen verkürzte Version sieht so aus:
protocols = imap imaps managesieve
log_path = /var/log/dovecot.log
log_timestamp = "%Y-%m-%d %H:%M:%S "
ssl_cert_file = /etc/ssl/certs/myserver.crt
ssl_key_file = /etc/ssl/private/myserver.key
ssl_ca_file = /etc/ssl/certs/ca.crt
ssl_verify_client_cert = yes
login_user = dovecot
login_greeting = Ready.
mail_privileged_group =
protocol imap {
login_executable = /usr/lib/dovecot/imap-login
mail_executable = /usr/lib/dovecot/imap
}
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}
protocol managesieve {
login_executable = /usr/lib/dovecot/managesieve-login
mail_executable = /usr/lib/dovecot/managesieve
sieve=~/.dovecot.sieve
sieve_storage=~/sieve
}
protocol lda {
postmaster_address = paul@myserver
mail_plugins = cmusieve
mail_plugin_dir = /usr/lib/dovecot/modules/lda
log_path = /var/log/dovecot-deliver.log
auth_socket_path = /var/run/dovecot/auth-master
}
auth_executable = /usr/lib/dovecot/dovecot-auth
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
auth default {
mechanisms = plain
passdb ldap {
args = /etc/dovecot/dovecot-ldap-passdb.conf
}
userdb ldap {
args = /etc/dovecot/dovecot-ldap-userdb.conf
}
user = root
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0660
group = secmail
}
}
}
dict {
}
plugin {
}
Eine entsprechende Datei kann man einfach durch ein
cat /etc/dovecot/dovecot.conf | egrep -v '(^\t* *#|^\t* *$)'
erzeugen. Hier ist der Inhalt der referenzierten Dateien dovecot-ldap-passdb.conf und dovecot-ldap-userdb.conf.
dovecot-ldap-passdb.conf:
hosts = myserver
tls = yes
tls_ca_cert_file = /etc/ssl/certs/ca.crt
tls_cert_file = /etc/dovecot/dovecot-client.crt
tls_key_file = /etc/dovecot/dovecot-client.key
tls_require_cert = demand
auth_bind = yes
auth_bind_userdn = uid=%Ln,ou=users,o=effinger
ldap_version = 3
base = uid=%Ln,ou=users,o=effinger
dovecot-ldap-userdb.conf:
hosts = myserver
tls = yes
tls_ca_cert_file = /etc/ssl/certs/ca.crt
tls_cert_file = /etc/dovecot/dovecot-client.crt
tls_key_file = /etc/dovecot/dovecot-client.key
tls_require_cert = demand
ldap_version = 3
base = uid=%Ln,ou=users,o=effinger
scope = subtree
user_attrs = dcMailMessageStore=home=%$/%Ld,uidNumber=uid,gidNumber=gid,=mail=maildir:~/maildir:INBOX=~/maildir/INBOX
user_filter = (|(mail=%d)(&(dcSubMailAddress=%d)(dcAccountStatus=active)))
Nach einem
sudo /etc/init.d/dovecot restart
sollte man den Login testen. Dazu kann man die Anleitung zum Testen von IMAP mit telnet von A. P. Lawrence verwenden. Das sieht dann beispielsweise so aus:
$ telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK Ready.
as1 login paul@paul mypassword
as1 OK Logged in.
as2 logout
* BYE Logging out
as2 OK Logout completed.
Connection closed by foreign host.
Wichtig ist dabei, beide E-Mail-Addressen zu überprüfen (lokal und extern). Im Beispiel hier muss man also die logins paul@paul sowie paul@paulpanzer@gmx.de testen.
Zum Schluss möchte ich noch auf einige Seiten hinweisen, die bei der Konfiguration von dovecot hilfreich für mich waren
- Offizielle Docevot-Dokumentation
- Beispielhaftes Server-Setup mit virtuellen Benutzern
- Secure Virtual Mailserver Howto
In Teil 3 befassen wir uns mit der Einrichtung von Exim als MTA (Message Transfer Agent).
[…] und getmail unter Ubuntu – (4) getmail Nachdem wir in den drei ersten Teilen zunächst OpenLDAP, Dovecot und Exim eingerichtet haben, geht es nun daran, getmail so einzurichten, dass Mails von einem […]
[…] geschrieben habe. In den letzten vier Blogartikeln wurde das Zusammenspiel der Grundkomponenten mit Dovecot, Exim, OpenLDAP und getmail konfiguriert. Jetzt geht es ans Feintuning – das Einrichten eines […]
Hallo,
ich erhalte beim Login Test von dovecot.log folgende Fehlermeldung:
2014-09-03 22:24:34 imap-login: Info: Aborted login (no auth attempts in 46 secs): user=, rip=127.0.0.1, lip=127.0.0.1, secured, session=
2014-09-03 22:35:35 auth: Error: ldap(stharbich@xyz.de,127.0.0.1,): ldap_search(base=uid=stharbich,ou=users,dc=xyz,dc=de filter=(|(mail=xyz.de)(&(dcSubMailAddress=xyz.de)(dcAccountStatus=active)))) failed: No such object
2014-09-03 22:35:35 imap: Error: Internal auth failure (client-pid=16761 client-id=1)
2014-09-03 22:35:35 imap-login: Info: Internal login failure (pid=16761 id=1) (internal failure, 1 succesful auths): user=, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, mpid=16779, secured, session=
Kannst Du mir weiterhelfen?
Lieben Gruß von Stefan Harbich
Hallo,
den obigen Fehler konnte ich anhand einer Fehlerhaften ACL Einstellung beheben (Siebter Abschnitt im ersten Teil). Allerdings, wenn ich z.B. einen User test erstelle, ihm aber eine andere Mailadresse gebe, wie xyz@xyz.de, kann ich micht per imap nicht einloggen. Nur über test@xyz.de. Warum ist das so? Zusätzlich kann ich mich auch nicht mit meiner dcSubMailAddress anmelden. Wenn die dcSubMailAdresse z.B. test@gmx.de heisst und das Passwort 1234 hat, muss ich mich doch mit „as1 login „test@gmx.de“ „1234“ anmelden, oder?
Lieben Gruß von Stefan Harbich
Hallo Stefan,
das Prinzip für die Logindaten lautet wie folgt:
externe Accounts: benutzername@mailadresse – Beispiel: paul=benutzername, externe email=paulpanzer@gmx.de => Login: paul@paulpanzer@gmx.de
interne Accounts: benutzername@xxx – xxx ist das mail Attribut – Beispiel: paul=benutzername, Attribut mail von Benutzer Paul=paul@mydomain.de => Login: paul@paul@mydomain.de Im Tutorial oben ist das Attribut mail von Benutzer Paul=paul => paul@paul
Der Login erfolgt jeweils mit dem gleichen Passwort, das für den Benutzer paul in LDAP festgelegt wurde. Ich hoffe, so ist es klar. Was also definitiv nicht geht ist der Login mit der externen E-Mail-Adresse alleine.
Viele Grüße
Markus
Hallo Markus,
vielen Dank für Deine Erläuterung oben. Nachdem ich Deine dovecot.conf auf meine Bedürfnisse angepasst habe und mit dem Befehl „doveconf -n -c /etc/dovecot/dovecot.conf > dovecot-new.conf“ konvertiert habe funktionierten die Tests.
Lieben Gruß von Stefan Harbich
Update:
sudo dpkg-statoverride --update --add root secmail 4710 /usr/lib/dovecot/dovecot-lda