Skip to content. | Skip to navigation

Personal tools
Log in
Sections
You are here: Home Software Postfix Configuration using virtual

Configuration using virtual

Konfiguration von Postfix (Version 2.X) mit virtuellen Mailboxen, gespeichert in einer Mysql Datenbank. Authentifizierung mit SMTP-AUTH unter Debian Sarge (testing).

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