Order a VPS, Semi- dedicated or Dedicated server in Dallas, London or Australia.
Ask our support team about your hosting requirements.
Host where the staff takes pride in making customers happy
Once again you guys amaze me with your knowledge and versatility. This sort of action on your part is one of the main reasons I am still with you guys for my hosting, and you constantly go above and beyond to assist.
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 was tested 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/comment-knowledgebase/linux/mail/postfix+with+amavis+and+mysql-1
Postfixadmin is now in the official repositories for Debian and Ubuntu. Simply use apt-get to install it:
apt-get install postfixadmin
NOTE: The package did not make it to the Ubuntu repositories. Simply download the file from http://sourceforge.net/project/showfiles.php?group_id=191583&ampampampampampampampamppackage_id=225300 and run:
dpkg -i postfixadmin_2.2.0_all.deb
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
Note: the syntax for the following files is based on the postfix mysql_table(5) manual as per http://www.postfix.org/mysql_table.5.html
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
The alternative syntax for that file is:
user = postfix
password = SecretPassword!
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address = '%s'
The same can be applied for the rest of these files.
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: SecretPassword!
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.
More information about the dovecot configuration can be found in http://wiki.dovecot.org/AuthDatabase/SQL and http://wiki.dovecot.org/Variables
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.