Postfix Konfiguration · 7 min read · Sep 28, 2025
Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (Debian Lenny) - Seite 2
5 Konfigurieren Sie Postfix
Jetzt müssen wir Postfix mitteilen, wo es alle Informationen in der Datenbank finden kann. Daher müssen wir sechs Textdateien erstellen. Sie werden bemerken, dass ich Postfix sage, dass es sich mit MySQL unter der IP-Adresse 127.0.0.1 anstelle von localhost verbinden soll. Dies liegt daran, dass Postfix in einem Chroot-Jail läuft und keinen Zugriff auf den MySQL-Socket hat, mit dem es sich verbinden würde, wenn ich Postfix sage, dass es localhost verwenden soll. Wenn ich 127.0.0.1 verwende, verwendet 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| [...] bind-address = 127.0.0.1 [...] |
Wenn Sie /etc/mysql/my.cnf ändern mussten, starten Sie MySQL jetzt neu:
/etc/init.d/mysql restartFühren Sie
netstat -tap | grep mysqlaus, um sicherzustellen, dass MySQL auf 127.0.0.1 (localhost.localdomain) hört:
server1:/usr/src# netstat -tap | grep mysql
tcp 0 0 localhost.localdo:mysql *:* LISTEN 4559/mysqld
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_*.cfJetzt 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 -mAls 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 'message_size_limit = 30720000'
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_create_maildirsize = yes'
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 erreichen möchten, 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'Danach 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 -x509Ländercode (2 Buchstaben) [AU]: <– Geben Sie Ihren Ländercode ein (z.B. “DE”).
Bundesland oder Provinzname (vollständiger Name) [Some-State]: <– Geben Sie den Namen Ihres Bundeslandes oder Ihrer Provinz ein.
Ortsname (z.B. Stadt) []: <– Geben Sie Ihre Stadt ein.
Organisationsname (z.B. Firma) [Internet Widgits Pty Ltd]: <– Geben Sie den Namen Ihrer Organisation ein (z.B. den Namen Ihres Unternehmens).
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.key6 Konfigurieren Sie Saslauthd
Zuerst ausführen
mkdir -p /var/spool/postfix/var/run/saslauthdBearbeiten 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. # # Soll 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. Dringend 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 Shadow-Passwortdatei # 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 bewirkt, dass saslauthd im Vordergrund anstelle als Daemon ausgeführt wird. # Dies VERHINDERT, DASS IHR SYSTEM RICHTIG STARTET. 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 Postfix-Benutzer: "-c -m /var/spool/postfix/var/run/saslauthd" #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 ausfüllen):
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 so aussehen:
vi /etc/postfix/sasl/smtpd.conf| pwcheck_method: saslauthd mech_list: plain login allow_plaintext: true auxprop_plugin: 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' |
Fügen Sie dann den Postfix-Benutzer zur sasl-Gruppe hinzu (dies stellt sicher, dass Postfix die Berechtigung hat, auf saslauthd zuzugreifen):
adduser postfix saslStarten Sie dann Postfix und Saslauthd neu:
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart7 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 den Wert von authmodulelist, sodass er lautet:
vi /etc/courier/authdaemonrc| [...] authmodulelist="authmysql" [...] |
Dann machen Sie eine Sicherung von /etc/courier/authmysqlrc und leeren 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 richtigen 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 restartDurch Ausführen von
telnet localhost pop3können Sie sehen, ob Ihr POP3-Server korrekt funktioniert. Es sollte +OK Hello there. zurückgeben. (Geben Sie quit ein, um zur Linux-Shell zurückzukehren.)
server1:/etc/courier# telnet localhost pop3
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
quit
+OK Better luck next time.
Connection closed by foreign host.
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
newaliasesausführen und Postfix neu starten:
/etc/init.d/postfix restartErhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.