You are here: Home Linux Mailserver Mailserver mit Postfix, Dovecot, Postfixadmin und MySQL (Debian Etch)
Search
Advanced Search…
E-Mail

Webmail: webmail.wyden.com

E-Mail Preferences: postfix.wyden.com/users

E-Mail Administration: postfix.wyden.com

Statistics
Total: 463
Total Pages: 284
Total Folders: 87
Total Files: 18
Total Links: 26
Last modification: 03.02.2012 16:00
 

Mailserver mit Postfix, Dovecot, Postfixadmin und MySQL (Debian Etch)

by Wyden Silvan last modified 28.10.2009 21:55

Ü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:

uebersicht.png




Benötigte Pakete installieren

Ich gehe davon aus, dass auf dem System schon ein

MySQL-Server

sowie

Webserver mit PHP

eingerichtet ist.

 

Code:
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:

 

Code:
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:

 

Code:
//$CONF['configured'] = false;

Passe danach folgende Werte für eine MySQL-Verbindung an:

 

Code:
$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:

 

Code:
$CONF['encrypt'] = 'md5';

Folgende Werte wie folgt anpassen, um die Speicherung nach dem Muster

/var/vmail/%domainame/%username/

zu aktivieren:

 

Code:
$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.

 

Code:
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).

 

Code:
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

 

Code:
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.

Code:
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.

 

Code:
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:

 

Code:
# 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:

 

Code:
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!)

 

Code:
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

Code:
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

Code:
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

Code:
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

Code:
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.

 

Code:
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.

 

Code:
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...

 

Code:
mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.sample

... und durch folgende ersetzen.

 

Code:
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

Code:
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

 

Code:
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.

 

Code:
/etc/init.d/dovecot restart
postfix reload

Sollten Probleme auftreten, kannst du dich jederzeit im Inside-IRC in

#irc

oder auch unter

shenziro@inside-irc.net

melden.


(Support ist nicht garantiert. Aber man tut was man kann. )


Links

1. GnuPG:

http://www.gnupg.org/

,

http://de.wikipedia.org/wiki/GNU_Privacy_Guard

Endlich mal ein gutes

Posted by Anonymous User at 02.04.2011 22:32
Super Dank,

dein HowTo ist endlich einmal eines, mit dem man was anfangen kann.

Funktioniert auch bei mir

Posted by Anonymous User at 03.04.2011 22:13
Prima Anleitung.
Herzlichen Dank!

Feines HOWTO

Posted by Anonymous User at 10.04.2011 18:33
Sehr schön und sauber erstellt und erklärt, jetzt kann ich mir iRedmail sparen ;)

vielen Dank und weiter so.

Adrian schreibt...

Posted by Anonymous User at 17.05.2011 09:20
Super :-)
Problem nur hierbei: E-Mails können über einen angelegten Account versendet werden, weiterleitung (also forwardings) funktionieren auch...
Nur das "zusenden" zu einer Mailbox funktioniert nicht:

Final-Recipient: rfc822; info@knugle.de
Original-Recipient: rfc822;info@knugle.de
Action: failed
Status: 5.1.1
Diagnostic-Code: X-Postfix; unknown user: "info"

Einloggen funktioniert zwar, aber mails werden nicht übermittelt.

Jenmand eine Idee, woran es liegen kann?
Ja, Tutorial 1 zu 1 übernommen, dementsprechende änderungen (Domains bzw. Zugangsdaten der DB) noch vorgenommen.

Adrian schreibt...

Posted by Anonymous User at 17.05.2011 09:31
habe es nun hinbekommen, lag daran, das hier noch

local_transport = virtual

gefehlt hatte!!

Danke!

Posted by Anonymous User at 26.05.2011 21:48
Hallo!
Vielen Dank für dieses How-To!
Bin über einen doofen Copy-Paste-Fehler gestolpert, der mir als unerfahrenen Deppen ziemlich viel Zeit gekostet hat. Vielleicht gibt es ja noch einige von mir da draußen und ich kann ihnen helfen:

Falls ihr nicht zu eurem POP3-Server connecten könnt (Authentication failure, oder Ähnliches) und in der /var/log/mail.log folgendes steht

[...] User query failed: Unknown column 'maildir' in 'field list'

dann achtet darauf, dass ihr den kompletten User-SQL-Query in der /etc/dovecot/dovecot-mysql.conf drin habt.
Mir ist es beim kopieren passiert, dass nur die Hälfte des Querys in der Datei landete und der ganze Kram einfach nicht geklappt hat. ;)

Gruß
Sebastian

Danke!

Posted by Anonymous User at 16.08.2011 10:49
Hallo,

soweit funktioniert das ganz gut.
Beim erstellen von Mailboxen bekomme ich aber einen Error 500.
Jemand ähnliche Erfahrung?

Gruß
Manfred

Postfixadmin

Posted by Anonymous User at 14.11.2011 16:57
Hallo, danke für ihr Tutorial. Ich habse alles befolgt, jedoch wenn ich über Postfixadmin eine Mail schicken, oder ein neuen Alias anlegen möchte, läd es im Browser und lädt und lädt. Das Ergebnis ist nach einem Neuladen, dass nichts passiert ist. Können Sie mir dabei helfen?
Grüße

Postfixadmin

Posted by Anonymous User at 09.01.2012 23:05
Hallo. Super Anleitung. Hat auch alles so hingehauen.
Leider habe ich das gleiche Problem wie mein Vorredner. Sobald ich eine Mailbox anlege und sie hinzufügen will, lädt mein Browser unendlich. Wenn ich das selber reloade, wurde nix angelegt.
Woran kann das liegen?

Bedanke mich für antworten. ;)
bis denn Michael

Postfixadmin Fehlermeldung

Posted by Anonymous User at 31.01.2012 19:26
Hallo,
Ich habe den Mailserver nach der Anleitung installiert und wenn ich jetzt eine Mailbox erstellen möchte, kommt folgende Fehlermeldung " Invalid domain name selected, or you tried to select a domain you are not an admin for ".

Ich hoffe mir kann einer helfen.

MFG
Marcel

Postfixadmin Fehlermeldung

Posted by Anonymous User at 01.02.2012 14:05
erst domain eintragen dann mailbox erstellen