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