postfixadmin mit mysql virtual host, postfix mit smtp-auth, dovecot
Die folgende Beschreibung nimmt Debian sarge als Grundlage.
postfixadmin
Im Verlauf der Installation wird ein Systembenutzer benötigt, der bereits an dieser Stelle angelegt werden soll.
$ adduser --system --home /var/mail/vmail --uid 109 --gid 109 --disabled-password vmail
Lade
postfixadmin herunter und entpacke es mit:
$ tar -xzf postfixadmin-2.1.0.tgz
Andere den Datenbanknamen von postfix auf vmail und ersetze den user postfix durch den user vmail.
Wähle starke Passwörter für die Mysql-user vmail und postfixadmin.
(Bei einem Eintrag von "127.0.0.1 localhost.localdomain localhost" in der /etc/hosts
muss ausserdem bei dem vmail user localhost durch localhost.localdomain geändert werden.)
$ cd postfixadmin-2.1.0
$ cp DATABASE_MYSQL.TXT DATABASE.TXT
$ vi DATABASE.TXT
User, Datenbank und Tabellen in Mysql erstellen:
$ mysql -u root -p < DATABASE.TXT
Ändere die Datenbankkonfiguration entsprechend und passe change-this-to-your.domain.tld an.
sasl kann ohne patch leider keine gecrypteten Passwörter.
$ cp config.inc.php.sample config.inc.php
$ vi config.inc.php
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['encrypt'] = 'cleartext';
Zur Sicherheit der Konfiguration/Passwörter die Rechte folgendermassen anpassen
und anschliessend über den Webserver verfügbar machen.
$ chmod 0640 config.inc.php
$ chmod 0600 DATABASE.TXT
$ cd ..
$ chmod 0750 postfixadmin-2.1.0
$ chown -R root:www-data postfixadmin-2.1.0
$ mv postfixadmin-2.1.0 /var/www/postfixadmin
Passe die Datei /var/www/postfixadmin/admin/.htaccess an.
Die zugehörige .htpasswd oder .htusers liegt im Optimalfall ausserhalb des DocumentRoot des Webservers.
postfix
$ apt-get install postfix-tls postfix-mysql libsasl2-modules libsasl2-modules-sql
/etc/postfix/main.cf
# virtual hosting - sql
virtual_mailbox_base = /var/mail/vmail
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
virtual_transport = virtual
virtual_minimum_uid = 109
virtual_uid_maps = static:109
virtual_gid_maps = static:109
# SASL support for CLIENTS
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
#broken_sasl_auth_clients = yes
# TLS support for SERVER
smtp_use_tls = yes
# TLS support for CLIENTS
smtpd_use_tls = yes
#smtpd_enforce_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/ssl/CAcert/mail-server.key
smtpd_tls_cert_file = /etc/ssl/CAcert/mail-server.crt
smtpd_tls_CAfile = /etc/ssl/CAcert/CAcert.crt
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
# SMTPD restrictions
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_unauth_pipelining,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient
/etc/postfix/mysql/
virtual_alias_maps.cf:
user = vmail
password = vmailpw
hosts = 127.0.0.1
dbname = vmail
table = alias
select_field = goto
where_field = address
virtual_domains_maps.cf:
user = vmail
password = vmailpw
hosts = 127.0.0.1
dbname = vmail
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
virtual_mailbox_maps.cf:
user = vmail
password = vmailpw
hosts = 127.0.0.1
dbname = vmail
table = mailbox
select_field = maildir
where_field = username
/etc/postfix/sasl/smtpd.conf:
pwcheck_method: auxprop
mech_list: PLAIN LOGIN
auxprop_plugin: sql
sql_verbose: yes
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: vmail
sql_passwd: vmailpw
sql_database: vmail
sql_select: select password from mailbox where username = '%u@%r'
Durch 127.0.0.1 als host läuft die Kommunikation über einen tcp-socket nicht über unix-domain.
Damit umgeht man Probleme mit postfix im chroot.
Zur Sicherheit der Konfiguration/Passwörter die Rechte folgendermassen anpassen:
$ chmod 0640 /etc/postfix/mysql/virtual_*
$ chown root:postfix /etc/postfix/mysql/virtual_*
$ chmod 0640 /etc/postfix/sasl/smtpd.conf
$ chown root:postfix /etc/postfix/sasl/smtpd.conf
dovecot
$ apt-get install dovecot-pop3d dovecot-common # bei Bedarf auch dovecot-imapd
/etc/dovecot/dovecot-mysql.conf:
db_host = 127.0.0.1
db_port = 3306
db = vmail
db_user = vmail
db_passwd = vmailpw
db_client_flags = 0
default_pass_scheme = PLAIN
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 109 AS uid, 109 AS gid FROM mailbox WHERE username = '%u'
/etc/dovecot/dovecot.conf:
protocols = pop3s
ssl_cert_file = /etc/ssl/CAcert/mail-server.crt
ssl_key_file = /etc/ssl/CAcert/mail-server.key
mail_extra_groups = vmail
auth_userdb = mysql /etc/dovecot/dovecot-mysql.conf
auth_passdb = mysql /etc/dovecot/dovecot-mysql.conf
first_valid_uid = 109
default_mail_env = maildir:/home/vmail/%d/%n
saslauthd und damit das Paket sasl2-bin wird nicht benötigt.