Postfix邮件服务器搭建之虚拟用户配置
2017-03-18 16:06
513 查看
本文由ilanniweb提供友情赞助,首发于烂泥行天下
想要获得更多的文章,可以关注我的微信ilanniweb
在前一篇文章《烂泥:Postfix邮件服务器搭建之软件安装与配置》中,我们介绍了psotfix邮件服务器搭建所需要的软件,以及各个软件的基本配置。
目前已经达到了通过系统用户可以登录到postfix邮件服务器,但是为了管理的方便和系统安全,我们一般是通过postfix的虚拟用户来管理邮件用户的。
Postfix虚拟用户的原理是,先在系统中创建一个用户,该用户不能登录到系统,然后把邮件用户全部映射到该系统用户的家目录下。
对于OS来说所有的操作都是通过该用户进行的,但是对于postfix的邮件用户来说又是各自独立的。这个和vsftpd虚拟用户的原理相似,然后所有邮件用户的管理都是通过postfixadmin来进行。
有关postfix的虚拟用户,我们需要根据不同的软件进行不同的配置,只有各个软件的协同配合才能达到自由收发邮件的目的,下面分别介绍下。
postfix要支持虚拟用户,需要修改的配置文件比较多。
首先要修改postfix的主配置文件main.cf,如下:
vim /etc/postfix/main.cf
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
myhostname = mail.ilanni.com
mydomain = ilanni.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost
local_recipient_maps =
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.6.6/samples
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
#启用SMTP认证
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/spool/postfix/private/auth
smtpd_sasl_application_name = smtpd
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination,reject_unknown_sender_domain
smtpd_sasl_security_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_sasl_security_options = noanonymous
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
#启用虚拟用户
virtual_mailbox_base = /home/vmail/
virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_alias_maps =
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
virtual_mailbox_maps =
proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
注意:postfix主配置文件中,需要注意的地方我已经标注出来了,其中还需要说明的是我们在此启用的虚拟用户是《烂泥:Postfix邮件服务器搭建之准备工作》中创建的vmail用户,该用户的id是5000,所以在postfix主配置文件会看到vmail的家目录/home/vmail/,以及vmail的id信息5000。
在以下所有的操作中,如果有vmail相关的信息,这个都是和该用户进行关联的。
在master.cf文件添加如下代码:
vim /etc/postfix/master.cf
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/dovecot-lda -f ${sender} -d ${recipient}
连接数据库相关文件有7个,在创建配置文件之前,我们要在/etc/postfix/目录下建立sql目录用来存放这些配置如下:
mkdir /etc/postfix/sql/
现在我们来创建这些配置文件,注意这些配置文件中,有关数据库的部分都是《烂泥:Postfix邮件服务器搭建之准备工作》中的用户名、密码和数据库。如下:
vim /etc/postfix/sql/mysql_virtual_alias_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105157303-559834342.png)
vim /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105157818-800378015.png)
vim /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105158318-1399751597.png)
vim /etc/postfix/sql/mysql_virtual_domains_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105158896-577595389.png)
vim /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105159474-1767185735.png)
vim /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u','@',alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105200053-1333717908.png)
vim /etc/postfix/sql/mysql_virtual_mailbox_limit_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105200553-1618586299.png)
以上配置完毕后,现在我们来测试postfix是否已经正确与cyrus-sasl进行集成,使用如下命令:
telnet mail.ilanni.com 25
ehlo ilanni.com
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105201240-1196152763.png)
注意:图中的ehlo ilanni.com命令,该命令需要手工输入,而如果出现250-AUTH PLAIN LOGIN和250-AUTH=PLAIN LOGIN两行,则说明postfix已经正确启用smtp认证。
dovecot配置文件比较多,下面我们一一介绍。
vim /etc/dovecot/dovecot.conf
protocols = imap pop3
listen = *
!include conf.d/*.conf
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=5000 gid=5000 home=/home/vmail/%d/%n
}
#调试日志
auth_debug_passwords=yes
mail_debug=yes
auth_verbose=yes
auth_verbose_passwords=plain
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105201678-485141769.png)
vim /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login cram-md5
!include auth-system.conf.ext
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105202084-2092093063.png)
10-ssl.conf文件主要是关于postfix的ssl认证相关的配置,在此我们先禁用ssl。如下:
vim /etc/dovecot/conf.d/10-ssl.conf
ssl = no
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105202599-1619683247.png)
10-mail.conf文件主要定义邮件用户存储相关信息的位置。如下:
vim /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/vmail/%d/%n/Maildir
mbox_write_locks = fcntl
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105203115-1572422668.png)
10-logging.conf文件是定义dovecot日志的配置文件,我们也可以不启用此配置文件。但是为了调试我们在此还是启用了该配置文件选项。
注意:如果后续日志中提示没有写入权限的话,修改其权限即可。
vim /etc/dovecot/conf.d/10-logging.conf
info_log_path = /var/log/dovecot_info.log
debug_log_path = /var/log/dovecot_debug.log
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105203599-699788032.png)
10-master.conf文件定义了dovecot的pop3和imap端口,以及其他的一些信息。
vim /etc/dovecot/conf.d/10-master.conf
service imap-login {
inet_listener imap {
port = 143
}
}
service pop3-login {
inet_listener pop3 {
port = 110
}
}
service auth {
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
}
}
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105204209-1743381931.png)
修改15-lda.conf文件,是为了防止dovecot报错,错误如下:
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105204787-702367880.png)
我们只需在15-lda.conf文件中添加postmaster_address = postmaster@example.com即可,如下:
vim /etc/dovecot/conf.d/15-lda.conf
postmaster_address = postmaster@example.com
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105205412-1124145215.png)
vim /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfix
default_pass_scheme = MD5-CRYPT
password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'
user_query = SELECT maildir, 5000 AS uid, 5000 AS gid, CONCAT('dict:storage=',floor(quota/1000),'
proxy::quota') as quota FROM mailbox WHERE username = '%u' AND active='1'
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105205912-299096794.png)
dovecot配置完毕后,我们现在来配置postfixadmin,postfixadmin需要lamp的支持。有关lamp的安装,可以查看《烂泥:Postfix邮件服务器搭建之准备工作》。
postfixadmin不能通过yum方式进行安装,我们需要去下载postfixadmin软件包,如下:
wget http://nchc.dl.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.93/postfixadmin-2.93.tar.gz
tar -xf postfixadmin-2.93.tar.gz
mv postfixadmin-2.93 /var/www/html/postfixadmin
chown -R apache:apache /var/www/html/postfixadmin
chmod -R 755 /var/www/html/postfixadmin
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105206506-1666206005.png)
postfixadmin安装完毕后,我们现在来配置postfixadmin。postfixadmin的配置文件是config.inc.php,我们只需修改这个文件即可。如下:
vim /var/www/html/postfixadmin/config.inc.php
$CONF['configured'] = true;
$CONF['default_language'] = 'cn';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfix';
$CONF['database_name'] = 'postfix';
$CONF['encrypt'] = 'dovecot:CRAM-MD5';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['aliases'] = '1000';
$CONF['mailboxes'] = '1000';
$CONF['maxquota'] = '1000';
$CONF['fetchmail'] = 'NO';
$CONF['quota'] = 'YES';
$CONF['used_quotas'] = 'YES';
$CONF['new_quota_table'] = 'YES';
3.3 启动postfixadmin
postfixadmin配置完毕后,我们现在来启动postfixadmin。
Postfixadmin不是一个单独的程序,它是依赖于apache的,所以我们只需要启动apache即可。如下:
/etc/init.d/httpd start
chkconfig httpd on
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105207271-624559939.png)
现在我们在浏览器中打开如下连接:
http://mail.ilanni.com/postfixadmin/setup.php
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105207912-1697659013.png)
通过上图,我们可以很明显的看出postfixadmin已经正常启动,而且其所依赖的各个组件也已经正常安装和配置。
在postfixadmin的配置文件中有一个选项是填写管理员后台管理密码的,默认是changeme。如下:
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105208428-151787671.png)
现在我们来修改默认密码,如下:
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105208990-1894837470.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105209506-906122487.png)
通过上图,我们可以很明显的看出默认已经密码已经被我们成功的修改了。
修改完毕后,我们复制该密码到postfixadmin的配置文件,将原来的changeme替换成功现在的加密后的密码即可。如下:
vim /var/www/html/postfixadmin/config.inc.php
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105210115-445797425.png)
后台管理密码修改完毕后,我们现在来添加一个管理员账号admin@ilanni.com。如下:
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105210678-923364919.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105211271-1297719573.png)
通过上图,我们可以很明显的看出管理员admin@ilanni.com已经添加成功。
现在我们来使用这个管理员登录看看后台,后台登录地址为http://mail.ilanni.com/postfixadmin/login.php
如下:
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105211865-1891617191.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105212459-261648061.png)
通过上图,我们可以很明显的看出新添加的管理员已经可以登录postfixadmin管理后台了。
postfixadmin管理员登录地址是:
http://mail.haiyn.com/postfixadmin/login.php
postfixadmin 普通用户登录地址是:
http://mail.ilanni.com/postfixadmin/users/login.php
postfixadmin是支持多域名管理的,在此我们先添加一个域名ilanni.com。如下:
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105212943-272928859.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105213584-250834804.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105214099-1815626549.png)
通过上图,我们可以很明显的看出ilanni.com这个域名已经添加成功。
ilanni.com这个域名添加完毕后,我们现在来给这个域名添加新的邮件用户。如下:
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105214787-1799143018.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105216506-1590645289.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105217131-1412382528.png)
通过上图,我们可以很明显的看出ilannimail@ilanni.com,这个邮件用户已经被成功创建。
ilannimail@ilanni.com邮件用户被添加后,我们现在来使用邮件客户端测试是否可以正常发送和收取邮件。
首先我们先来测试该用户是否可以正常连接邮件服务器,如下:
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105217584-724875782.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105218099-745435762.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105218771-1020812180.png)
通过上图,我们可以很明显的看出邮件用户ilannimail已经正常连接postfix邮件服务器。
现在我们来测试发送邮件功能,如下:
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105219459-1137180821.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105220084-514302390.png)
通过上图,我们可以很明显的看出ilaninmail用户已经成功的向外域邮箱发送邮件。
现在我们来测试收取邮件功能,如下:
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105220928-710474343.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105221615-1999493542.png)
通过上图,我们可以很明显的看出ilaninmail用户已经成功的向收取外域邮箱发送过来的邮件。
现在我们来查看下postfixadmin数据库postfix中的数据,如下:
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105222224-1248120814.png)
这个是postfix数据库postfixadmin所生成的表。
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105222834-1758337791.png)
admin表中存储的是管理员用户。
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105223506-931183346.png)
alias表中存储的是所有的邮件用户。
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105224459-575532592.png)
domain表中存储的是虚拟域名。
本篇文章我们主要是针对postfix虚拟用户,进行操作的。现在我们虚拟域名已经添加,邮件用户也已经创建。
那么我们现在来查看下,我们的这些操作在系统上产生了哪些影响。
切换到vmail用户的家目录,如下:
ll /home/vmail/
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105225084-1302257707.png)
通过上图,我们可以很明显的看出ilanni.com这个虚拟域名在vmail用户的家目录下产生了ilanni.com这个目录。
现在我们再来看看ilanni.com这个目录下都有哪些文件,如下:
ll /home/vmail/ilanni.com/
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105225787-521055421.png)
通过上图,我们可以很明显的看出在ilanni.com这个虚目录下产生了ilannimail和wxy这两个目录,而这两个目录名称刚好对应我们前面创建的邮件用户ilannimail和wxy。
这样看起来就刚刚好和我们前面解释的postfix虚拟用户原理相照应了。
我们现在查看ilannimail目录下文件,如下:
ll /home/vmail/ilanni.com/ilannimail/Maildir/
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105226334-1037730492.png)
通过上图,我们可以很明显的看出该目录下面文件不多,现在我们主要关注cur目录。因为通过该目录下的文件个数,可以知道ilannimail用户有多少封邮件。以下两张截图,就可以证明这个说法。如下:
cd /home/vmail/ilanni.com/ilannimail/Maildir/cur
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105227037-1575105436.png)
可以看到cur目录下有三个文件。
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105227990-1960743180.png)
通过foxmail客户端也可以看到ilanimail用户确实只有三封邮件,这就证明了,我们前面的猜测是正确的。知道cur目录下的文件个数,可以知道ilannimail用户有多少封邮件。
由cur目录下的文件个数可知目前ilannimail有三封邮件,那么这三个文件分别对应哪三封邮件呢?
其实我们可以根据文件的名称中的unix时间戳来定位,现在我们以1457768362.M305033P28093.iZ23r061d7kZ,S=4526,W=4615:2,RS文件为例。
通过文件名,我们可以知道该文件的unix时间戳是1457768362,那么可以查找这个unix时间戳对应的实际时间,如下:
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105228865-1636691004.png)
通过上图,可以知晓是15:39:22这封邮件。
当然我们也可以查看这个文件的内容,如下:
cat 1457768362.M305033P28093.iZ23r061d7kZ,S=4526,W=4615:2,RS
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105229865-1922992296.png)
想要获得更多的文章,可以关注我的微信ilanniweb
在前一篇文章《烂泥:Postfix邮件服务器搭建之软件安装与配置》中,我们介绍了psotfix邮件服务器搭建所需要的软件,以及各个软件的基本配置。
目前已经达到了通过系统用户可以登录到postfix邮件服务器,但是为了管理的方便和系统安全,我们一般是通过postfix的虚拟用户来管理邮件用户的。
Postfix虚拟用户的原理是,先在系统中创建一个用户,该用户不能登录到系统,然后把邮件用户全部映射到该系统用户的家目录下。
对于OS来说所有的操作都是通过该用户进行的,但是对于postfix的邮件用户来说又是各自独立的。这个和vsftpd虚拟用户的原理相似,然后所有邮件用户的管理都是通过postfixadmin来进行。
有关postfix的虚拟用户,我们需要根据不同的软件进行不同的配置,只有各个软件的协同配合才能达到自由收发邮件的目的,下面分别介绍下。
一、postfix配置虚拟用户
postfix要支持虚拟用户,需要修改的配置文件比较多。
1.1 修改main.cf文件
首先要修改postfix的主配置文件main.cf,如下:vim /etc/postfix/main.cf
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
myhostname = mail.ilanni.com
mydomain = ilanni.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost
local_recipient_maps =
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.6.6/samples
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
#启用SMTP认证
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/spool/postfix/private/auth
smtpd_sasl_application_name = smtpd
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination,reject_unknown_sender_domain
smtpd_sasl_security_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_sasl_security_options = noanonymous
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
#启用虚拟用户
virtual_mailbox_base = /home/vmail/
virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_alias_maps =
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
virtual_mailbox_maps =
proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
注意:postfix主配置文件中,需要注意的地方我已经标注出来了,其中还需要说明的是我们在此启用的虚拟用户是《烂泥:Postfix邮件服务器搭建之准备工作》中创建的vmail用户,该用户的id是5000,所以在postfix主配置文件会看到vmail的家目录/home/vmail/,以及vmail的id信息5000。
在以下所有的操作中,如果有vmail相关的信息,这个都是和该用户进行关联的。
1.2 修改master.cf文件
在master.cf文件添加如下代码:vim /etc/postfix/master.cf
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/dovecot-lda -f ${sender} -d ${recipient}
1.3 数据库连接相关文件
连接数据库相关文件有7个,在创建配置文件之前,我们要在/etc/postfix/目录下建立sql目录用来存放这些配置如下:mkdir /etc/postfix/sql/
现在我们来创建这些配置文件,注意这些配置文件中,有关数据库的部分都是《烂泥:Postfix邮件服务器搭建之准备工作》中的用户名、密码和数据库。如下:
vim /etc/postfix/sql/mysql_virtual_alias_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105157303-559834342.png)
vim /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105157818-800378015.png)
vim /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105158318-1399751597.png)
vim /etc/postfix/sql/mysql_virtual_domains_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105158896-577595389.png)
vim /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105159474-1767185735.png)
vim /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u','@',alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105200053-1333717908.png)
vim /etc/postfix/sql/mysql_virtual_mailbox_limit_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105200553-1618586299.png)
1.4 测试sasl与postfix集成
以上配置完毕后,现在我们来测试postfix是否已经正确与cyrus-sasl进行集成,使用如下命令:telnet mail.ilanni.com 25
ehlo ilanni.com
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105201240-1196152763.png)
注意:图中的ehlo ilanni.com命令,该命令需要手工输入,而如果出现250-AUTH PLAIN LOGIN和250-AUTH=PLAIN LOGIN两行,则说明postfix已经正确启用smtp认证。
二、dovecot虚拟用户配置
dovecot配置文件比较多,下面我们一一介绍。
2.1 修改dovecot.conf文件
vim /etc/dovecot/dovecot.confprotocols = imap pop3
listen = *
!include conf.d/*.conf
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=5000 gid=5000 home=/home/vmail/%d/%n
}
#调试日志
auth_debug_passwords=yes
mail_debug=yes
auth_verbose=yes
auth_verbose_passwords=plain
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105201678-485141769.png)
2.2 修改10-auth.conf文件
vim /etc/dovecot/conf.d/10-auth.confdisable_plaintext_auth = no
auth_mechanisms = plain login cram-md5
!include auth-system.conf.ext
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105202084-2092093063.png)
2.3 修改10-ssl.conf文件
10-ssl.conf文件主要是关于postfix的ssl认证相关的配置,在此我们先禁用ssl。如下:vim /etc/dovecot/conf.d/10-ssl.conf
ssl = no
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105202599-1619683247.png)
2.4 修改10-mail.conf文件
10-mail.conf文件主要定义邮件用户存储相关信息的位置。如下:vim /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/vmail/%d/%n/Maildir
mbox_write_locks = fcntl
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105203115-1572422668.png)
2.5 修改10-logging.conf文件
10-logging.conf文件是定义dovecot日志的配置文件,我们也可以不启用此配置文件。但是为了调试我们在此还是启用了该配置文件选项。注意:如果后续日志中提示没有写入权限的话,修改其权限即可。
vim /etc/dovecot/conf.d/10-logging.conf
info_log_path = /var/log/dovecot_info.log
debug_log_path = /var/log/dovecot_debug.log
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105203599-699788032.png)
2.6 修改10-master.conf文件
10-master.conf文件定义了dovecot的pop3和imap端口,以及其他的一些信息。vim /etc/dovecot/conf.d/10-master.conf
service imap-login {
inet_listener imap {
port = 143
}
}
service pop3-login {
inet_listener pop3 {
port = 110
}
}
service auth {
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
}
}
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105204209-1743381931.png)
2.7 修改15-lda.conf文件
修改15-lda.conf文件,是为了防止dovecot报错,错误如下:![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105204787-702367880.png)
我们只需在15-lda.conf文件中添加postmaster_address = postmaster@example.com即可,如下:
vim /etc/dovecot/conf.d/15-lda.conf
postmaster_address = postmaster@example.com
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105205412-1124145215.png)
2.8 添加dovecot-sql.conf.ext文件
vim /etc/dovecot/dovecot-sql.conf.extdriver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfix
default_pass_scheme = MD5-CRYPT
password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'
user_query = SELECT maildir, 5000 AS uid, 5000 AS gid, CONCAT('dict:storage=',floor(quota/1000),'
proxy::quota') as quota FROM mailbox WHERE username = '%u' AND active='1'
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105205912-299096794.png)
三、postfixadmin配置
dovecot配置完毕后,我们现在来配置postfixadmin,postfixadmin需要lamp的支持。有关lamp的安装,可以查看《烂泥:Postfix邮件服务器搭建之准备工作》。
3.1 安装postfixadmin
postfixadmin不能通过yum方式进行安装,我们需要去下载postfixadmin软件包,如下:wget http://nchc.dl.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.93/postfixadmin-2.93.tar.gz
tar -xf postfixadmin-2.93.tar.gz
mv postfixadmin-2.93 /var/www/html/postfixadmin
chown -R apache:apache /var/www/html/postfixadmin
chmod -R 755 /var/www/html/postfixadmin
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105206506-1666206005.png)
3.2 配置postfixadmin
postfixadmin安装完毕后,我们现在来配置postfixadmin。postfixadmin的配置文件是config.inc.php,我们只需修改这个文件即可。如下:vim /var/www/html/postfixadmin/config.inc.php
$CONF['configured'] = true;
$CONF['default_language'] = 'cn';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfix';
$CONF['database_name'] = 'postfix';
$CONF['encrypt'] = 'dovecot:CRAM-MD5';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['aliases'] = '1000';
$CONF['mailboxes'] = '1000';
$CONF['maxquota'] = '1000';
$CONF['fetchmail'] = 'NO';
$CONF['quota'] = 'YES';
$CONF['used_quotas'] = 'YES';
$CONF['new_quota_table'] = 'YES';
3.3 启动postfixadmin
postfixadmin配置完毕后,我们现在来启动postfixadmin。
Postfixadmin不是一个单独的程序,它是依赖于apache的,所以我们只需要启动apache即可。如下:
/etc/init.d/httpd start
chkconfig httpd on
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105207271-624559939.png)
现在我们在浏览器中打开如下连接:
http://mail.ilanni.com/postfixadmin/setup.php
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105207912-1697659013.png)
通过上图,我们可以很明显的看出postfixadmin已经正常启动,而且其所依赖的各个组件也已经正常安装和配置。
3.4 修改默认后台管理密码
在postfixadmin的配置文件中有一个选项是填写管理员后台管理密码的,默认是changeme。如下:![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105208428-151787671.png)
现在我们来修改默认密码,如下:
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105208990-1894837470.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105209506-906122487.png)
通过上图,我们可以很明显的看出默认已经密码已经被我们成功的修改了。
修改完毕后,我们复制该密码到postfixadmin的配置文件,将原来的changeme替换成功现在的加密后的密码即可。如下:
vim /var/www/html/postfixadmin/config.inc.php
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105210115-445797425.png)
3.5 添加管理员账户
后台管理密码修改完毕后,我们现在来添加一个管理员账号admin@ilanni.com。如下:![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105210678-923364919.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105211271-1297719573.png)
通过上图,我们可以很明显的看出管理员admin@ilanni.com已经添加成功。
现在我们来使用这个管理员登录看看后台,后台登录地址为http://mail.ilanni.com/postfixadmin/login.php
如下:
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105211865-1891617191.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105212459-261648061.png)
通过上图,我们可以很明显的看出新添加的管理员已经可以登录postfixadmin管理后台了。
postfixadmin管理员登录地址是:
http://mail.haiyn.com/postfixadmin/login.php
postfixadmin 普通用户登录地址是:
http://mail.ilanni.com/postfixadmin/users/login.php
四、添加postfix虚拟域
postfixadmin是支持多域名管理的,在此我们先添加一个域名ilanni.com。如下:![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105212943-272928859.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105213584-250834804.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105214099-1815626549.png)
通过上图,我们可以很明显的看出ilanni.com这个域名已经添加成功。
五、添加邮箱用户
ilanni.com这个域名添加完毕后,我们现在来给这个域名添加新的邮件用户。如下:![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105214787-1799143018.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105216506-1590645289.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105217131-1412382528.png)
通过上图,我们可以很明显的看出ilannimail@ilanni.com,这个邮件用户已经被成功创建。
六、使用邮件客户端测试
ilannimail@ilanni.com邮件用户被添加后,我们现在来使用邮件客户端测试是否可以正常发送和收取邮件。
6.1 连接邮件服务器测试
首先我们先来测试该用户是否可以正常连接邮件服务器,如下:![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105217584-724875782.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105218099-745435762.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105218771-1020812180.png)
通过上图,我们可以很明显的看出邮件用户ilannimail已经正常连接postfix邮件服务器。
6.2 测试发送邮件功能
现在我们来测试发送邮件功能,如下:![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105219459-1137180821.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105220084-514302390.png)
通过上图,我们可以很明显的看出ilaninmail用户已经成功的向外域邮箱发送邮件。
6.3 测试收取邮件功能
现在我们来测试收取邮件功能,如下:![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105220928-710474343.png)
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105221615-1999493542.png)
通过上图,我们可以很明显的看出ilaninmail用户已经成功的向收取外域邮箱发送过来的邮件。
七、查看postfixadmin数据库
现在我们来查看下postfixadmin数据库postfix中的数据,如下:![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105222224-1248120814.png)
这个是postfix数据库postfixadmin所生成的表。
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105222834-1758337791.png)
admin表中存储的是管理员用户。
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105223506-931183346.png)
alias表中存储的是所有的邮件用户。
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105224459-575532592.png)
domain表中存储的是虚拟域名。
八、查看postfix对系统产生的影响
本篇文章我们主要是针对postfix虚拟用户,进行操作的。现在我们虚拟域名已经添加,邮件用户也已经创建。那么我们现在来查看下,我们的这些操作在系统上产生了哪些影响。
8.1 查看邮件用户家目录
切换到vmail用户的家目录,如下:ll /home/vmail/
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105225084-1302257707.png)
通过上图,我们可以很明显的看出ilanni.com这个虚拟域名在vmail用户的家目录下产生了ilanni.com这个目录。
现在我们再来看看ilanni.com这个目录下都有哪些文件,如下:
ll /home/vmail/ilanni.com/
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105225787-521055421.png)
通过上图,我们可以很明显的看出在ilanni.com这个虚目录下产生了ilannimail和wxy这两个目录,而这两个目录名称刚好对应我们前面创建的邮件用户ilannimail和wxy。
这样看起来就刚刚好和我们前面解释的postfix虚拟用户原理相照应了。
8.2 查看邮件用户个数
我们现在查看ilannimail目录下文件,如下:ll /home/vmail/ilanni.com/ilannimail/Maildir/
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105226334-1037730492.png)
通过上图,我们可以很明显的看出该目录下面文件不多,现在我们主要关注cur目录。因为通过该目录下的文件个数,可以知道ilannimail用户有多少封邮件。以下两张截图,就可以证明这个说法。如下:
cd /home/vmail/ilanni.com/ilannimail/Maildir/cur
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105227037-1575105436.png)
可以看到cur目录下有三个文件。
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105227990-1960743180.png)
通过foxmail客户端也可以看到ilanimail用户确实只有三封邮件,这就证明了,我们前面的猜测是正确的。知道cur目录下的文件个数,可以知道ilannimail用户有多少封邮件。
8.3 查看文件对应邮件
由cur目录下的文件个数可知目前ilannimail有三封邮件,那么这三个文件分别对应哪三封邮件呢?其实我们可以根据文件的名称中的unix时间戳来定位,现在我们以1457768362.M305033P28093.iZ23r061d7kZ,S=4526,W=4615:2,RS文件为例。
通过文件名,我们可以知道该文件的unix时间戳是1457768362,那么可以查找这个unix时间戳对应的实际时间,如下:
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105228865-1636691004.png)
通过上图,可以知晓是15:39:22这封邮件。
当然我们也可以查看这个文件的内容,如下:
cat 1457768362.M305033P28093.iZ23r061d7kZ,S=4526,W=4615:2,RS
![](http://images2015.cnblogs.com/blog/62984/201603/62984-20160319105229865-1922992296.png)
相关文章推荐
- 烂泥:Postfix邮件服务器搭建之虚拟用户配置
- Postfix邮件服务器搭建之虚拟用户配置
- 烂泥:Postfix邮件服务器搭建之虚拟用户配置
- 构建postfix邮件服务器(四)配置postfix支持虚拟用户
- vsftpd 搭建和虚拟用户配置
- 基于虚拟用户的邮件服务器搭建
- CentOS 5下搭建使用MySQL认证用户的POSTFIX邮件服务器
- postfix+dovecot+MailScanner+spamassassin+F-Prot+extmail+extman构建企业级的虚拟用户邮件服务器(1) 推荐
- linux 下 搭建邮件邮件服务器(Postfix+Dovecot)(二)-基于mysql的虚拟账户登陆收发邮件
- CentOS 搭建postfix邮件服务器 配置php mail
- postfix+dovecot+MailScanner+spamassassin+F-Prot+extmail+extman构建企业级的虚拟用户邮件服务器(2)
- ubuntu搭建postfix邮件服务器配置客户端收发邮件
- 搭建PostfixAdmin 用于管理postfix虚拟域、虚拟用户不在是难题
- Postfix邮件服务器搭建及配置
- 烂泥:Postfix邮件服务器搭建之软件安装与配置
- VSFTP配置(二) ---基于mysql虚拟用户的搭建
- Postfix(四):结合MySQL配置支持虚拟用户
- 配置Postfix支持虚拟用户
- 邮件服务器搭建之:Postfix邮件服务器外发/邮件别名的配置
- 基于虚拟用户的邮件服务器配置