postfix邮件服务器部署安装(centos6.5)

前言:说句实在话,一开始领导以为不就是一个邮件服务器么,搞搞弄弄就搞了。我之前搞过知道里面的弯弯绕。所以并不敢掉以轻心,这里面需要各个软件之间的相互协调,以及配置文件的修改,安全性参数的配置,还是一个大大的工程。下面是配置之前的准备工作。
一、域名解析
因为邮件服务器牵涉到域名的问题比较多,所以在此我们先来介绍有关域名解析的相关配置。
我们需要在域名解析控制台添加MX、TXT和相关的A记录,在平时的域名解析过程中,使用最多的是万网配置,下面分别一一介绍下。
万网配置,如下:
postfix邮件服务器部署安装(centos6.5)
postfix邮件服务器部署安装(centos6.5)

如果对于DNSPod的MX和TXT配置记录,不清楚的话,可以查看如下连接:
MX记录配置https://support.dnspod.cn/Kb/showarticle/tsid/33
TXT记录配置https://support.dnspod.cn/Kb/showarticle/tsid/34

注意:我们现在是主域名meanstech.com解析到A服务器,mail解析到B服务器上,所以我们现在不能按照万网的教程进行配置。
测试MX和TXT记录是否解析正确,如下:
nslookup -qt=mx meanstech.com
postfix邮件服务器部署安装(centos6.5)
nslookup -qt=txt meanstech.com
postfix邮件服务器部署安装(centos6.5)

二、lamp环境准备及安装

1.为了更好的使用postfix,我们还需要安装php、mysql、apache等相关软件,我们现在进行安装。
在Centos6上执行以下命令:
rpm -ivh http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm
yum -y install mysql-server mysql mysql-devel php56w php56w-fpm php56w-mysql php56w-common php56w-gd php56w-mbstring php56w-mcrypt php56w-devel php56w-xml php56w-imap php56w-pear php56w-snmp
postfix邮件服务器部署安装(centos6.5)
postfix邮件服务器部署安装(centos6.5)
直接在centos6.5的控制台上复制粘贴回车。

以上安装完毕后,我们还要做其他的操作。
启动mysql数据库,修改mysql的root用户密码。如下:
/etc/init.d/mysqld start
/usr/bin/mysqladmin -u root password ‘123456’
其次就是查看mysql的端口是否被占用
postfix邮件服务器部署安装(centos6.5)
然后创建postfix数据库和用户
mysql -uroot -p123456
create database postfix default character set utf8 collate utf8_bin;
grant all on postfix.* to ‘postfix’@’%’ identified by ‘postfix’;

测试postfix用户登录情况
mysql -upostfix -ppostfix
postfix邮件服务器部署安装(centos6.5)

设置mysql和apache服务开机自启
chkconfig mysqld on
chkconfig httpd on

三、主机名修改
这边基本上是约定俗称的,需要改成统一的mail.XXX.com,这边就会修改主机名
vim /etc/sysconfig/network
postfix邮件服务器部署安装(centos6.5)
以上修改需要我们重启服务器才能生效,为了更快的显示最新的主机名。我们可以通过如下命令进行修改,如下:
hostname mail.meanstech.com
查看修改后的主机名,如下:
hostname
postfix邮件服务器部署安装(centos6.5)
四、创建邮件专用用户
为了后续的管理方便,我们使用系统的一个用户映射为对邮件服务器的用户,该用户对于postfix来说是一个虚拟用户。
所在在此之前,我们需要添加一个不能登录到系统的,并且指定用户组和用户ID的特殊用户vmail,该用户也可以自行定义。
使用如下命令进行创建,如下:
groupadd -g 5000 vmail
useradd -g vmail -u 5000 -s /sbin/nologin vmail
此时可以看到home文件夹目录下有对应的文件
postfix邮件服务器部署安装(centos6.5)
到此为止postfix的准备工作已经做完毕了。

五、安装和配置postfix和dovecot
本次使用的Centos6.5本身就带postfix所以不用安装
yum install dovecot -y
1.1 修改main.cf文件
首先要修改postfix的主配置文件main.cf,如下:
vim /etc/postfix/main.cf (红色字体需要修改或是增添)
当然还有一些安全系数,就是保证不然自己的邮件服务器被当成肉机器
myhostname = mail.meanstech.com
mydomain = meanstech.com
myorigin = $mydomain
inet_interfaces = all
mydestination = myhostname,localhost.myhostname, localhost.mydomain, localhost
#启用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
broken_sasl_auth_clients = yes

****##限制收件人
#permit_mynetworks - 检测客户端是否来自mynetworks或者mynetworks_style的网络,是的话返回OK,否则返回DUNNO状态码。
#permit_sasl_authenticated - 检测用户认证是否通过的,认证通过的返回状态OK,否则返回DUNNO状态码。
#reject_non_fqdn_hostname - HELO/EHLO时:客户端提供的主机名不是RFC要求的完整形式(FQND),返回REJECT,否则返回DUNNO状态码。
#reject_non_fqdn_sender - MAIL FROM时:客户端提供的主机名不是RFC要求的完整形式(FQND),返回REJECT,否则返回DUNNO状态码。
#reject_non_fqdn_recipient - RCPT TO时:客户端提供的主机名不是RFC要求的完整形式(FQND),返回REJECT,否则返回DUNNO状态码。
#reject_invalid_hostname - HELO/EHLO时:客户端提供的主机名不是有效的主机名时,返回REJECT,否则返回DUNNO状态码。
#reject_unauth_pipelining - 禁止非授权客户端使用pipelining。
#reject_unauth_destination - RCPT TO时:收件人不在postfix管辖的区域(由mydestination定义),返回REJECT,否则返回DUNNO状态码。

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_invalid_hostname, reject_unauth_pipelining, reject_unauth_destination
##限制发件人
#permit_mynetworks - 检测客户端是否来自mynetworks或者mynetworks_style的网,是的话返回OK,否则返回DUNNO状态码。
#reject_sender_login_mismatch - 拒绝发送者在KaTeX parse error: Expected 'EOF', got '#' at position 50: …名sasl登录名不一致的连接。#̲ reject_authent…smtpd_sender_login_maps中所匹的用户名和sasl登录名不一致的连接。# reject_unauthenticated_sender_login_mismatch - 拒绝认证失败的发送者在$smtpd_sender_login_maps中所匹的用户名和sasl登录名不一致的连接。
smtpd_sender_restrictions = permit_mynetworks, reject_sender_login_mismatch, reject_authenticated_sender_login_mismatch, reject_unauthenticated_sender_login_mismatch

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

smtpd_sender_login_maps =
mysql:/etc/postfix/sql/mysql_virtual_sender_maps.cf,
mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf
#启用虚拟用户
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主配置文件中,需要注意的地方我已经标注出来了,其中还需要说明的是我们在此启用的虚拟用户是准备过程中创建的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}
注意(flags这个前面必须要有一个空格,不然postfix启动失败)
这是一个坑!!!!!

1.3 数据库连接相关文件
连接数据库相关文件有7个,在创建配置文件之前,我们要在/etc/postfix/目录下建立sql目录用来存放这些配置如下:
mkdir /etc/postfix/sql/
现在我们来创建这些配置文件,注意这些配置文件中,有关数据库的部分都是前期准备中的用户名、密码和数据库。如下:
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’]
postfix邮件服务器部署安装(centos6.5)
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’
postfix邮件服务器部署安装(centos6.5)
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’
postfix邮件服务器部署安装(centos6.5)
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’
postfix邮件服务器部署安装(centos6.5)
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’
postfix邮件服务器部署安装(centos6.5)
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’
postfix邮件服务器部署安装(centos6.5)
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’
postfix邮件服务器部署安装(centos6.5)
1.4 测试sasl与postfix集成
以上配置完毕后,现在我们来测试postfix是否已经正确与cyrus-sasl进行集成,使用如下命令:
telnet mail.meanstech.com 25
ehlo meanstech.com
postfix邮件服务器部署安装(centos6.5)

注意:图中的ehlo meanstech.com命令,该命令需要手工输入,而如果出现250-AUTH PLAIN LOGIN和250-AUTH=PLAIN LOGIN两行,则说明postfix已经正确启用smtp认证。
六、dovecot虚拟用户配置
dovecot配置文件比较多,下面我们一一介绍。
1.1 修改dovecot.conf文件
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
postfix邮件服务器部署安装(centos6.5)

1.2 修改10-auth.conf文件
vim /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login cram-md5
!include auth-system.conf.ext
postfix邮件服务器部署安装(centos6.5)
postfix邮件服务器部署安装(centos6.5)
1.3 修改10-ssl.conf文件
10-ssl.conf文件主要是关于postfix的ssl认证相关的配置,在此我们先禁用ssl。如下:
vim /etc/dovecot/conf.d/10-ssl.conf
ssl = no
postfix邮件服务器部署安装(centos6.5)
1.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
postfix邮件服务器部署安装(centos6.5)
postfix邮件服务器部署安装(centos6.5)

1.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
postfix邮件服务器部署安装(centos6.5)
1.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
group=postfix
}
}
postfix邮件服务器部署安装(centos6.5)
postfix邮件服务器部署安装(centos6.5)
postfix邮件服务器部署安装(centos6.5)

1.7 修改15-lda.conf文件
修改15-lda.conf文件,是为了防止dovecot报错
我们只需在15-lda.conf文件中添加postmaster_address = [email protected]即可,如下:
vim /etc/dovecot/conf.d/15-lda.conf
postmaster_address = [email protected]
postfix邮件服务器部署安装(centos6.5)
1.8 添加dovecot-sql.conf.ext文件
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’
postfix邮件服务器部署安装(centos6.5)
七、postfixadmin配置
dovecot配置完毕后,我们现在来配置postfixadmin,postfixadmin需要lamp的支持。
1.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
1.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[‘encrypt’] = ‘dovecot:CRAM-MD5’;
$CONF[‘dovecotpw’] = “/usr/bin/doveadm pw”;
$CONF[‘domain_path’] = ‘YES’;
$CONF[‘aliases’] = ‘1000’;
$CONF[‘mailboxes’] = ‘1000’;
$CONF[‘maxquota’] = ‘1000’;
$CONF[‘fetchmail’] = ‘NO’;
$CONF[‘quota’] = ‘YES’;
$CONF[‘used_quotas’] = ‘YES’;
$CONF[‘new_quota_table’] = ‘YES’;
postfix邮件服务器部署安装(centos6.5)
postfix邮件服务器部署安装(centos6.5)

1.3 启动postfixadmin
postfixadmin配置完毕后,我们现在来启动postfixadmin。
Postfixadmin不是一个单独的程序,它是依赖于apache的,所以我们只需要启动apache即可。如下:
/etc/init.d/httpd start
chkconfig httpd on
http://mail.meanstech.com/postfixadmin/setup.php
postfix邮件服务器部署安装(centos6.5)
通过上图,我们可以很明显的看出postfixadmin已经正常启动,而且其所依赖的各个组件也已经正常安装和配置。
1.4 修改默认后台管理密码
在postfixadmin的配置文件中有一个选项是填写管理员后台管理密码的,默认是changeme。如下:
postfix邮件服务器部署安装(centos6.5)
现在我们来修改默认密码,如下:
postfix邮件服务器部署安装(centos6.5)
通过上图,我们可以很明显的看出默认已经密码已经被我们成功的修改了。
修改完毕后,我们复制该密码到postfixadmin的配置文件,将原来的changeme替换成功现在的加密后的密码即可。如下:
vim /var/www/html/postfixadmin/config.inc.php
postfix邮件服务器部署安装(centos6.5)
1.5 添加管理员账户
后台管理密码修改完毕后,我们现在来添加一个管理员账号[email protected]。如下:
postfix邮件服务器部署安装(centos6.5)
postfix邮件服务器部署安装(centos6.5)

通过上图,我们可以很明显的看出管理员[email protected]已经添加成功。
现在我们来使用这个管理员登录看看后台,后台登录地址为http://mail.meanstech.com/postfixadmin/login.php
如下:
postfix邮件服务器部署安装(centos6.5)

通过上图,我们可以很明显的看出新添加的管理员已经可以登录postfixadmin管理后台了。
postfixadmin管理员登录地址是:
http://mail.meanstech.com/postfixadmin/login.php
postfixadmin 普通用户登录地址是:
http://mail.meanstech.com/postfixadmin/users/login.php
四、添加postfix虚拟域
postfixadmin是支持多域名管理的,在此我们先添加一个域名meanstech.com。如下:
postfix邮件服务器部署安装(centos6.5)
postfix邮件服务器部署安装(centos6.5)
postfix邮件服务器部署安装(centos6.5)

postfix邮件服务器部署安装(centos6.5)
通过上图,我们可以很明显的看出meanstech.com这个域名已经添加成功。
五、添加邮箱用户
meanstech.com这个域名添加完毕后,我们现在来给这个域名添加新的邮件用户。如下:
postfix邮件服务器部署安装(centos6.5)
postfix邮件服务器部署安装(centos6.5)
postfix邮件服务器部署安装(centos6.5)

通过上图,我们可以很明显的看出[email protected],这个邮件用户已经被成功创建。
六、使用邮件客户端测试
[email protected]邮件用户被添加后,我们现在来使用邮件客户端测试是否可以正常发送和收取邮件。
1.1 连接邮件服务器测试
首先我们先来测试该用户是否可以正常连接邮件服务器,如下:
postfix邮件服务器部署安装(centos6.5)
postfix邮件服务器部署安装(centos6.5)
postfix邮件服务器部署安装(centos6.5)

通过上图,我们可以很明显的看出邮件用户testmail已经正常连接postfix邮件服务器。
1.2 测试发送邮件功能
现在我们来测试发送邮件功能,如下:
postfix邮件服务器部署安装(centos6.5)
126邮箱
postfix邮件服务器部署安装(centos6.5)
通过上图,我们可以很明显的看出meanstechmail用户已经成功的向外域邮箱发送邮件。
1.3 测试收取邮件功能
现在我们来测试收取邮件功能,如下:

postfix邮件服务器部署安装(centos6.5)

postfix邮件服务器部署安装(centos6.5)
postfix邮件服务器部署安装(centos6.5)
通过上图,我们可以很明显的看出meanstechmail用户已经成功的向收取外域邮箱发送过来的邮件。
七、查看postfixadmin数据库
现在我们来查看下postfixadmin数据库postfix中的数据,如下:

postfix邮件服务器部署安装(centos6.5)
这个是postfix数据库postfixadmin所生成的表。
admin表中存储的是管理员用户。。
postfix邮件服务器部署安装(centos6.5)

alias表中存储的是所有的邮件用户
postfix邮件服务器部署安装(centos6.5)
domain表中存储的是虚拟域名。
postfix邮件服务器部署安装(centos6.5)

以上就是一些关于postfix +dovecot的邮件服务器的搭建情况,中间还是遇到不少的波折,但是一路走来也挺欣慰,毕竟搞成功了。

参考文献
https://www.cnblogs.com/ilanni/p/5294632.html
https://www.cnblogs.com/ilanni/p/5294553.html