Ein eigener Mailserver – Teil2: dovecot

Nachdem wir in Teil 1 postfix als MTA (mail transfer agent) eingerichtet haben, wollen wir uns nun mit der Einrichtung von dovecot als IMAP/POP-Server beschäftigen. Dabei behalten wir im Hinterkopf, dass postfix die SASL-Schnittstelle von dovecot zur SMPT-Authentifizierung mitbenutzt und (fast) alle Mail-Accounts als virtuelle Accounts in /var/mail/vhosts geführt werden.

  1. Konfiguration
  2. Benutzer anlegen
  3. Links

 
Zuallererst müssen wir dovecot installieren:

aptitude install dovecot-imapd dovecot-pop3d

Konfiguration

Die Konfiguration ist relativ schnell erledigt, in der Datei /etc/dovecot/dovecot.conf sind einige Einstellungen zu tätigen.

Zunächst müssen wir festlegen, welche Protokolle angeboten werden sollen:

protocols = imap imaps pop3 pop3s

Da die Authentifizierung per SSL/TLS verschlüsselt wird, können wir PLAIN als Authentifizierungsmethode guten Gewissens zulassen:

disable_plaintext_auth = no

Den Pfad zum Logfile müssen wir auch noch angeben:

log_path = /var/log/dovecot
log_timestamp = "%Y-%m-%d %H:%M:%S "

Außerdem muss dovecot natürlich noch wissen, wo Zertifikat und Schlüssel für die SSL-Verschlüsselung liegen:

ssl_cert_file = /etc/ssl/certs/cert.pem
ssl_key_file = /etc/ssl/private/key.pem

Bisher kennt nur postfix den Ort für die Mailboxes, dovecot sollte das aber auch wissen:

mail_location = maildir:/var/mail/vhosts/%d/%n

Dabei steht %d für das Domain-Verzeichnis und %n für das Verzeichnis des Benutzers.

Damit dovecot-delivery die Mails, die es von postfix übernimmt auch zustellen kann folgen die Einstellungen für den LDA (local delivery agent).

protocol lda {
 postmaster_address =postmaster@cbjck.de
 mail_plugin_dir = /usr/lib/dovecot/modules/lda
 auth_socket_path = /var/run/dovecot/auth-master
}

Fehlen noch die Einstellungen zur Authentifizierung, die ja auch postfix mitbenutzen soll. Wir verwenden zur Verwaltung der Benutzeraccounts ein dateigestütztes Verfahren, dabei liegen die Accounts in /var/mail/vhosts/example.com/passwd und die Passwörter in /var/mail/vhosts/example.com/shaddow.

auth default {
 mechanisms = plain login
 passdb passwd-file {
  args = /var/mail/vhosts/%d/shadow
 }
 userdb passwd-file {
  args = /var/mail/vhosts/%d/passwd
 }

Damit postfix die SASL-Schnittstelle zur Authentifizierung nutzen kann, muss diese exportiert werden (noch innerhalb von auth default)

 socket listen {
 master {
  path = /var/run/dovecot/auth-master
  mode = 0600
  user = vmail
  group = vmail
 }
 client {
  path = /var/spool/postfix/private/auth
  mode = 0660
  user = postfix
  group = vmail
 }
}

Abschließend müssen wir nun noch den Benutzer postfix der Gruppe vmail hinzufügen

usermod -aG vmail postfix

und das logfile anlegen

touch /var/log/dovecot
chgrp vmail /var/log/dovecot
 chmod 660 /var/log/dovecot

Benutzer anlegen

Für einen funktionierenden Account bedarf es Einträgen in drei Dateien, der /etc/postfix/vmailboxes, der /var/mail/vhosts/example.com/passwd und der /var/mail/vhosts/example.com/shadow. Damit wir beim Anlegen eines nichts vergessen basteln wir uns ein Skript, das alle nötigen Eintragungen für uns erledigt und speichern es unter /usr/local/bin/addmailuser.

#!/bin/bash
#
# Script to add users for
# Dovecot/PostFix using Virtual Users
USAGE="Usage: $0 EMAIL PASSWORD [BASEDIR]";
if [ ! -n "$2" ]
then
 echo $USAGE;
 exit 1;
fi
USERNAME=$(echo "$1" | cut -f1 -d@);
DOMAIN=$(echo "$1" | cut -f2 -d@);
ADDRESS=$1;
PASSWD=$2;
if [ -n "$3" ]
then
 if [ ! -d "$3" ]
 then
  echo $USAGE;
  echo "BASEDIR must be a valid directory!";
  echo "I would have tried, $(postconf | grep ^virtual_mailbox_base | cut -f3 -d' ')";
  exit 2;
 else
  BASEDIR="$3";
  fi
else
 BASEDIR="$(postconf | grep ^virtual_mailbox_base | cut -f3 -d' ')";
fi
if [ -f /etc/postfix/vmailbox ]
then
 echo "Adding Postfix user configuration..."
 echo $ADDRESS $DOMAIN/$USERNAME/ >> /etc/postfix/vmailbox  postmap /etc/postfix/vmailbox
if [ $? -eq 0 ]
 then
  echo "Adding Dovecot user configuration..."
  echo $ADDRESS::5000:5000::$BASEDIR/$DOMAIN/$USERNAME >> $BASEDIR/$DOMAIN/passwd
  echo $ADDRESS":"$(dovecotpw -p $PASSWD) >> $BASEDIR/$DOMAIN/shadow
  chown root:root $BASEDIR/$DOMAIN/passwd && chmod 600 $BASEDIR/$DOMAIN/passwd
  chown root:root $BASEDIR/$DOMAIN/shadow && chmod 600 $BASEDIR/$DOMAIN/shadow
  /etc/init.d/postfix reload
 fi
fi

Damit lassen sich neue Benutzer einfach anlegen mit

/usr/local/bin/addmailuser user@example.com password

und die Konfiguration von postfix wird auch gleich neu geladen.

Links

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.