Kategorien

Druckansicht des Beitrags Druckansicht des Beitrags

Dovecot, Exim, OpenLDAP und getmail unter Ubuntu – (2) Dovecot

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

In Teil 3 befassen wir uns mit der Einrichtung von Exim als MTA (Message Transfer Agent).

7 comments to Dovecot, Exim, OpenLDAP und getmail unter Ubuntu – (2) Dovecot

  • […] 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 […]

  • Stefan Harbich

    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

  • 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

  • Stefan Harbich

    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

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

  

  

  

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.