Mailserver mit Dovecot, Postfix und MySQL
Dovecot installieren und konfigurieren
Für diese Konfiguration wird ein laufender mysql-server und ein Installiertes ViMbAdmin V2 vorrausgesetzt. Wir beginnen mit der Installation/Konfiguration von Dovecot als MDA/IMAP Server.
vMail Verzeichnis und Benutzer einrichten
Die E-Mail Postfächer sollen nicht – wie standardmäßig festgelegt – in /var/mail
liegen, sondern in /var/vmail
. Innerhalb dieses Verzeichnis wird eine Maildir Verzeichnisstruktur aufgebaut nach dem Muster /var/vmail/domain/benutzername/
. Im Benutzerverzeichnis liegen schließlich die Ordner für Inbox, Entwürfe, Gesendete Mails etc.
root:~# mkdir /var/vmail
Die Maildir Verzeichnisstruktur wird später automatisch von Dovecot angelegt. Jetzt muss noch ein neuer Benutzer eingeführt werden, der vollen Zugriff auf dieses Mailverzeichnis hat: Der Nutzer vmail. Unter diesen Benutzer werden die Mailserver im dem Verzeichnis arbeiten.
root:~# groupadd -g 5000 vmail
root:~# useradd -g vmail -u 5000 vmail -d /var/vmail -m
root:~# chmod -R 770 /var/vmail
Dovecot installieren und konfigurieren
Jetzt ist es soweit – Dovecot kann installiert werden.
root:~# apt-get install dovecot-common dovecot-imapd dovecot-mysql dovecot-lmtpd
Die letzten Pakete stellen Funktionen wie IMAP Zugriff für den Client, MySQL Datenbankanbindung und LMTP Protokoll zur Verfügung. Letzteres wird zum Ablegen von E-Mails im Postfach genutzt, sobald der MTA eine Mail empfangen hat. Während der Installation kann gewählt werden, ob ein selbst ausgestelltes SSL Zertifikat generiert werden soll. Wenn ihr noch kein Zertifikat von einer CA habt, wählt hier Ja.
Los geht’s mit der Konfiguration! Einige Stellen in den vorhandenen Konfig-Dateien müssen angepasst werden.
root:~# cd /etc/dovecot/
Konfiguration der Postfächer
Im Verzeichnis conf.d
findet ihr die Datei 10-mail.conf. Setzt folgende Einstellungen (Kommentarzeichen # ggf. entfernen!).
root:~# vi conf.d/10-mail.conf
....
mail_location = maildir:/var/vmail/%d/%n:LAYOUT=fs
mail_uid = vmail
mail_gid = vmail
mail_privileged_group = vmail
Dovecot wird damit mitgeteilt, nach welchem Muster die Postfächer angelegt werden sollen und unter welchem Benutzer darauf zugegriffen werden soll. In unserem Fall ist das der Nutzer vmail.
Authentifizierung über MySQL Datenbank
Im nächsten Schritt wird die Benutzerauthentifizierung über die MySQL-Datenbank eingestellt. Öffnet dazu die Datei /etc/dovecot/dovecot-sql.conf.ext
Setzt die Einstellungen in der Datei folgendermaßen (vmail Passwort anpassen!).
root:~# vi /etc/dovecot/dovecot-sql.conf.ext
....
driver = mysql
connect = host=127.0.0.1 dbname=vimbadmin user=vimbadmin password=******
default_pass_scheme = MD5
password_query = \
SELECT username AS user, password, \
homedir AS userdb_home, uid AS userdb_uid, gid AS userdb_gid \
FROM mailbox WHERE username = '%u'
Der erste Teil der Konfiguration enthält die Zugangsdaten zur MySQL Datenbank vmail, der zweite Teil besteht aus der SQL Abfrage, die der Mailserver ausführen muss, um Nutzerinfos zu erhalten.
Die Zeile
iterate_query = SELECT local_part AS username, domain FROM mailbox
am Ende der Datei wird ebenfalls einkommentiert und entsprechend abgeändert. (Kommentarzeichen # entfernen).
Authentifizierungseinstellungen
Für eine sichere Anmeldung am Mailserver werden jetzt noch ein paar Einstellungen in conf.d/10-auth.conf
gesetzt.
root:~# vi conf.d/10-auth.conf
....
disable_plaintext_auth = yes
auth_mechanisms = plain login
....
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
Die erste Zeile legt fest, dass Klartextkennwörter nur an den Server übertragen werden können, wenn vorher eine verschlüsselte Verbindung hergestellt wurde. Die zweite Einstellung wurde um „login” erweitert. Dies stellt die Kompatibilität zu Windows Mail und Outlook her. Wer diese Software nicht nutzt, kann es auch weglassen. Der passdb Abschnitt legt fest, dass die SQL Abfragen in dovecot-sql.conf.ext genutzt werden sollen, um einen Nutzer zu authentifizieren.
Vor die Einstellung
#!include auth-system.conf.ext
wird ein Kommentarsymbol „#” gesetzt, um diese unwirksam zu machen. Sie bindet eine weitere Datei ein, die Einstellungen für die PAM Authentifizierung enthält. Weil wir aber eine MySQL Datenbank nutzen, wird PAM nicht gebraucht.
Die Hauptkonfigurationsdatei von Dovecot ist /etc/dovecot/dovecot.conf
. In dieser Datei setzen wir folgende Einstellungen.
root:~# vi dovecot.conf
....
# Enable installed protocols
!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap lmtp sieve
# Ohne IPv6
listen = *
# Mit IPv6
#listen = *, ::
base_dir = /var/run/dovecot/
# Greeting message for clients.
login_greeting = Dovecot ready.
!include conf.d/*.conf
!include_try local.conf
Darin werden grundlegende Einstellungen von Dovecot festgelegt, z.B. die aktiven Protokolle, die zu benutzenden Netzwerkschnittstellen und die Begrüßungsnachricht für den Mailclient. Außerdem werden via include alle Konfigurationsdateien in conf.d eingebunden.
Sichere SSL Verbindungen aktivieren
E-Mails sollten nur noch verschlüsselt abgerufen werden – alles andere wäre grob fahrlässig. Deshalb werden nun noch ein paar Einstellungen zu SSL/TLS vorgenommen. Öffnet dazu die Datei conf.d/10-ssl.conf
.
root:~# vi conf.d/10-ssl.conf
....
ssl = required
ssl_cert = </etc/dovecot/dovecot.pem
ssl_key = </etc/dovecot/private/dovecot.pem
Die oberste Zeile legt fest, dass E-Mails ausschließlich über eine sichere Verbindung abgerufen werden können. Verbindungsversuche ohne Verschlüsselung werden nicht ermöglicht. ssl_cert und ssl_key geben den Pfad zu den SSL Zertifikatsdateien an. Die hier angegebenen Zertifikate funktionieren zwar, erzeugen aber auf den Clients eine Warnmeldung, weil es sich um selbst ausgestellte Zertifikate handelt und nicht um "offizielle", Zertifikate einer anerkannten CA.
Wenn das private Zertifikat mit einem Passwort gesichert ist, kann dieses unter ssl_key_password angegeben werden. Für besonders sichere SSL-Verbindungen wird für ssl_cipher_list der Chipher-String von bettercrypto.org angegeben:
ssl_cipher_list = EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA
Clients werden angewiesen, diese Cipher-Reihenfolge zu berücksichtigen:
ssl_prefer_server_ciphers = yes
SASL Authentifizierung
Postfix fragt bei Dovecot nach, ob ein Benutzer berechtigt ist, eine E-Mail zu versenden, deshalb muss Dovecot einen Socket für solche SASL Anfragen bereitstellen. Dieser Auth-Socket wird nun unter conf.d/10-master.conf
eingestellt. Die service auth-Sektion muss so aussehen.
root:~# vi conf.d/10-master.conf
....
service auth {
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
service auth-worker {
user = vmail
}
LMTP Socket für Postfix
Zusätzlich zum SASL Socket soll Dovecot auch noch einen Socket für das LMTP-Protokoll für Postfix bereitstellen. Im Gegensatz zum ähnlichen SMTP Protokoll wird LMTP genutzt, um vom MTP empfangene Mails innerhalb eines Mailsystems an den MDA und damit die Postfächer weiterzugeben (Siehe Grafik oben).
In derselben Datei conf.d/10-master.conf
wird die LMTP Service Konfiguration wie folgt geändert.
root:~# vi conf.d/10-master.conf
....
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0660
user = postfix
group = postfix
}
user = vmail
}
Da für das LMTP Protokoll auch Einstellungen für den LDA (Local Delivery Agent) genutzt werden, die sich in conf.d/15-lda.conf
befinden, wird auch diese Datei für eine kleine Änderung geöffnet. Hier muss unbedingt postmaster_address einkommentiert und auf eine gültige E-Mail Adresse gesetzt werden. An diese Adresse gehen Benachrichtigungen, wenn der E-Mail Transport fehl schlägt.
root:~# vi conf.d/15-lda.conf
....
postmaster_address = root@localhost
Postfix installieren und konfigurieren
Dovecot ist fertig installiert – jetzt ist Postfix, der Mail Transfer Agent, an der Reihe. Installiert die folgenden Postfix-Pakete:
root:~# apt-get install postfix postfix-mysql
main.cf anpassen
In die Datei /etc/postfix/main.cf
werden grundlegende Einstellungen zum MTA geschrieben.
vi /etc/postfix/main.cf
....
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# BASIC config
#
myhostname = mx.example.com
myorigin = $myhostname
mydestination = $myhostname, localhost
message_size_limit = 20480000
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
relayhost =
mynetworks = <SERVER_IPADDR>/32 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
Für myorigin wird der Hostname des Servers oder die Domain eingetragen. mailbox_size_limit legt die maximale Mailgröße in Bytes fest. Trifft eine E-Mail ein, die größer ist, wird die Übertragung abgebrochen.
SSL / TLS Unterstützung aktivieren
Damit E-Mails nicht nur verschlüsselt via Dovecot empfangen, sondern auch verschlüsselt gesendet werden können, muss auch Postfix SSL/TLS unterstützen. Fügt dazu folgende Konfiguration in die Datei main.cf
ein.
vi /etc/postfix/main.cf
# SSL/TLS Settings
#
smtpd_tls_cert_file=/etc/postfix/ssl/ssl-mail.pem
smtpd_tls_key_file=/etc/postfix/ssl/ssl-mail.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_mandatory_protocols = SSLv3, TLSv1
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_auth_only = yes
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_loglevel = 1
smtp_use_tls = yes
tls_random_source = dev:/dev/urandom
Wer gültige SSL Zertifikate von einer anerkannten CA besitzt, sollte diese nutzen und die Pfade entsprechend anpassen. Außerdem kann mit gültigen Zertifikaten eine erweiterte SSL-Konfiguration durchgeführt werden, die verschlüsselte Server-Server-Verbindungen zulässt. So funktioniert auch E-Mail made in Germany von GMX, Web.de und der Telekom.
SASL Auth und Submission aktivieren
Im nächsten Schritt wird Postfix so eingestellt, dass dieser den zuvor eingerichteten Auth Socket von Dovecot nutzt, um Benutzerberechtigungen zu ermitteln (in die Datei main.cf einfügen).
vi /etc/postfix/main.cf
# SASL Auth Settings
#
# Die Passwoerter stehen in der Datei /etc/postfix/smtp_auth
#smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth
# Handle SMTP authentication using Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
In der Datei /etc/postfix/master.cf
wird Submission Support + SASL aktiviert. Der komplette submission-Block inkl -o Parameter wird gelöscht (Zeile löschen in nano mit STRG+K) und durch folgenden Block ersetzt.
root:~# vi /etc/postfix/master.cf
submission inet n - - - - smtpd -v
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
LMTP aktivieren
Postfix soll zum Zustellen von empfangenen E-Mails den LMTP Socket von Dovecot nutzen. Bearbeitet dazu wieder die Datei main.cf
.
root:~# vi /etc/postfix/main.cf
....
###### Use Dovecot LMTP Service to deliver Mails to Dovecot ######
virtual_transport = lmtp:unix:private/dovecot-lmtp
Relay Einstellungen
Postfix muss mitgeteilt werden, in welchen Fällen E-Mails wohin geleitet werden dürfen. Ist diese Einstellung fehlerhaft, ist es beispielsweise möglich, über einen fremden Mailserver E-Mail zu versenden. Das kann einem Serverbetreiber großen Ärger einbringen, vor allem wenn über den eigenen Server Spam- oder Phishingmails verschickt werden.
smtpd_recipient_restrictions ist ein Parameter der Client-Beschränkungen definiert. Dies wird dazu benutzt um festzulegen, wer Mails durch den Server relaying darf. In unserem Fall erlauben wir das relaying allen Clients, welche über mynetworks definiert sind. Ebenfalls erlauben wir SASL Clients das relaying. Dann verbieten wir unbekannte Clients, Sender und Empfänger das relaying. Auch ungültige bzw. unbekannte Hostnamen oder Sernder/Empfänger ohne FQDN werden abgewiesen. Außerdem weisen wir Clients, welche auf der Blacklist stehen ab. Mit dem Parameter check_client_access haben wir eine Möglichkeit, definierte Clients das relaying zu erlauben/verbieten. Auch der SPF Eintrag wird wie im Artikel SPF postfix check beschrieben geprüft.
# Restrictions Settings
#
smtpd_client_restrictions =
smtpd_helo_restrictions =
smtpd_sender_restrictions =
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
check_client_access hash:/etc/postfix/access,
reject_unknown_client,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_unauth_pipelining,
reject_unauth_destination,
reject_invalid_hostname,
reject_unknown_hostname,
reject_non_fqdn_recipient,
reject_non_fqdn_sender,
reject_rbl_client zombie.dnsbl.sorbs.net,
reject_rbl_client zen.spamhaus.org,
reject_rbl_client blackholes.easynet.nl,
reject_rbl_client bl.spamcop.net,
reject_rbl_client rhsbl.sorbs.net,
check_policy_service unix:private/policy-spf
smtpd_etrn_restrictions = permit_mynetworks, reject
Adressformat prüfen
In diesen Abschitt der main.cf
definieren wir checks für das Adressformat.
# Check address format
#
allow_min_user = no
allow_percent_hack = no
allow_untrusted_routing = no
strict_rfc821_envelopes = yes
SMTP error codes
In diesen Abschitt der main.cf
überschreiben wir den smpt error code, welcher für die unten aufgeführten Fehler 450 ist.
# Define SMTP Error codes
#
unknown_address_reject_code = 554 # default: 450
unknown_hostname_reject_code = 554 # default: 450
unknown_client_reject_code = 554 # default: 450
MailQueue Einstellungen
In diesen Abschitt der main.cf
definieren wir Einstellungen der MailQueue.
# MailQueue settings
#
bounce_queue_lifetime = 2d
maximal_queue_lifetime = 2d
queue_run_delay = 120s
Sonstige Einstellungen
In diesen Abschitt der main.cf
definieren noch weitere Einstellungen für den Mailserver.
# Disable canonical address mapping, virtual alias map expansion,
# address masquerading, and automatic BCC (blind carbon-copy) recipients.
receive_override_options = no_address_mappings
# Anwer for RBL-based restriction
default_rbl_reply = $rbl_code RBLTRAP: I don't accept mail from you! - check $rbl_domain
# Disable the SMTP VRFY command.
disable_vrfy_command = yes