Mailserver mit Postfix, Dovecot, Postfixadmin und MySQL (Debian Etch)
Übersicht
Ziel des HowTo ist es, für Admins die einen Debian-Etch-Server besitzen, eine einfache und schnelle Konfiguration im Gegensatz zu dem üblichen Editieren von Textfiles und anlegen von "System-Benutzern".
"ISP-Style" bedeutet, dass es in etwa so werden soll, wie große ISP ihre E-Mail-Dienste anbieten. In Stichpunkten:
- Es gibt ein Webinterface für jeden Nutzer um seine E-Mail-Adresse (und evtl. andere Einstellungen) zu verwalten
- Man kann E-Mails wahlweise über POP3 oder IMAP mit seinem Login abrufen. Vorzugsweise per SSL.
- Zum versenden von E-Mail muss man sich einloggen. Vorzugsweise standardisiert per SMTP-AUTH, nicht POP-before-SMTP.
- Man kann nur seine eigenen E-Mail-Adressen zum Versenden nutzen
- Es sind viele Nutzer möglich, die ebenfalls nicht als Nutzer auf dem System (/etc/passwd, usw.) angelegt werden
- Die Daten werden in einer zentralen Datenbank gespeichert. Hier in einer MySQL-DB.
Durch die Verwendung der MySQL-Datenbank kann man einfach und schnell neue Nutzer und Domains anlegen, ohne jedesmal viel Konfigurationsaufwand betreiben zu müssen. Außerdem ist es mit dieser Lösung ebenfalls Möglich, das ganze auf mehrere Server zu verteilen. Dazu müsste man aber mit Netzwerkdateisystemen arbeiten um die E-Mails von vielen Servern abrufen bzw. speichern zu können. Darauf werden wir in diesem HowTo jedoch nicht eingehen.
Hier ist eine kleine Übersicht, wie das ganze dann mal werden soll:

Benötigte Pakete installieren
Ich gehe davon aus, dass auf dem System schon ein
MySQL-Server
sowie
Webserver mit PHP
eingerichtet ist.
apt-get update apt-get install dovecot-common dovecot-imapd dovecot-pop3d postfix postfix-mysql openssl
Bei der Konfiguration fragt dpkg nach der Standardkonfiguration. Hier im HowTo wird von "Internet-Server" bzw. engl. "internet site" ausgegangen.
Schritt 1: MySQL
Lege einen Nutzer mit Rechten auf eine Datenbank an. (Wie das geht, sollte bekannt sein.. Beispielsweise mit phpMyAdmin)
Für die gesamte Konfiguration gehe ich von folgenden MySQL-Logindaten aus:
Host: localhost User: postfix Database: postfixdb Passwort: mysqlpw
Schritt 2: Postfixadmin
Postfixadmin ist ein Webinterface, um Mailboxes sowie Weiterleitungen einfach zu konfigurieren. Außerdem kann darüber jeder Benutzer einer Mailbox sein Passwort ändern und weitere Einstellungen vornehmen.
Lade die aktuelle Version Postfixadmin unter
http://sourceforge.net/projects/postfixadmin
herunter, entpacke die Daten ins dafür vorgesehene Verzeichnis und konfiguriere deinen Webserver entsprechend.
Nun musst du die Konfigurationsdatei
config.inc.php
bearbeiten.
Kommentiere in der Konfiguration "
$CONF['configured'] = false;
" aus:
//$CONF['configured'] = false;
Passe danach folgende Werte für eine MySQL-Verbindung an:
$CONF['database_type'] = 'mysql'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = 'mysqlpw'; $CONF['database_name'] = 'postfixdb'; $CONF['database_prefix'] = '';
Ändere
$CONF['postfix_admin_url']
je nach deiner Konfiguration.
Ändere folgenden Eintrag
$CONF['encrypt'] = 'md5crypt';
zu:
$CONF['encrypt'] = 'md5';
Folgende Werte wie folgt anpassen, um die Speicherung nach dem Muster
/var/vmail/%domainame/%username/
zu aktivieren:
$CONF['domain_path'] = 'YES'; $CONF['domain_in_mailbox'] = 'NO';
Weitere Features die Postfixadmin besizt, wie beispielsweise "Vacation", benötigen außerdem weitere Schritte zur Einrichtung, auf die ich in diesem HowTo nicht eingehen werde.
Wenn du mit der Konfiguration fertig bist, kannst du das Script aufrufen um die Tabellen anzulegen sowie den ersten Admin-User anzulegen.
URL:
http://pfad/zu/postfixadmin/setup.php
Schritt 3: Der Ort für unsere Mailboxen
Wir legen einen User
vmail
der Gruppe
vmail
mit der UID/GID
5000
sowie mit Heimatverzeichnis
/var/vmail
an.
groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /var/vmail
Die User-ID und Gruppen-ID
5000
wurde gewählt, da sie oft für vmail-Installationen genutzt wird. Es ist wichtig, dass diese beiden IDs auf dem System noch frei sind. Falls du andere IDs verwenden willst, musst du alle Stellen im HowTo dementsprechend umdenken und -ändern, da in den Configs überall die gleichen IDs gesetzt sein müssen! (Gleiches gilt natürlich auch für das Verzeichnis
/var/vmail
)
Nun legen wir das Verzeichnis
/var/vmail
an und setzen den Eigentümer auf
vmail
(User und Gruppe).
mkdir /var/vmail chown vmail:vmail /var/vmail
Schritt 4: Das SSL-Zertifikat erstellen
Heutzutage sollte man für sensible Dienste wie E-Mail-Dienste unbedingt eine verschlüsselte Verbindung verwenden. Man sollte sich vor Augen halten, dass das Abrufen von E-Mails auch von ungebetenen Gästen abgehört werden kann. Beispielsweise, wenn man mit seinem Notebook im Lieblingscafe über das offene WLAN nur mal schnell seine Mailbox checkt.
Weiterhin sollte man auch jede E-Mail an sich verschlüsseln, da sie im Internet nur selten sicherer Transportiert wird, als eine Postkarte. Beispielsweise durch Tools wie GnuPG[1] oder ähnliches, aber das ist nicht das Thema dieses HowTo.
Wir wechseln ins Verzeichnis
/etc/postfix/sslcert
, wo wir unser Zertifikat und den geheimen Schlüssel ablegen
mkdir /etc/postfix/sslcert cd /etc/postfix/sslcert
Nun erstellen wir mit openssl unseren geheimen Schlüssel sowie das selbst signierte Zertifikat mit 2 Jahren (730 Tagen) Gültigkeit.
Es werden verschiedene Sachen abgefragt. Die angaben in den Eckigen Klammern sind Standard-Werte, die genommen werden, wenn man nix angibt. Falls man ein Feld leer lassen will und es nicht im Zertifikat aufnehmen will, macht man einen Punkt.
Jedoch kann "Common Name" nicht weggelassen werden. Das muss der Hostname sein, unter dem Mails abgerufen und gesendet werden. Beispielsweise: mail.example.org.
openssl req -new -newkey rsa:3072 -nodes -keyout mailserver.key -days 730 -x509 -out mailserver.crt
Jetzt beschränken den Zugriff auf den geheimen Schlüssel, der UNBEDINGT(!) geheim bleiben muss, da sonst jeder der ihn besitzt, die Daten entschlüsseln kann.
chmod go-rwx mailserver.key
Schritt 5: Postfix
Postfix ist ein Mailserver der einfach zu konfigurieren ist, jedoch trotzdem viele Features besitzt.
Zuerst konfigurieren die Datei
/etc/postfix/main.cf
. Füge am Ende folgendes ein:
# a bit more spam protection disable_vrfy_command = yes # Authentification smtpd_sasl_type=dovecot smtpd_sasl_path=private/auth_dovecot smtpd_sasl_auth_enable = yes smtpd_sasl_authenticated_header = yes broken_sasl_auth_clients = yes proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps smtpd_sender_login_maps = proxy:mysql:/etc/postfix/mysql_sender_login_maps.cf smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch reject_unknown_sender_domain smtpd_recipient_restrictions = permit_sasl_authenticated permit_mynetworks reject_unauth_destination # Virtual mailboxes virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_mailbox_base = /var/vmail/ virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_limit = 112400000 virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_minimum_uid = 104 virtual_transport = virtual virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_transport = dovecot dovecot_destination_recipient_limit = 1
Du kannst die einzelnen Einstellungen auch abweichend konfigurieren. Eine Beschreibung der einzelnen Konfigurationsvariablen findest du unter
http://www.postfix.org/postconf.5.html
.
Nun bearbeiten wir die Datei
/etc/postfix/master.cf
. Füge auch hier folgendes am Ende ein:
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}Wichtig:
Die 2. Zeile ist durch zwei Leerzeichen eingerückt. Füge auch mindestens ein Leerzeichen ein, damit Postfix weiß, dass diese Zeile zur 1. gehört.
Es wird nun der Postfix SMTP-Server für SSL aktiviert, da dieser auf einen extra Port lauscht.
Ändere Eintrag wie folgt ab. (Auch hier die Einrückung beachten!)
smtps inet n - - - - smtpd -o smtpd_tls_wrappermode=yes
Nun werden die Einstellungen für den Zugriff von Postfix zur MySQL-Datenbank getätigt. Lege dazu die folgenden Dateien an:
Datei:
/etc/postfix/mysql_virtual_alias_maps.cf
hosts = localhost user = postfix password = mysqlpw dbname = postfixdb query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
Datei:
/etc/postfix/mysql_virtual_mailbox_maps.cf
hosts = localhost user = postfix password = mysqlpw dbname = postfixdb query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
Datei:
/etc/postfix/mysql_sender_login_maps.cf
hosts = localhost user = postfix password = mysqlpw dbname = postfixdb query = SELECT username AS allowedUser FROM mailbox WHERE username="%s" AND active = 1 UNION SELECT goto FROM alias WHERE address="%s" AND active = 1
Datei:
/etc/postfix/mysql_virtual_domains_maps.cf
hosts = localhost user = postfix password = mysqlpw dbname = postfixdb query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
Wichtig: Die Rechte für die Dateien, damit kein unbefugter Zugriff erfolgt.
chmod o-rwx,g+r mysql_* chgrp postfix mysql_*
Weiter geht es mit dem Einrichten für SSL.
Suche folgende Variablen in der Postfix-Konfigurationsdatei
/etc/postfix/main.cf
. Sollten sie nicht vorhanden sind, füge sie ganz unten hinzu.
smtpd_tls_cert_file = /etc/postfix/sslcert/mailserver.crt smtpd_tls_key_file = /etc/postfix/sslcert/mailserver.key
Damit ist die Konfiguration von Postfix abgeschlossen und wir müssen ihm nur noch die Kofigurationen neu laden lassen. Das machen wir jedoch am ende, da Dovecot noch nicht funktioniert und sowieso keine E-Mails zugestellt werden können.
Schritt 6: Dovecot
Dovecot ist ein sicherer und schneller IMAP/POP3-Server.
Die Standard-/Beispiel-Konfiguration in der Datei
/etc/dovecot/dovecot.conf
sichern...
mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.sample
... und durch folgende ersetzen.
protocols = imap imaps pop3 pop3s
log_timestamp = "%Y-%m-%d %H:%M:%S "
ssl_cert_file = /etc/postfix/sslcert/mailserver.crt
ssl_key_file = /etc/postfix/sslcert/mailserver.key
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}
protocol lda {
postmaster_address = aender.mich@example.org
auth_socket_path = /var/run/dovecot/auth-master
}
auth default {
mechanisms = plain login
passdb sql {
args = /etc/dovecot/dovecot-mysql.conf
}
userdb sql {
# Path for SQL configuration file, see /etc/dovecot/dovecot-sql.conf for example
args = /etc/dovecot/dovecot-mysql.conf
}
user = root
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = vmail
}
client {
path = /var/spool/postfix/private/auth_dovecot
mode = 0660
user = postfix
group = postfix
}
}
}Wir legen nun die Konfiguration für die Zugangsdaten zur MySQL-Datenbank an:
/etc/dovecot/dovecot-mysql.conf
driver = mysql
connect = host=localhost dbname=postfixdb user=postfix password=mysqlpw
default_pass_scheme = PLAIN-MD5
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT CONCAT('maildir:/var/vmail/',maildir) AS mail, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u'... und geben dieser Datei entsprechende Zugriffsreche
chmod o-rwx,g+r /etc/dovecot/dovecot-mysql.conf chgrp vmail /etc/dovecot/dovecot-mysql.conf
Schritt 7: Abschluss
Nun ist alles soweit konfiguriert und kann neu gestart/geladen werden.
/etc/init.d/dovecot restart postfix reload
Sollten Probleme auftreten, kannst du dich jederzeit im Inside-IRC in
oder auch unter
melden.
(Support ist nicht garantiert. Aber man tut was man kann.
)
Links
1. GnuPG:
,

Endlich mal ein gutes
dein HowTo ist endlich einmal eines, mit dem man was anfangen kann.