Postfix Konfiguration · 8 min read · Jan 17, 2026

Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (Ubuntu 12.04 LTS) - Seite 2

5 Konfigurieren Sie Postfix

Jetzt müssen wir Postfix mitteilen, wo es alle Informationen in der Datenbank finden kann. Dazu müssen wir sechs Textdateien erstellen. Sie werden bemerken, dass ich Postfix sage, es soll sich über die IP-Adresse 127.0.0.1 an MySQL verbinden, anstatt localhost zu verwenden. Das liegt daran, dass Postfix in einem Chroot-Jail läuft und keinen Zugriff auf den MySQL-Socket hat, auf den es versuchen würde zuzugreifen, wenn ich Postfix sage, es solle localhost verwenden. Wenn ich 127.0.0.1 verwende, nutzt Postfix TCP-Netzwerkverbindungen, um sich mit MySQL zu verbinden, was selbst in einem Chroot-Jail kein Problem darstellt (die Alternative wäre, den MySQL-Socket in das Chroot-Jail zu verschieben, was einige andere Probleme verursacht).

Bitte stellen Sie sicher, dass /etc/mysql/my.cnf die folgende Zeile enthält:

vi /etc/mysql/my.cnf

| [...] # Anstelle von skip-networking ist die Standardeinstellung jetzt, nur auf # localhost zu hören, was kompatibler ist und nicht weniger sicher. bind-address = 127.0.0.1 [...] |

Wenn Sie /etc/mysql/my.cnf ändern mussten, starten Sie MySQL bitte jetzt neu:

/etc/init.d/mysql restart

Führen Sie

netstat -tap | grep mysql

aus, um sicherzustellen, dass MySQL auf 127.0.0.1 (localhost.localdomain) hört:

root@server1:/usr/src# netstat -tap | grep mysql
tcp 0 0 localhost.localdo:mysql : LISTEN 3895/mysqld
root@server1:/usr/src#

Jetzt erstellen wir unsere sechs Textdateien.

vi /etc/postfix/mysql-virtual_domains.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT domain AS virtual FROM domains WHERE domain='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_forwardings.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT destination FROM forwardings WHERE source='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_mailboxes.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_email2email.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT email FROM users WHERE email='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_transports.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT transport FROM transport WHERE domain='%s' hosts = 127.0.0.1 |

vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf

| user = mail_admin password = mail_admin_password dbname = mail query = SELECT quota FROM users WHERE email='%s' hosts = 127.0.0.1 |

Ändern Sie dann die Berechtigungen und die Gruppe dieser Dateien:

chmod o= /etc/postfix/mysql-virtual*.cf
chgrp postfix /etc/postfix/mysql-virtual
*.cf

Jetzt erstellen wir einen Benutzer und eine Gruppe namens vmail mit dem Home-Verzeichnis /home/vmail. Hier werden alle Mailboxen gespeichert.

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

Als nächstes führen wir einige Postfix-Konfigurationen durch. Stellen Sie sicher, dass Sie server1.example.com durch einen gültigen FQDN ersetzen, andernfalls funktioniert Ihr Postfix möglicherweise nicht richtig!

postconf -e ‘myhostname = server1.example.com’
postconf -e ‘mydestination = server1.example.com, localhost, localhost.localdomain’
postconf -e ‘mynetworks = 127.0.0.0/8’
postconf -e ‘virtual_alias_domains =’
postconf -e ‘virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf’
postconf -e ‘virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf’
postconf -e ‘virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf’
postconf -e ‘virtual_mailbox_base = /home/vmail’
postconf -e ‘virtual_uid_maps = static:5000’
postconf -e ‘virtual_gid_maps = static:5000’
postconf -e ‘smtpd_sasl_auth_enable = yes’
postconf -e ‘broken_sasl_auth_clients = yes’
postconf -e ‘smtpd_sasl_authenticated_header = yes’
postconf -e ‘smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination’
postconf -e ‘smtpd_use_tls = yes’
postconf -e ‘smtpd_tls_cert_file = /etc/postfix/smtpd.cert’
postconf -e ‘smtpd_tls_key_file = /etc/postfix/smtpd.key’
postconf -e ‘transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf’
postconf -e ‘virtual_maildir_extended = yes’
postconf -e ‘virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf’
postconf -e ‘virtual_mailbox_limit_override = yes’
postconf -e ‘virtual_maildir_limit_message = “Der Benutzer, den Sie zu erreichen versuchen, hat das Kontingent überschritten.”‘
postconf -e ‘virtual_overquota_bounce = yes’
postconf -e ‘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 $virtual_mailbox_limit_maps’

Anschließend erstellen wir das SSL-Zertifikat, das für TLS benötigt wird:

cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509

Landname (2-Buchstaben-Code) [AU]: <– Geben Sie Ihren Landnamen ein (z.B. “DE”).
Bundesland oder Provinzname (vollständiger Name) [Some-State]: <– Geben Sie Ihren Bundesland- oder Provinzname ein.
Ortsname (z.B. Stadt) []: <– Geben Sie Ihre Stadt ein.
Organisationsname (z.B. Firma) [Internet Widgits Pty Ltd]: <– Geben Sie Ihren Organisationsnamen ein (z.B. den Namen Ihrer Firma).
Name der organisatorischen Einheit (z.B. Abteilung) []: <– Geben Sie den Namen Ihrer organisatorischen Einheit ein (z.B. “IT-Abteilung”).
Allgemeiner Name (z.B. IHR Name) []: <– Geben Sie den vollqualifizierten Domainnamen des Systems ein (z.B. “server1.example.com”).
E-Mail-Adresse []: <– Geben Sie Ihre E-Mail-Adresse ein.

Ändern Sie dann die Berechtigungen der smtpd.key:

chmod o= /etc/postfix/smtpd.key

6 Konfigurieren Sie Saslauthd

Zuerst führen Sie aus

mkdir -p /var/spool/postfix/var/run/saslauthd

Bearbeiten Sie dann /etc/default/saslauthd. Setzen Sie START auf yes und ändern Sie die Zeile OPTIONS=”-c -m /var/run/saslauthd” in OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r”:

vi /etc/default/saslauthd

| # # Einstellungen für den saslauthd-Daemon # Bitte lesen Sie /usr/share/doc/sasl2-bin/README.Debian für Details. # # Sollte saslauthd beim Start automatisch ausgeführt werden? (Standard: nein) START=yes # Beschreibung dieser saslauthd-Instanz. Empfohlen. # (Vorschlag: SASL Authentication Daemon) DESC="SASL Authentication Daemon" # Kurzname dieser saslauthd-Instanz. Stark empfohlen. # (Vorschlag: saslauthd) NAME="saslauthd" # Welche Authentifizierungsmechanismen sollte saslauthd verwenden? (Standard: pam) # # Verfügbare Optionen in diesem Debian-Paket: # getpwent -- verwenden Sie die getpwent()-Bibliotheksfunktion # kerberos5 -- verwenden Sie Kerberos 5 # pam -- verwenden Sie PAM # rimap -- verwenden Sie einen Remote-IMAP-Server # shadow -- verwenden Sie die lokale Schattenpasswortdatei # sasldb -- verwenden Sie die lokale sasldb-Datenbankdatei # ldap -- verwenden Sie LDAP (Konfiguration befindet sich in /etc/saslauthd.conf) # # Es darf jeweils nur eine Option verwendet werden. Siehe die saslauthd-Man-Seite # für weitere Informationen. # # Beispiel: MECHANISMS="pam" MECHANISMS="pam" # Zusätzliche Optionen für diesen Mechanismus. (Standard: keine) # Siehe die saslauthd-Man-Seite für Informationen zu mech-spezifischen Optionen. MECH_OPTIONS="" # Wie viele saslauthd-Prozesse sollten wir ausführen? (Standard: 5) # Ein Wert von 0 erstellt einen neuen Prozess für jede Verbindung. THREADS=5 # Weitere Optionen (Standard: -c -m /var/run/saslauthd) # Hinweis: Sie MÜSSEN die -m-Option angeben, sonst wird saslauthd nicht ausgeführt! # # WARNUNG: GEBEN SIE NICHT DIE -d OPTION AN. # Die -d-Option führt dazu, dass saslauthd im Vordergrund anstelle als # Daemon ausgeführt wird. Dies VERHINDERT, DASS IHR SYSTEM RICHTIG BOOTET. Wenn Sie # saslauthd im Debug-Modus ausführen möchten, führen Sie es bitte manuell aus, um auf der sicheren Seite zu sein. # # Siehe /usr/share/doc/sasl2-bin/README.Debian für Debian-spezifische Informationen. # Siehe die saslauthd-Man-Seite und die Ausgabe von 'saslauthd -h' für allgemeine # Informationen zu diesen Optionen. # # Beispiel für Chroot-Postfix-Benutzer: "-c -m /var/spool/postfix/var/run/saslauthd" # Beispiel für nicht-Chroot-Postfix-Benutzer: "-c -m /var/run/saslauthd" # # Um zu wissen, ob Ihr Postfix im Chroot läuft, überprüfen Sie /etc/postfix/master.cf. # Wenn es die Zeile "smtp inet n - y - - smtpd" oder "smtp inet n - - - - smtpd" hat, dann läuft Ihr Postfix in einem Chroot. # Wenn es die Zeile "smtp inet n - n - - smtpd" hat, dann läuft Ihr Postfix NICHT # in einem Chroot. #OPTIONS="-c -m /var/run/saslauthd" OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r" |

Erstellen Sie dann die Datei /etc/pam.d/smtp. Sie sollte nur die folgenden beiden Zeilen enthalten (stellen Sie sicher, dass Sie Ihre korrekten Datenbankdetails eingeben):

vi /etc/pam.d/smtp

| auth required pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 |

Erstellen Sie als Nächstes die Datei /etc/postfix/sasl/smtpd.conf. Sie sollte folgendermaßen aussehen:

vi /etc/postfix/sasl/smtpd.conf

| pwcheck_method: saslauthd mech_list: plain login allow_plaintext: true auxprop_plugin: sql sql_engine: mysql sql_hostnames: 127.0.0.1 sql_user: mail_admin sql_passwd: mail_admin_password sql_database: mail sql_select: select password from users where email = '%u@%r' |

Fügen Sie als Nächstes den Postfix-Benutzer zur sasl-Gruppe hinzu (dies stellt sicher, dass Postfix die Berechtigung hat, auf saslauthd zuzugreifen):

adduser postfix sasl

Starten Sie dann Postfix und Saslauthd neu:

/etc/init.d/postfix restart
/etc/init.d/saslauthd restart

7 Konfigurieren Sie Courier

Jetzt müssen wir Courier mitteilen, dass es sich gegen unsere MySQL-Datenbank authentifizieren soll. Zuerst bearbeiten Sie /etc/courier/authdaemonrc und ändern Sie den Wert von authmodulelist, sodass er lautet:

vi /etc/courier/authdaemonrc

| [...] authmodulelist="authmysql" [...] |

Machen Sie dann eine Sicherungskopie von /etc/courier/authmysqlrc und leeren Sie die alte Datei:

cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null > /etc/courier/authmysqlrc

Öffnen Sie dann /etc/courier/authmysqlrc und fügen Sie die folgenden Zeilen ein:

vi /etc/courier/authmysqlrc

| MYSQL_SERVER localhost MYSQL_USERNAME mail_admin MYSQL_PASSWORD mail_admin_password MYSQL_PORT 0 MYSQL_DATABASE mail MYSQL_USER_TABLE users MYSQL_CRYPT_PWFIELD password #MYSQL_CLEAR_PWFIELD password MYSQL_UID_FIELD 5000 MYSQL_GID_FIELD 5000 MYSQL_LOGIN_FIELD email MYSQL_HOME_FIELD "/home/vmail" MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') #MYSQL_NAME_FIELD MYSQL_QUOTA_FIELD quota |

Während der Installation werden die SSL-Zertifikate für IMAP-SSL und POP3-SSL mit dem Hostnamen localhost erstellt. Um dies auf den korrekten Hostnamen (server1.example.com in diesem Tutorial) zu ändern, löschen Sie die Zertifikate…

cd /etc/courier
rm -f /etc/courier/imapd.pem
rm -f /etc/courier/pop3d.pem

… und ändern Sie die folgenden beiden Dateien; ersetzen Sie CN=localhost durch CN=server1.example.com (Sie können auch die anderen Werte nach Bedarf ändern):

vi /etc/courier/imapd.cnf

| [...] CN=server1.example.com [...] |

vi /etc/courier/pop3d.cnf 

| [...] CN=server1.example.com [...] |

Erstellen Sie dann die Zertifikate erneut… mkimapdcert
mkpop3dcert

… und starten Sie Courier neu:

/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restart

Durch Ausführen von

telnet localhost pop3

können Sie sehen, ob Ihr POP3-Server korrekt funktioniert. Es sollte +OK Hello there. zurückgeben. (Tippen Sie quit, um zur Linux-Shell zurückzukehren.)

root@server1:/etc/courier# telnet localhost pop3
Trying 127.0.0.1…
Connected to localhost.localdomain.
Escape character is ‘^]’.
+OK Hello there.
<– quit
+OK Better luck next time.
Connection closed by foreign host.
root@server1:/etc/courier#

8 Ändern Sie /etc/aliases

Jetzt sollten wir /etc/aliases öffnen. Stellen Sie sicher, dass der Postmaster auf root und root auf Ihren eigenen Benutzernamen oder Ihre E-Mail-Adresse zeigt, z.B. so:

vi /etc/aliases

| [...] postmaster: root root: [email protected] [...] |

oder so (wenn administrator Ihr eigener Benutzername ist):

| [...] postmaster: root root: administrator [...] |

Wann immer Sie /etc/aliases ändern, müssen Sie danach

newaliases

ausführen und Postfix neu starten:

/etc/init.d/postfix restart
Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.