Virtuelle E-Mail Nutzer mit dovecot

Aus Synology Wiki
Wechseln zu: Navigation, Suche

Virtuelle User mit Dovecot

Ich habe hier bereits beschrieben, was virtuelle User sind und wozu man die brauchen kann ;-) Auf dieser Seite soll es "nur" noch darum gehen auch dem Dovecot beizubringen virtuelle User zu benutzen.

Voraussetzungen

Virtuelle Benutzer für Dovecot erfordert leider etwas mehr an Aufwand, als dieselbigen nur für Postfix. Das Problem ist, dass beim Dovecot von Synology der notwendige LDA (Local Delivery Agent) deliver nicht mitgeliefert wurde. Man muss diesen also aus den Quellen von Dovecot selber auf der DS kompillieren.

Zuerst einmal müssen die gleichen Voraussetzungen erfüllt sein, wie beim Dovecot Sieve. Holt Euch also die angegebenen ipkg Pakete und installiert diese. Dann "saugt" ihr die Quellen von Dovecot (auf die Version achten) auf Eure DS (die Quellen von dovecot-sieve braucht ihr NICHT!!). Nach dem obligaten Entpacken, wechselt ihr in das entpackte Verzeichnis. Also zuerst Dovecot kompillieren und dann den LDA installieren.

Konfiguration

Dovecot

Öffnet die Datei /usr/syno/mailstation/etc/dovecot.conf in einem Editor wie z.B. vi oder nano. Sucht dann nach dem String protocol lda { Per default ist diese Zeile auskommentiert. Entfernt also das # davor und scrollt von da langsam runter bis ihr zur Zeile mit ersten schliessenden Klammer } kommt. Auch bei dieser Zeile entfernt ihr ein allfälliges # davor.

Ziemlich als letzte Zeile vor dieser Klammer steht ein auskommentierter Eintrag auth_socket_path = /var/run/dovecot/auth-master. Entfernt auch vor diesem das Kommentarzeichen. Diesen Master Daemon wird der LDA abfragen, um User zu authentifizieren.

Gleich nach der schliessenden Klammer von protocol lda müsst ihr sicherstellen, dass folgender Eintrag gesetzt ist auth_executable = /usr/syno/mailstation/libexec/dovecot/dovecot-auth

Danach scrollt ihr runter bis zur Zeile mit auth default { Innerhalb dieser Definition sollte es dann einen Eintrag wie

passdb passwd-file {
    # File contains a list of usernames, one per line
    args = /opt/etc/dovecot/passwd
    #deny = yes
  }

geben. Dieses passwd File muss root gehören und darf NUR Rechte für den Eigentümer haben chmod 0600 chown root

Scrollt weiter bis zur Zeile mit userdb static { Dort drin werden die Homeverzeichnisse der virtuellen User festgelegt

args = uid=vmail gid=vmail home=/volume1/homes/vmail/%d/%n

obiger Code legt fest, dass der lokale User vmail und die lokale Gruppe vmail verwendet werden sollen (via DSM anlegen, die Namen sind egal, muss nicht vmail sein). Dann wird festgelegt, dass das Home des jeweiligen virtuellen Users im Home des lokalen Users vmail liegt. Im Home wird dann pro Domain ein Verzeichnis erwartet und darin dann ein Verzeichnis mit dem Usernamen d.h. eine Anmeldung mit user@mydomain.tld an Dovecot sucht in /volume1/homes/vmail/mydomain.tld/user nach der Mailbox.

Nun sucht ihr noch nach dem String socket listen { Dort sollte es als erstes einen master Auth Prozess geben

master {
      path = /var/run/dovecot/auth-master
      mode = 0666
    }

diesen Prozess verwendet der LDA deliver. Damit wäre die Konfig von Dovecot eigentlich erledigt.

Aber nur eigentlich ;-) Denn eine weitere kleine Config führt dazu, dass auch der Postfix Server direkt bei Dovecot nachfragt um einen User zu authentifizieren. Der Vorteil ist es, dass ihr dann nur eine Db mit Usern pflegen müsst und nicht zwei oder mehr. Gleich nach dem master gibt es einen Eintrag für den client

client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
    }

der User und die Gruppe postfix existieren per default auf der DS. Wenn sich nun ein User an Postfix authentifizieren will fragt Postfix über den definierten Client den Dovecot ab. Wenn ihr das so mit dem client macht, dann muss postfix in der main.cf nicht wissen wo die Mailboxen liegen d.h. virtual_mailbox_base und virtual_mailbox_maps wird NICHT benötigt.

Postfix

Damit Postfix aber wissen kann, dass er den Dovecot zur Authentifizierung verwenden soll, muss man noch Anpassungen an 2 Postfix Files vornehmen. Legt zuerst in /usr/syno/mailstation/etc/main.cf eine neue Zeile an

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
dovecot_destination_recipient_limit = 1
virtual_transport = dovecot

Das führt dazu, dass Postfix in master.cf nach einem Eintrag für dovecot sucht, den man zuerst anlegen muss. Dieser Eintrag setzt auch voraus, dass deliver kompiliert wurde. Wenn ihr das nicht wollt, dann könnt ihr oben die beiden Einträge zu dovecot entfernen (dovecot_destination_limit und virtual_transport). Dann müsst ihr den folgenden Schritt in der master.cf NICHT machen!

dovecot	unix	-	n	n	-	-	pipe
 flags=DRhu user=vmail:vmail argv=/usr/syno/mailstation/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop}

Dieser Eintrag setzt voraus, dass User vmail und Group vmail existieren (ggf anpassen) und dass deliver im angegebenen Pfad abgelegt ist. Diese Konfig sollte Postfix anweisen User bei Dovecot zu authentifizieren und die E-Mails nicht direkt in die Mailboxen zu stellen, sondern an deliver zu senden. Dies hat den Vorteil, dass man die Regeln des dovecot-sieve auch auf einegehende E-Mails am SMTP Server verwenden kann Danach ein postfix reload

Wichtig / Debugging / Tipps

Die Mailzustellung via einen LDA ist recht empfindlich was Berechtigungen im Filesystem v.a. der Mailboxen und Homeverzeichnisse angeht. Als erstes solltet ihr bei Problemen sicherstellen, dass das Homeverzeichnis (in meinem Beispiel von vmail) nur Rechte für den Eigentümer vmail hat und sonst für niemanden

chown -R vmail /volume1/homes/vmail
chmod -R g-rwx,o-rwx /volume1/homes/vmail

Weiterhin kann es zum Debugging sehr hilfreich sein, einen alternativen syslog Daeomon wie z.B. syslog-ng zu installieren. Zusätzlich sollte man die Logoptionen der beteiligten Dienste so hoch drehen wie man nur kann. Dovecot bietet z.B. in dovecot.conf verschiedene Optionen das Logging zu beeinflussen. Viele Optionen haben einen debug Mode wo alles in die Logs geschrieben wird. Das ist für ein produktives System natürlich nicht sehr gut, aber zur Fehlersuche doch ungemein wichtig und hilfreich.

Ein Tipp v.a. im Zusammenspiel mit spamassassin. Wenn ihr alle E-Mails via einen zentralen lokalen Benutzer abholt, dann solltet ihr den spamd child auch unter diesem User laufen lassen. Dann stimmen die Berechtigungen immer.

Wenn deliver korrekt installiert ist, dann kann man auch die rc Files für getmail anpassen. Damit wird getmail die E-Mails nicht mehr direkt in die Mailboxen stellen, sondern sie an deliver übergeben

[destination]
type = MDA_external
path = /usr/syno/mailstation/libexec/dovecot/deliver
arguments = ("-d","user@domain.tld",)

Virtuelle Benutzer einrichten

Damit man sinnvoll virtuelle User in /opt/etc/dovecot/passwd anlegen kann, sollte man sich ebenfalls dovecotpw installieren. Dieses liegt ebenfalls in den Dovecot Sourcen unter src/util

make install dovecotpw

kopiert danach das dovecotpw File in ein Verzeichnis, welches in $PATH liegt. Danach kann man einen User ganz einfach für passwd generieren

echo user@domain.tld:$(dovecotpw -p "totalGeheim" -s SSHA) >> /opt/etc/dovecot/passwd

Danach müsst ihr noch die fehlenden Verzeichnisse anlegen

mkdir -p /volume1/homes/vmail/domain.tld/user/.Maildir
chown -R vmail:vmail /volume1/homes/vmail
chmod -R g-rwx,o-rwx /volume1/homes/vmail

Eine alternative zum Kompillieren von dovecotpw aus den Quellen, wäre es ipkg dovecot RUNTERZULADEN und zu entpacken. Dann kann man ipkg dovecotpw manuell an die korrekte Stelle kopieren

mkdir /volume1/public/tmp
cd /volume1/public/tmp
ipkg download dovecot
mv dovecot_1.2.0.beta1-2_powerpc.ipk dovecot_1.2.0.beta1-2_powerpc.tar.gz
tar xvzf dovecot_1.2.0.beta1-2_powerpc.tar.gz
tar xvzf data.tar.gz
cp ./opt/sbin/dovecotpw /usr/syno/mailstation/libexec/dovecot/
rm -R /volume1/public/tmp

Für virtuelle Benutzer habe ich mir mal ein kleines Script geschrieben, was dem admin beim Einrichten helfen kann. Schaut Euch aber den Quelltext an dort stehen einige wichtige Infos/Voraussetzungen. Ausserdem hat das Script eine "Hilfe"-Funktion für die Parameter

sh /home/root/createMaildir --help

 ###########################################################################
 #                                                                         #
 # Usage:                                                                  #
 # createMaildir  [-i|--install] [-h|--help] <user> <domain> <password>    #
 #                                                                         #
 # -i | --install Installs the necessary dovecotpw from ipkg.              #
 #                Needs ipkg to be installed!                              #
 # -h | --help    Show this message                                        #
 # <user>         Username of the account to be created.                   #
 #                IMPORTANT: Username only, no domain part                 #
 # <domain>       Domainname for the user account.                         #
 #                Folders are created like this /path/<domain>/<user>      #
 # <password>     Password for the account                                 #
 #                                                                         #
 #                <user>, <domain> and <password> are ALL MANDATORY        #
 #                if a useraccount is to be created                        #
 #                Example usage: createMaildir myuser mydomain mysecret    #
 #                                                                         #
 ###########################################################################

WICHTIG: Ihr müsst im Quellcode die nötigen Konfigurationsvariabeln selber setzen, sonst gibt's Fehlermeldungen ;-)
Alle Variabeln sind z.Z. auf Testwerte in /tmp gesetzt. Mit diesen Werten könnt ihr testen ob das Script das macht was es sollte, BEVOR ihr die Pfade auf die produktiven Files ändert!!

#### BEGIN OF "CONFIG" SECTION ####
## change the following variables to fit your enviroment
## if you don't have dovecotpw on your system just set the dovecotpw variable to a valid value on your box
## and call the script with -i or --install parameter. The script will install dovecotpw to the location specified in $dovecotpw
##
## root directory for mailboxes.
mail=/tmp/dovecot
##
# path to the dovecot password file. This implies that you have deliver installed or compiled from source
dovecot_pw_file=/tmp/dovecot/passwd
##
# Variables for interaction with postfix server
postfix=/usr/syno/mailstation/sbin/postfix
postfix_postmap=/usr/syno/mailstation/sbin/postmap
postfix_vmailbox=/tmp/dovecot/vmailbox
postfix_virtual=/tmp/dovecot/virtual
postfix_main=/usr/syno/mailstation/etc/main.cf
##
## user and group for chown on mailbox directory
user=vmail
group=vmail
##
## path to dovecotpw binary (see comment on top!) and the desired password scheme to use
## you can check the schemes your system supports by dovecotpw -l
dovecotpw=/usr/syno/mailstation/libexec/dovecot/dovecotpw
scheme=SSHA
##
## IMPORTANT: The installed dovecotpw file is made for Dovecot V 1.2
## So if you use Dovecot < 1.2 then you should NOT USE one of the
## new password schemes introduced in 1.2. like ex SSHA256.
## SSHA and MD5 work fine!
#### END OF "CONFIG" SECTION ####