Configuration using virtual
Packages
Es wird angenommen, dass eine lauffähige Mysql Datenbank mit Datenbank db_postfix und user postuser existiert.
Es werden folgende Pakete benötigt
- postfixpostfix-mysql
- postfix-tls
- libsasl2
- libsasl2-modules
- libsasl2-modules-sql
- libpam-mysql
- libpam-modules
Die Authentifizierung geschieht immer mit Daten aus einer Mysql Datenbank. Postfix kann entweder direkt über sasl ins postfix oder sasl geht an pam und pam dann an die Datenbank. Wird kein pam verwendet werden auch die <tt>libpam-*</tt> Pakete nicht benötigt.
Mysql
Tabellen
Hier werden Benutzernamen, Passwort, Speicherort definiert
CREATE TABLE tbl_postfixmbox ( postmbox_email varchar(255) NOT NULL default '', postmbox_clearpassword varchar(128) NOT NULL default '', postmbox_uid varchar(25) NOT NULL default '1000', postmbox_gid varchar(25) NOT NULL default '1000', postmbox_maildir varchar(255) NOT NULL default '/dev/null', PRIMARY KEY (postmbox_email), )
Hier werden gehostete Domains und der zugehörige Tranport definiert
CREATE TABLE tbl_postfixtrans ( posttrans_domain varchar(255) NOT NULL default '', posttrans_transport varchar(128) NOT NULL default 'virtual:', PRIMARY KEY (posttrans_domain), )
Hier werden die alias maps definiert
CREATE TABLE tbl_postfixvirtual ( postvirt_email varchar(255) NOT NULL default '', postvirt_target text, PRIMARY KEY (postvirt_email), ) TYPE=MyISAM;
Postfix
Relay Config
Sobald einer dieser Punkte zutrifft, werden die weiteren Punkte nicht mehr abgearbeitet.
- Relay für authentifizierte Benutzer erlauben.
- Relay für das eigene Netzwerk (im Normalfall 127.0.0.1) erlauben.
- Relay erlauben wenn Recipient-domain in $relay_domains, $mydestination, $virtual_mailbox_domains gelistet ist.
- Sonst Zugriff/Relay verweigern.
(Der dritte Parameter bedeutet noch ein wenig mehr, interessiert uns aber nicht)
Datei main.cf:
... # restrict relay smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, permit_auth_destination, reject ...
virtual
main.cf
... virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf transport_maps = mysql:/etc/postfix/mysql/transport.cf virtual_mailbox_base = /virtualmail/ virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf virtual_uid_maps = mysql:/etc/postfix/mysql/virtual_uid_maps.cf virtual_gid_maps = mysql:/etc/postfix/mysql/virtual_gid_maps.cf virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf virtual_alias_domains = "" ...
''transport_maps'' ermöglicht es einzelne domains direkt auf andere smtp-Server umzuleiten.
transport.cf
hosts = 127.0.0.1
user = postuser
password = topsecret
dbname = dbpostfix
table = tbl_postfixtrans
select_field = posttrans_transport
where_field = posttrans_domain
''virtual_mailbox_domains'' List der Domains für die Postfix sich zuständig fühlt
/etc/postfix/mysql/virtual_mailbox_domains.cf
hosts = 127.0.0.1 user = postuser password = topsecret dbname = dbpostfix table = tbl_postfix select_field = post where_field = post
''virtual_mailbox_maps'' Zuordnung von email-Adressen auf mailboxen
/etc/postfix/mysql/virtual_mailbox_maps.cf
hosts = 127.0.0.1 user = postuser password = topsecret dbname = dbpostfix table = tbl_postfixmbox select_field = postmbox_maildir where_field = postmbox_email
''virtual_gid_maps'' die GID mit der die mailboxen angelegt werden
/etc/postfix/mysql/virtual_gid_maps.cf
hosts = 127.0.0.1 user = postuser password = topsecret dbname = dbpostfix table = tbl_postfixmbox select_field = postmbox_gid where_field = postmbox_email
''virtual_uid_maps'' die UID mit der die mailboxen angelegt werden
/etc/postfix/mysql/virtual_uid_maps.cf
hosts = 127.0.0.1 user = postuser password = topsecret dbname = dbpostfix table = tbl_postfixmbox select_field = postmbox_uid where_field = postmbox_email
''virtual_alias_maps' die umsetzung von eMail adressen an andere adressen.
/etc/postfix/mysql/virtual_alias_maps.cf
hosts = 127.0.0.1 user = postuser password = topsecret dbname = dbpostfix table = tbl_postfixvirtual select_field = postvirt_target where_field = postvirt_email
SASL
Sasl in Postfix aktivieren
/etc/postfix/main.cf
... # enable smtp_auth smtpd_sasl_auth_enable = yes ...
Authentifizierung mit libsasl2
Postfix nimmt die sasl-Bibliothek. Die Bibliothek muss dann suchen wie sie die Daten verarbeited. Hierzu wird eine Config-Datei gesucht die genauso heisst wie das Mutter-Programm (also smtpd). In der Config wird eingestellt wie SASL seine Daten erhält.
/etc/postfix/sasl/smtpd.conf
pwcheck_method: auxprop auxprop_plugin: sql mech_list: plain login cram-md5 digest-md5 sql_engine: mysql sql_hostnames: 127.0.0.1 sql_user: postuser sql_passwd: topsecret sql_database: dbpostfix sql_select: select postmbox_passwdclear from tbl_postfixmbox where postmbox_email='%u@%r'
Authentifizierung mit pam
SASL beibringen, dass seine Authentifizierung an PAM weitergereicht wird.
/etc/postfix/sasl/smtpd.conf
pwcheck_method: pam
PAM beibringen, dass es die Datenbank befragen soll. Es wird nach einer Config des Programmtyps (smtp) gesucht, nicht nach dem Programmnamen.
/etc/pam.d/smtp
auth required pam_mysql.so user=postuser passwd=topsecret db=dbpostfix table=tbl_postfixmbox usercolumn=postmbox_email passwdcolumn=postmbox_passwdclear crypt=0
