Mailserver mit Postfix, Dovecot, PostfixAdmin und MySQL unter Debian Jessie

Mailserver

In dem zweiten Artikel dieser Reihe beschäftigen wir uns mit der Installation eines Mailserver.

Dieses HowTo ist schon etwas älter und stammt aus Zeiten von Debian Squeeze (6) aber mit wenigen Anpassungen auch unter Debian Jessie ohne Probleme lauffähig. Voraussetzung ist, das Ihr einen lauffähigen Webserver mit MySQL in Betrieb habt. Da die Installation des Mailserver sehr Umfangreich ist, werde ich mich auf das wesentliche Konzentrieren.

Vorhaben

  • Benutzerverwaltung über MySQL
  • Webinterface zur Verwaltung der angelegten Konten
  • E-Mails können über IMAP(S) sowie POP3(S) abgerufen werden
  • E-Mail Versand nur durch eingeloggte Benutzer

Installation von Postfix und Postfixadmin

aptitude install dovecot-common dovecot-imapd dovecot-pop3d postfix postfix-mysql openssl dovecot-mysql

Wenn Postfix dich fragt welchen Modus, so wähle  Internet-Server(internet site) aus. Damit wäre die eigentliche Installation abgeschlossen.

Lade dir nun PostfixAdmin unter http://sourceforge.net/projects/postfixadmin/ herunter und Entpacke es nach var/www/html/postfixadmin.
Damit wäre die eigentliche Installation abgeschlossen. Kümmern wir uns nun um die Konfiguration.

Konfiguration

Öffne die config.inc.php im Ordner var/www/html/postfixadmin und ändere folgende Werte. Achte darauf das deine MySQL Zugangsdaten stimmen.

$CONF['configured'] = true;
$CONF['default_language'] = 'de';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = '127.0.0.1';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'mysqlpw';
$CONF['database_name'] = 'postfix';
$CONF['database_prefix'] = '';

// Verschlüsselungsart der Passwörter
$CONF['encrypt'] = 'md5';
$CONF['postfix_admin_url'] = 'http://your.address/to/postfixadmin';

$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['maildir_name_hook'] = 'NO';

$CONF['generate_password'] = 'NO';
$CONF['show_password'] = 'NO';

Speicher die Änderungen und Rufe http://your.address/to/postfixadmin auf. Das Setup sollte selbsterklärend sein.

Wir werden alle E-Mails in dem Ordner /var/vmail/domain.tld/username/ ablegen.
Wir legen uns zunächst einen neuen UNIX Benutzer sowie eine neue UNIX Gruppe an um nicht jedem Zugriff auf die E-Mails zu geben.

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/vmail

Wenn die ID 5000 vergeben ist, so wähle eine andere.

Als nächstes wird der Benutzerordner angelegt und wir vergeben die Zugriffsrechte.

mkdir /var/vmail
chown vmail:vmail /var/vmail

SSL Zertifikat

Wir wollen unsere Daten nur in verschlüsselter Form übertragen, womit man verhindern kann, dass Dritte die eigenen Nachrichten mitlesen können.

Hierfür benötigen wir ein SSL Zertifikat. Dieses kann man entweder kaufen, ein gratis Zertifikat bei StartSSL™ beantragen oder ein Zertifikat selbst signieren. Wir generieren uns für den Mailserver ein selbst signiertes Zertifikat.

Die Schlüssel legen wir an in einem zentralen Ordner ab.

mkdir /etc/postfix/sslcert
cd /etc/postfix/sslcert

Jetzt geht es an das Zertifikat.
Achtung: Hierbei werden einige Daten abgefragt. Soll ein Feld leer bleiben, so sollte man einen Punkt „.“ in dem Feld hinterlassen.
Wichtig: Unter dem Eintrag „Common Name“ muss der Hostname eingetragen werden, unter dem die E-Mails abgerufen werden. Zum Beispiel rs.example.com

openssl req -new -newkey rsa:4096 -nodes -keyout server.key -days 730 -x509 -out server.crt/etc/postfix/sslcert wiederholt werden)

Wir schränken die Zugriffsrechte auf die beiden generierten Dateien ein.
chmod go-rwx server.key

Postfix der eigentliche Mailserver

Postfix ist der Teil des Mailserver der E-Mails verarbeitet.
Die Hauptkonfigurationsdatei von Postfix entspricht unseren Vorstellungen, so das wir nur einige Zeilen einfügen müssen Damit der Mailserver nicht von Dritten als Spam-Schleuder missbraucht wird.

Füge hierzu folgenden Inhalt mittels nano oder WinSCP /etc/postfix/main.cf am Ende der Datei 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
 
# Mailboxen
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 = 124000000
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 104
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

Zusätzlich zu den eingefügten Einstellungen, suche die 2 Zeilen mit den Anweisungen smtpd_tls_cert_file sowie smtpd_tls_key_file und ersetze diese 2 Zeilen durch folgende 2 Zeilen:

smtpd_tls_cert_file = /etc/postfix/sslcert/server.crt
smtpd_tls_key_file = /etc/postfix/sslcert/server.key

Weitere Konfigurationsparameter findest du unter http://www.postfix.org/postconf.5.html

Nun müssen wir postfix mitteilen, dass wir Dovecot für IMAP und POP3 verwenden. Hierfür müssen am Ende der Datei /etc/postfix/master.cf folgende 2 Zeilen eingefügt werden:

dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

Achtung: Die 2 Leerzeichen vor flags sind beabsichtigt. Diese beschreiben einen Befehl der Zeile darüber.
Und hier ist ganz wichtig nach der letzten Zeile eine Leerzeile am Ende der Datei einzufügen.

Zusätzlich weisen wir in dieser Datei noch an, dass SSL via SMTP aktiviert werden soll.
Suche dazu in der Datei die Zeile heraus, wo am Anfang „smtps“ steht, und ändere den Eintrag so ab, dass dieser so aussieht:

smtps     inet  n       -       -       -       -       smtpd
  -o smtpd_tls_wrappermode=yes

Auch hier bitte auf die 2 Leerzeichen achten!

MySQL für Postfix

Nun wird es Zeit, postfix anzuweisen, dass MySQL für die Benutzer verwendet werden soll. Hierfür müssen einige neue Dateien erstellt werden.

/etc/postfix/mysql_virtual_alias_maps.cf

hosts = 127.0.0.1
user = postfix
password = mysqlpw
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = 1

/etc/postfix/mysql_virtual_mailbox_maps.cf

hosts = 127.0.0.1
user = postfix
password = mysqlpw
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1

/etc/postfix/mysql_sender_login_maps.cf

hosts = 127.0.0.1
user = postfix
password = mysqlpw
dbname = postfix
query = SELECT username AS allowedUser FROM mailbox WHERE username='%s' AND active = 1 UNION SELECT goto FROM alias WHERE address='%s' AND active = 1

/etc/postfix/mysql_virtual_domains_maps.cf

hosts = 127.0.0.1
user = postfix
password = mysqlpw
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND active = 1

Da dies sehr sensible Daten sind, müssen wir diese vor unbefugten Zugriff schützen.

chmod o-rwx,g+r mysql_*
chgrp postfix mysql_*

Dovecot

Dovecot ist für die Bereitstellung unserer E-Mails über IMAP und POP3 zuständig. Durch diesen ist es möglich, E-Mails auf Smartphones, Computer etc. abzurufen.

Da in der standardmäßigen Konfiguration von Dovecot zu viel zu ändern wäre, sichern wir diese als Backup ab und schreiben uns eine neue Konfigurationsdatei. Hierzu führe folgendes aus:

mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.sample

Nun fügen wir in die Datei /etc/dovecot/dovecot.conf folgendes ein:

auth_mechanisms = plain login
log_timestamp = "%Y-%m-%d %H:%M:%S "
passdb {
  args = /etc/dovecot/dovecot-mysql.conf
  driver = sql
}
protocols = imap pop3
service auth {
  unix_listener /var/spool/postfix/private/auth_dovecot {
    group = postfix
    mode = 0660
    user = postfix
  }
  unix_listener auth-master {
    mode = 0600
    user = vmail
  }
  user = root
}
ssl_cert =/etc/postfix/sslcert/server.crt
ssl_key =/etc/postfix/sslcert/server.key
userdb {
  args = /etc/dovecot/dovecot-mysql.conf
  driver = sql
}
protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
}
protocol lda {
  auth_socket_path = /var/run/dovecot/auth-master
  postmaster_address = postmaster@example.com
}

Ersetze hierbei example.com mit deiner Domain.

Da Dovecot für IMAP und POP3 zuständig ist, muss dieser unsere Benutzer sowie Passwörter kennen. Daher müssen wir diesen mit unserer Datenbank verbinden.
Um dies zu ermöglichen, müssen wir die Datei /etc/dovecot/dovecot-mysql.conf anlegen und mit folgendem Inhalt befüllen:

driver = mysql
connect = host=localhost dbname=postfix 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'

Damit kein Fremder unsere Daten auslesen kann, ändern wir auch hier die Zugriffsrechte:

chmod o-rwx,g+r /etc/dovecot/dovecot-mysql.conf
chgrp vmail /etc/dovecot/dovecot-mysql.conf

Zum Abschluss müssen wir noch beide Softwarepakete neu starten. Hierfür kann entweder der Server neu gestartet werden, oder folgender Befehl ausgeführt werden:

/etc/init.d/dovecot restart
postfix reload

Das war’s!
Der E-Mail-Server ist nun fertig konfiguriert und für den aktiven Betrieb geeignet.

One thought on “Mailserver mit Postfix, Dovecot, PostfixAdmin und MySQL unter Debian Jessie

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.