4 Configure
Postfix
Now we have to
tell Postfix where it can find all the information in the database. Therefore
we have to create six text files. You will notice that I tell Postfix to connect
to MySQL on the IP address 127.0.0.1
instead of localhost.
This is because Postfix is running in a chroot jail and does not have access
to the MySQL socket which it would try to connect if I told Postfix to use localhost.
If I use 127.0.0.1 Postfix
uses TCP networking to connect to MySQL which is no problem even in a chroot
jail (the alternative would be to move the MySQL socket into the chroot jail
which causes some other problems).
Please make sure
that /etc/mysql/my.cnf
contains the following line:
so that MySQL allows
connections on 127.0.0.1 (restart
MySQL if you have to make changes to /etc/mysql/my.cnf).
Now let's create
our six text files.
/etc/postfix/mysql-virtual_domains.cf:
user = mail_admin password = mail_admin_password dbname = mail table = domains select_field = 'virtual' where_field = domain hosts = 127.0.0.1
|
/etc/postfix/mysql-virtual_forwardings.cf:
user = mail_admin password = mail_admin_password dbname = mail table = forwardings select_field = destination where_field = source hosts = 127.0.0.1
|
/etc/postfix/mysql-virtual_mailboxes.cf:
user = mail_admin password = mail_admin_password dbname = mail table = users select_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') where_field = email hosts = 127.0.0.1
|
/etc/postfix/mysql-virtual_email2email.cf:
user = mail_admin password = mail_admin_password dbname = mail table = users select_field = email where_field = email hosts = 127.0.0.1
|
/etc/postfix/mysql-virtual_transports.cf:
user = mail_admin password = mail_admin_password dbname = mail table = transport select_field = transport where_field = domain hosts = 127.0.0.1
|
/etc/postfix/mysql-virtual_mailbox_limit_maps.cf:
user = mail_admin password = mail_admin_password dbname = mail table = users select_field = quota where_field = email hosts = 127.0.0.1
|
chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf
Now we create a
user and group called vmail
with the home directory /home/vmail.
This is where all mail boxes will be stored.
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
Next we do some
Postfix configuration. Go sure that you replace server1.example.com
with a valid FQDN, otherwise your Postfix might not work properly!
postconf -e 'myhostname
= server1.example.com'
postconf -e 'mydestination = server1.example.com, localhost, localhost.localdomain'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'virtual_alias_domains ='
postconf -e ' virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf,
mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base = /home/vmail'
postconf -e 'virtual_uid_maps = static:5000'
postconf -e 'virtual_gid_maps = static:5000'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,
reject_unauth_destination'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'
postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'
postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf'
postconf -e 'virtual_create_maildirsize = yes'
postconf -e 'virtual_maildir_extended = yes'
postconf -e 'virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf'
postconf -e 'virtual_mailbox_limit_override = yes'
postconf -e 'virtual_maildir_limit_message = "The user you are trying to
reach is over quota."'
postconf -e 'virtual_overquota_bounce = yes'
postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps
$virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps
$relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps
$relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'
Afterwards we create
the SSL certificate that is needed for TLS:
cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout
smtpd.key -keyform PEM -days 365 -x509
<-- Enter your Country
Name (e.g., "DE").
<-- Enter your State or Province Name.
<-- Enter your City.
<-- Enter your Organization Name (e.g., the name of your company).
<-- Enter your Organizational Unit Name (e.g. "IT Department").
<-- Enter the Fully Qualified Domain Name of the system (e.g. "server1.example.com").
<-- Enter your Email Address.
chmod o= /etc/postfix/smtpd.key
5 Configure
Saslauthd
mkdir -p /var/spool/postfix/var/run/saslauthd
Edit /etc/default/saslauthd.
Remove the # in front of START=yes
and add the line PARAMS="-m
/var/spool/postfix/var/run/saslauthd -r". The file should then
look like this:
# This needs to be uncommented before saslauthd will be run automatically START=yes
# You must specify the authentication mechanisms you wish to use. # This defaults to "pam" for PAM support, but may also include # "shadow" or "sasldb", like this: # MECHANISMS="pam shadow"
MECHANISMS="pam" PARAMS="-m /var/spool/postfix/var/run/saslauthd -r"
|
We must also edit /etc/init.d/saslauthd and change the location of saslauthd's PID file. Change the value of PIDFILE to /var/spool/postfix/var/run/${NAME}/saslauthd.pid:
PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"
|
Then create the
file /etc/pam.d/smtp.
It should contain only the following two lines (go sure to fill in your correct
database details):
auth required pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
|
Next create the
file /etc/postfix/sasl/smtpd.conf.
It should look like this:
pwcheck_method: saslauthd
mech_list: plain login
allow_plaintext: true
auxprop_plugin: mysql
sql_hostnames: 127.0.0.1
sql_user: mail_admin
sql_passwd: mail_admin_password
sql_database: mail
sql_select: select password from users where email = '%u'
|
Then restart Postfix
and Saslauthd:
/etc/init.d/postfix restart
postfix check
/etc/init.d/saslauthd restart
6 Configure
Courier
Now we have to
tell Courier that it should authenticate against our MySQL database. First,
edit /etc/courier/authdaemonrc
and change the value of authmodulelist
so that it reads
authmodulelist="authmysql"
|
Then edit /etc/courier/authmysqlrc.
It should look like this (again, make sure to fill in the correct database details):
MYSQL_SERVER localhost MYSQL_USERNAME mail_admin MYSQL_PASSWORD mail_admin_password MYSQL_PORT 0 MYSQL_DATABASE mail MYSQL_USER_TABLE users MYSQL_CRYPT_PWFIELD password #MYSQL_CLEAR_PWFIELD password MYSQL_UID_FIELD 5000 MYSQL_GID_FIELD 5000 MYSQL_LOGIN_FIELD email MYSQL_HOME_FIELD "/home/vmail" MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') #MYSQL_NAME_FIELD MYSQL_QUOTA_FIELD quota
|
Then restart Courier:
/etc/init.d/courier-authdaemon
restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restart
By running
telnet
localhost pop3
you can see if
your POP3 server is working correctly. It should give back +OK
Hello there. (Type quit
to get back to the Linux shell.)
Virtual Users And Domains With Postfix, Courier And MySQL (+ SMTP-AUTH, Quota, SpamAssassin, ClamAV)
Virtual Users And Domains With Postfix, Courier And MySQL (+ SMTP-AUTH, Quota, SpamAssassin, ClamAV) - Page 3
Recent comments
6 hours 6 min ago
10 hours 55 min ago
15 hours 44 min ago
18 hours 4 min ago
18 hours 21 min ago
18 hours 33 min ago
22 hours 34 min ago
23 hours 19 min ago
1 day 1 hour ago
1 day 8 hours ago