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

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

3 Kommentar(e)

Zum Posten von Kommentaren bitte

Kommentare

Von: planet_fox

Ich hatte Probleme bei erstellen der Tabelle CREATE TABLE transport und CREATE TABLE user auf einem mysql5 server könnte es so Lösen


CREATE TABLE `users` (
`email` varchar(80) NOT NULL,
`password` varchar(20) NOT NULL,
`quota` int(10) default '10485760',
PRIMARY KEY (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `forwardings` (
`source` varchar(80) NOT NULL,
`destination` text NOT NULL,
PRIMARY KEY (`source`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


Von: Aerox95

Nach der Einrichtung nach diesem Tutorial ging das Empfangen von Mails problemlos, aber nicht das versenden.

Lösung war, unter
/var/run/saslauthd/ den Dateien neue Besitzer und Gruppen zu geben:

drwx--x--- 2 postfix sasl 100 May 11 15:24 .
drwxr-xr-x 13 root root 360 May 11 15:24 ..
srwxrwxrwx 1 postfix postfix 0 May 11 15:24 mux
-rw------- 1 postfix postfix 6 May 11 15:24 saslauthd.pid
-rw------- 1 postfix postfix 0 May 11 15:24 mux.accept

Danach gings.


Von: apoc

Danke für das super Howto. Ich möchte noch ergänzen das man bei forwardings auch einfach den PRIMARY KEY weglassen kann, dann ist es möglich eine eMail an 2 weitere zu verteilen, haben wir so für info@.. gemacht.

Und noch hier mein kleines Manage Script für die Konsole, kann nicht viel, aber vielleicht findet es ja jemand hilfreich:
http://apoc.sixserv.org/scripts/vmail_manage_script.rb