Postfix/Dovecot Mailserver unter Debian einrichten und mit MySQL und phpMyAdmin verwalten
Einen sicheren Mailserver unter Debian einzurichten ist eine einfache Sache und geht sehr zügig. Das ist nicht nur nützlich um seine E-Mails zu verwalten, sondern auch praktisch für Anwendungen die in der Lage sein sollen E-Mails zu versenden (z.B. PHP Skripte über die mail() Funktion).
Als erstes benötigt der Server (sofern nicht bereits vorhanden) MySQL, denn darüber sollen später ja die Benutzer verwaltet werden.
apt-get update && apt-get upgrade apt-get install mysql-server
Das Passwort das hier abgefragt wird ist nicht das Password des Systemusers root, sondern des MySQL Users root, der Rechte auf alles hat. Wenn nicht vorhanden, muss dieses hier festgelegt werden. Danach können die nötigen Tabellen für unseren Mailserver erstellt werden.
mysql -u root -p
Danach mit dem eben festgelegten root Passwort einloggen und dann folgende SQL-Befehle feuern:
create database vmail; use vmail; create table users (id INT UNSIGNED AUTO_INCREMENT NOT NULL, username VARCHAR(128) NOT NULL, domain VARCHAR(128) NOT NULL, password VARCHAR(128) NOT NULL, UNIQUE (id), PRIMARY KEY (username, domain) ); create table domains (id INT UNSIGNED AUTO_INCREMENT NOT NULL, domain VARCHAR(128) NOT NULL, UNIQUE (id), PRIMARY KEY (domain)); create table aliases (id INT UNSIGNED AUTO_INCREMENT NOT NULL, source VARCHAR(128) NOT NULL, destination VARCHAR(128) NOT NULL, UNIQUE (id), PRIMARY KEY (source, destination) ); GRANT ALL ON vmail.* TO 'vmail'@'localhost' IDENTIFIED BY 'vmailpasswort';
Beim letzten Befehl muss "vmailpasswort" natürlich durch ein sicheres, selbstgewähltes Passwort ersetzt werden.
Als nächstes erstellen wir eine Verzeichnisstruktur für die E-Mail-Postfächer unter /var/vmail
mkdir /var/vmail
Jetzt erstellen wir einen eigenen User, der diese Verzeichnisse besitzt und beschreiben darf
sdfduseradd vmail chown -R vmail:vmail /var/vmail chmod -R 770 /var/vmail/
Soviel zur Vorbereitung. Jetzt wird dovecot installiert.
apt-get install dovecot-common dovecot-imapd dovecot-mysql dovecot-lmtpd
Jetzt muss die Konfiguration angepasst werden. In /etc/dovecot/conf.d/10-mail.conf folgende Einstellungen setzen (ggf. einkommentieren):
mail_home = /var/vmail/%d/%n mail_location = maildir:~/mail:LAYOUT=fs mail_uid = vmail mail_gid = vmail mail_privileged_group = vmail
Danach in /etc/dovecot/dovecot-sql.conf.ext folgende Einstellungen setzen und "vmailpasswort" durch das selbstgewählte Passwort ersetzen:
driver = mysql connect = host=127.0.0.1 dbname=vmail user=vmail password=vmailpasswort default_pass_scheme = MD5 password_query = \ SELECT username, domain, password \ FROM users WHERE username = '%n' AND domain = '%d'
In /etc/dovecot/conf.d/10-auth.conf folgende Sicherheitseinstellungen setzen (ggf. sind einige schon vorhanden und müssen entsprechend abgeändert werden):
disable_plaintext_auth = yes auth_mechanisms = plain login #!include auth-system.conf.ext
In der Datei /etc/dovecot/dovecot.conf den ganzen Inhalt löschen und stattdessen diesen Inhalt einfügen:
# Enable installed protocols !include_try /usr/share/dovecot/protocols.d/*.protocol listen = *, :: base_dir = /var/run/dovecot/ # Greeting message for clients. login_greeting = Dovecot ready. !include conf.d/*.conf !include_try local.conf # Passdb SQL passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext }
In der Datei /etc/dovecot/conf.d/10-master.conf die service auth Sektion folgendermaßen einstellen...
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 } }
... und die service lmtp Sektion so einstellen:
service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0660 group = postfix user = postfix } user = vmail }
Jetzt noch in /etc/dovecot/conf.d/15-lda.conf unter
postmaster_address =
eine gültige Adresse eintragen an die Fehlermeldungen des Servers versendet werden sollen.
In der Datei /etc/dovecot/conf.d/10-ssl.conf können Sicherheitseinstellungen vorgenommen werden.
ssl = required ssl_cert = </etc/dovecot/dovecot.pem ssl_key = </etc/dovecot/private/dovecot.pem 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 ssl_protocols = !SSLv2 !SSLv3 ssl_prefer_server_ciphers = yes
Jetzt wird Postfix installiert
apt-get install postfix postfix-mysql
Während der Installation sollte ein kleines Setup durchlaufen werden. Falls nicht, kann es mit...
dpkg-reconfigure postfix
... neu augelöst werden. Ansonsten einfach Internet-Site wählen und als Server den Domainnamen des Servers nehmen, z.B. ubuntu-server.local o.ä.
Die Datei /etc/postfix/main.cf kann wieder komplett geleert und mit folgendem Inhalt befüllt werden:
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) biff = no append_dot_mydomain = no readme_directory = no mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mydestination = mailbox_size_limit = 51200000 message_size_limit = 51200000 recipient_delimiter = inet_interfaces = all myorigin = ubuntu-server inet_protocols = all ##### TLS parameters ###### smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3 smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache ###### SASL Auth ###### smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes ###### Use Dovecot LMTP Service to deliver Mails to Dovecot ###### virtual_transport = lmtp:unix:private/dovecot-lmtp ##### Only allow mail transport if client is authenticated or in own network (PHP Scripts, ...) ###### smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination ###### MySQL Connection ###### virtual_alias_maps = mysql:/etc/postfix/virtual/mysql-aliases.cf virtual_mailbox_maps = mysql:/etc/postfix/virtual/mysql-maps.cf virtual_mailbox_domains = mysql:/etc/postfix/virtual/mysql-domains.cf local_recipient_maps = $virtual_mailbox_maps
Für „myorigin” wird wieder die Domain des Servers eingetragen und die beiden *_size_limit Parameter sind Werte in Byte, die die maximale Größe für Mailbox und Message definieren. Am besten etwas höher stellen, wenn der Server es hergibt. Wer außerdem wieder gültige Zertifikate besitzt, sollte diese oben bei TLS parameters anstelle der ssl-cert-snakeoil.pem und .key Dateien verlinken.
Anschließend in der Datei /etc/postfix/master.cf den kompletten "submission"-Block inkl -o Parameter löschen und durch diesen ersetzen:
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
Jetzt noch die nötigen Ordner anlegen und berechtigen:
mkdir /etc/postfix/virtual chmod 660 /etc/postfix/virtual/ cd /etc/postfix/virtual
Darin dann eine neue Datei mysql-aliases.cf erstellen und mit folgendem Inhalt befüllen (vmailpasswort logischerweise durch das selbst gewählte Passwort ersetzen):
user = vmail password = vmailpasswort hosts = 127.0.0.1 dbname = vmail query = SELECT destination FROM aliases WHERE source='%s'
Im selben Ordner dann eine Datei namens mysql-maps.cf erstellen und befüllen (auch hier auf vmailpasswort achten):
user = vmail password = vmailpasswort hosts = 127.0.0.1 dbname = vmail query = SELECT * FROM users WHERE username='%u' AND domain='%d'
Und zuguterletzt unter Berücksichtigung von vmailpasswort auch die Datei mysql-domains.cf anlegen und befüllen:
user = vmail password = vmailpasswort hosts = 127.0.0.1 dbname = vmail query = SELECT * FROM domains WHERE domain='%s'
Das war's mit der Konfiguration. Bevor wir den Server neustarten, muss die Datenbank mit einem ersten Benutzer befüllt werden. Dazu entweder händisch die Konsole bedienen, oder mit phpMyAdmin einloggen und User anlegen. Hier ein paar Beispielkommandos für die Konsole:
mysql -u root -p use vmail; insert into domains (domain) values ('allvintage.net'); insert into users (username, domain, password) values ('webmaster', 'allvintage.net', MD5('MeinMd5VerschluesseltesPasswort')); insert into aliases (source, destination) values ('support@allvintage.net', 'webmaster@allvintage.net'); exit; //Nicht vergessen alle Services neuzustarten service dovecot restart service postfix reload service postfix restart //Die Einrichtung im Webserver funktioniert jetzt übrigens per STARTTLS mit IMAP Port 143 und SMTP Port 25 bzw 587
Kommentare
Kev (nicht überprüft)
26. September 2016 - 13:31
Permalink
Debian
In der Übersicht steht Debian. In der Main.cf steht Ubuntu. Was jetzt?