Postfixadmin with postfix, dovecot, and mysql

The original and up-to-date document for this howto can be found in the RimuHosting Bliki

Postfix Admin is a web-based GUI for setting up mail users for a Postfix+MySQL setup.

It will let you create users and aliases per domain.

This HOWTO goes over install Postfix Admin, Postfix with a MySQL backend and SMTP auth enabled, and Dovecot (for POP3/POP3/IMAP/IMAPS) with a MySQL backend.

While this HOWTO is based on Debian Etch, the Postfix/MySQL setup is generic and should work fine on most distributions.

If you're after per-user spam and virus filtering for your virtual users, see the howto here: http://bliki.rimuhosting.com/space/knowledgebase/linux/mail/postfix+with+amavis+and+mysql

Postfixadmin is now in the official repositories for Debian. Simply use apt-get to install it:

apt-get install postfixadmin

Postfixadmin will be installed in /usr/share/postfixadmin/
the configuration file will be in /etc/postfixadmin/config.inc.php
and the following alias is added to the apache configuration in the file
/etc/apache2/conf.d/postfixadmin:

Alias /postfixadmin /usr/share/postfixadmin

All the above can be done manually if you do decide to install using the source tarball.

Configure Postfix Admin to match your setup (e.g. to make the database passwords match, set your default domain, etc)

Edit the file /usr/share/postfixadmin/config.inc.php and set the following:

vi config.inc.php
[...]
$CONF['configured'] = true;
$CONF['postfix_admin_url'] = 'http://yourdomain.tld/postfixadmin';

$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'SecretPassword!';
$CONF['database_name'] = 'postfix';

$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['encrypt'] = 'cleartext';

Take a look at the rest of that file if you need to make more tweaks.

You can quickly change the default domain to your own:

replace "change-this-to-your.domain.tld" "yourdomain.com" -- /usr/share/postfixadmin/config.inc.php

Create the database and user in mysql:

shell> mysql -u root -p
mysql> create database postfix;
mysql> grant all privileges on postfix.* to 'postfixadmin'@'localhost' identified by 'SecretPassword!';
mysql> flush privileges;
mysql> \q

Then browse to http://yourdomain.com/postfixadmin/ or http://yourip/postfixadmin/. It will prompt you to run Setup. Make sure the Setup Checker says 'OK' for everything.

Remove the setup.php as it recommends.

Then browse to http://yourdomain.com/postfixadmin/admin. You should get prompted. Login with the admin email you registered earlier in the setup page.
From here you can add domains, mailboxes, etc. But Postfix won't see these yet. We need to install Postfix, and configure it.

Install Postfix, SASL2 with MySQL support


apt-get install postfix-mysql postfix-tls libsasl2-modules-sql libsasl2-modules

Add the following to /etc/postfix/main.cf


virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:106
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 106
virtual_transport = virtual
virtual_uid_maps = static:106

broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unauth_destination,
reject_unauth_pipelining,
reject_invalid_hostname
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous

Note: UID/GID 106 may be different on your system. Check your postfix (or vmail) user in /etc/passwd and set accordingly. For example on my server:

# grep postfix /etc/passwd
postfix:x:102:105::/var/spool/postfix:/bin/false
--> uid: 102; gid: 105

Create the following files in /etc/postfix/:

mysql_virtual_alias_maps.cf

user = postfix
password = SecretPassword!
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address

mysql_virtual_domains_maps.cf

user = postfix
password = SecretPassword!
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'

mysql_virtual_mailbox_maps.cf
user = postfix
password = SecretPassword!
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username

If you want to be be able to relay mail through your server with SMTP AUTH, setup the following in /etc/postfix/sasl/smtpd.conf:

pwcheck_method: auxprop
mech_list: PLAIN LOGIN
auxprop_plugin: sql
sql_verbose: yes
sql_engine: mysql
sql_hostnames: localhost
sql_user: postfix
sql_passwd: postfix
sql_database: postfix
sql_select: select password from mailbox where username = '%u@%r'

Create the directory structure, including a directory for the first domain. You'll also want to go into PostfixAdmin and create a 'test' account for the yourdomain.com to match this.


mkdir -p /home/vmail/yourdomain.com/test
chmod -R 770 /home/vmail
chown -R postfix:postfix /home/vmail/

Install Dovecot with MySQL support


apt-get install dovecot-common dovecot-imapd dovecot-pop3d

Configure the Dovecot/MySQL setup in /etc/dovecot/dovecot-mysql.conf using these settings:


driver = mysql
connect = dbname=postfix user=postfixadmin host=localhost password=SecretPassword!
default_pass_scheme = PLAIN
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 106 AS uid, 106 AS gid FROM mailbox WHERE username = '%u'

Then configure Dovecot to use MySQL by setting these options in /etc/dovecot/dovecot.conf:


protocols = imap imaps pop3 pop3s
disable_plaintext_auth = no
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n
mail_access_groups = mail
first_valid_uid = 106
first_valid_gid = 106
protocol imap {
}

protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}
auth default {
mechanisms = digest-md5 plain
passdb sql {
args = /etc/dovecot/dovecot-mysql.conf
}
userdb sql {
args = /etc/dovecot/dovecot-mysql.conf
}
user = root
}

Restart Dovecot and Postfix and test it all out.

At the end of it, you should be able to add new domains, mailboxes and aliases using PostfixAdmin and have it all work properly, including SMTP authentication. Note that you don't need saslauthd for SMTP authentication to work.

Similar Posts:

    None Found




No Comments


You can leave the first : )