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_mailbox_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 35 min ago
7 hours 28 min ago
7 hours 53 min ago
10 hours 12 min ago
10 hours 31 min ago
11 hours 46 sec ago
11 hours 54 min ago
14 hours 15 min ago
14 hours 32 min ago
15 hours 4 min ago