Virtuelle Benutzer und Domains Mit Postfix, Courier Und MySQL (Ubuntu 7.10)

5 Konfiguriere Postfix

Jetzt müssen wir Postfix mitteilen, wo es alle Informationen in der Datenbank finden kann. Dafür müssen wir sechs Text-Dateien erstellen. Du wirst feststellen, dass ich Postfix mitteile, sich mit MySQL auf der IP Adresse 127.0.0.1 anstatt sich mit localhost zu verbinden. Postfix läuft in einem Chroot Gefängnis und hat keinen Zugriff auf den MySQL Socket, welchen er versuchen würde zu verbinden, wenn ich Postfix mitgeteilt hätte localhost zu verwenden. Wenn ich 127.0.0.1 verwenden, nutzt Postfix den TCP Netzwerkbetrieb um sich mit MySQL zu verbinden, was auch im Chroot Gefängnis kein Problem darstellt (die Alternative wäre den MySQL Socket in ein Chroot Gefängnis zu verschieben, was wieder andere Probleme verursacht).

Bitte vergewissere Dich, dass die Datei /etc/mysql/my.cnf folgende Zeile beinhaltet:

vi /etc/mysql/my.cnf

[...]
bind-address            = 127.0.0.1
[...]

Wenn Du die Datei /etc/mysql/my.cnf bearbeiten musstest, starte MySQL jetzt neu:

/etc/init.d/mysql restart

Lass Folgendes laufen

netstat -tap | grep mysql

um sicher zu gehen, dass MySQL auf 127.0.0.1 (localhost.localdomain) hört:

root@server1:~# netstat -tap | grep mysql
tcp 0 0 localhost.localdo:mysql *:* LISTEN 5742/mysqld
root@server1:~#

Lass uns nun unsere sechs Text-Dateien erstellen.

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

Ändere dann die Berechtigung und die Gruppe dieser Dateien:

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

Nun erstellen wir einen Benutzer und eine Gruppe namens vmail mit dem Home Verzeichnis /home/vmail. Dort werden alle Mail Boxes gespeichert werden.

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

Als Nächstes nehmen wir eine Postfix Konfiguration vor. Stelle sicher, dass Du server1.example.com mit einem gültigen FQDN ersetzt, sonst kann es sein, dass Dein Postfix nicht richtig funktioniert!

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_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_mailbox_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 = „The user you are trying to reach is over quota.“‚
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 gebraucht wird:

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

Country Name (2 letter code) [AU]: <– Gib Dein Land ein (z.B. „DE“).
State or Province Name (full name) [Some-State]: <– Gib Deine Bundesland oder die Region ein.
Locality Name (eg, city) []: <– Gib Deine Stadt ein.
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <– Gib den Namen Deiner Organisation ein (z.B. den Namen Deiner Firma).
Organizational Unit Name (eg, section) []: <– Gib den Namen Deiner Abteilung ein (z.B. „IT Department“).
Common Name (eg, YOUR name) []: <– Gib den Fully Qualified Domain Name des Systems ein (e.g. „server1.example.com“).
Email Address []: <– Gib Deine E-Mail Adresse ein.

Ändere dann die Berechtigung von smtpd.key:

chmod o= /etc/postfix/smtpd.key

6 Konfiguriere Saslauthd

Führe folgendes aus

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

Bearbeite dann /etc/default/saslauthd. Stelle START to yes ein und ändere die Zeile OPTIONS=“-c“ zu OPTIONS=“-c -m /var/spool/postfix/var/run/saslauthd -r“:

vi /etc/default/saslauthd

#
# Settings for saslauthd daemon
#

# Should saslauthd run automatically on startup? (default: no)
START=yes

# Which authentication mechanisms should saslauthd use? (default: pam)
#
# Available options in this Debian package:
# getpwent  -- use the getpwent() library function
# kerberos5 -- use Kerberos 5
# pam       -- use PAM
# rimap     -- use a remote IMAP server
# shadow    -- use the local shadow password file
# sasldb    -- use the local sasldb database file
# ldap      -- use LDAP (configuration is in /etc/saslauthd.conf)
#
# Only one option may be used at a time. See the saslauthd man page
# for more information.
#
# Example: MECHANISMS="pam"
MECHANISMS="pam"

# Additional options for this mechanism. (default: none)
# See the saslauthd man page for information about mech-specific options.
MECH_OPTIONS=""

# How many saslauthd processes should we run? (default: 5)
# A value of 0 will fork a new process for each connection.
THREADS=5

# Other options (default: -c)
# See the saslauthd man page for information about these options.
#
# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
# Note: See /usr/share/doc/sasl2-bin/README.Debian
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

Bearbeite dann die Datei /etc/pam.d/smtp. Sie sollte nur folgende zwei Zeilen beinhalten (vergewissere Dich, dass Du Deine korrekten Datenbankdetails eingibst):

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

Als Nächstes erstellen wir die Datei /etc/postfix/sasl/smtpd.conf. So solle sie 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'

Dann starten wir Postfix und Saslauthd neu:

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

Das könnte dich auch interessieren …