本文的目标:
搭建一个内部的邮件服务器,最终可实现:用户在一台内部的邮件服务器上互相发送邮件(换句话说就是:一个邮件服务器上创建多个用户,多个用户之间可以互相发送邮件),邮件服务器不需要将邮件转发到外部邮件服务器上。 Postfix本身没有认证功能所以只能借助于第三方认证组件SASL来实现。与Postfix配合较好的SASL有:dovecot-SASL和Cyrus-SASL,以及Courier-Authlib这几款组件。本文使用的是Dovecot-SASL认证方式,如想使用Cyrus-SASL方式,可参考运维那点事的博文
本文参考博文:
http://blog.jjonline.cn/linux/185.html http://blog.51cto.com/11038104/1916669 http://cn.linux.vbird.org/linux_server/0380mail.php#postfix_pkg
注意:
『 # 』符号是批注的意思; 所有设定值以类似『变量』的设定方法来处理,例如myhostname = mail.netdj.net,请注意等号的两边要给予空格符,且第一个字符不可以是空白(即『 my..』),要由行首写起(即『my..』); 可以使用『 $ 』来延伸使用变量设定,例如myorigin = $myhostname,会等于myorigin = mail.netdj.net; 如果该变量支持两个以上的数据,则使用空格符来分隔,不过建议使用逗号加空格符『, 』来处理。例如: mydestination = $myhostname, $mydomain, linux.netskills.net,意指mydestination支持三个数据内容之意。 可使用多行来表示同一个设定值,只要在第一行最后有逗号,且第二行开头为空格符, 即可将数据延伸到第二行继续书写(所以刚刚第二点才说,开头不能留白!); 若重复设定某一项目,则以较晚出现的设定值为准!
部分参数解读:
- **myhostname:**设定主机名,需使用FQDN
- **mydomain:**这个项目默认会取$myhostname第一个『 . 』之后的名称(默认为mydomain = $myhostname)
- **myorigin :**这个项目在设定『邮件头上面的 mail from 的那个地址』, 也就是代表本 MTA 传出去的信件将以此设定值为准喔!如果你在本机寄信时忘记加上 Mail from 字样的话, 那么就以此值为准了
- **inet_interfaces :**设定postfix的监听接口,默认只监听127.0.0.1,根据情况调整,有一回我调整成了$hostname只对我的业务地址进行监听,但是配置完成,在启动postfix服务时显示false但没有其他任何报错,通过查看/var/log/maillog,发现是因为找到不$hostname对应的地址,结果我在/etc/hosts下面怎加了一个条目就好了。
- **inet_protocols :**设定postfix的监听IP协议(根据实际情况选择v4或v6)
- **mydestination :**设定『能够收信的主机名』,服务器只接收目的为mydestination定义范围内的邮件。在本环境中,需要将mydomain加入进去,否则服务器会拒收邮件(服务器错误: '554 5.7.1 mail2@netdj.net: Recipient address rejected: Access denied')
- **mynetworks :**规定信任的客户端(极重要)
第一步、关闭iptables、selinux、更改主机名
hostname mail.netdj.net
vim /etc/sysconfig/network
HOSTNAME=mail.netdj.net
/etc/init.d/iptables stop
chkconfig --level 3 iptables off
vim /etc/selinux/config
SELINUX=disable
setenforce 0
第二步、安装Postfix、Dovecot
#本次使用的Centos6.5本身就带postfix所以不用安装
yum install dovecot -y
第三步、配置postfix
vim /etc/postfix/main.cf
# 约75行: 取消注释,设置主机名
myhostname = mail.netdj.net
# 约83行: 取消注释,设置域名
mydomain = netdj.net
# 约99行: 取消注释
myorigin = $mydomain
# 约116行: 修改,默认为localhost(127.0.0.1)
inet_interfaces = all
#约119行: 推荐ipv4,如果支持ipv6,则可以为all
inet_protocols = ipv4
#约164行: 指定可接收邮件的主机名或域名
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#约264行: 取消注释,指定内网和本地的IP地址范围(可以作为client)
mynetworks = 10.0.0.0/8, 127.0.0.0/8, 192.168.0.0/16
#约419行: 取消注释,邮件保存目录
home_mailbox = Maildir/
#约571行: 指定MUA通过smtp连接postfix时返回的header头信息
smtpd_banner = $myhostname ESMTP
# 添加到最后
#规定邮件单封最大尺寸为5M(单位是Byte)
message_size_limit = 5242880
# 规定收件箱最大容量为20M(单位是Byte)
mailbox_size_limit = 20971520
# 启用Dovecot-SASL
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
#启用SMTP认证
smtpd_sasl_auth_enable = yes
#禁止匿名登录
smtpd_sasl_security_options = noanonymous
#设置sasl的本地信任域
smtpd_sasl_local_domain = $myhostname
#设置收件人地址过滤规则,其匹配策略是:“从上至下逐条检测,有匹配即停止”,根据实际情况进行配置,不一定完全复制。
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject
##设置收件人地址过滤规则
##smtpd_recipient_restrictions = permit_auth_destination, reject
##定义发件人地址过滤规则
##smtpd_sender_restrictions = permit_sasl_authenticated, reject
smtpd_recipient_restrictions解读
#permit_mynetworks:允许IP为mynetworks的客户使用本邮件系统寄出邮件 #permit_auth_destination:这个相当于允许发邮件给目的为$mydestination中定义的内容,如果不配置这一项,并且没有配置permit_mynetworks的话,就会报错554 5.7.1 mail2@netdj.net: Recipient address rejected: Access denied' #permit_sasl_authenticated:允许通过SMTP认证的用户向外发送邮件 #reject_unauth_destination:当收件人地址不包括在Postfix的授权网络内时,将拒绝发送邮件。 以下这条命令的意思是:允许给目的为$mydestination的发邮件,除此之外允许通过sasl认证的用户发邮件 #smtpd_recipient_restrictions = permit_auth_destination, permit_sasl_authenticated, reject
第四步、配置Dovecot
vim /etc/dovecot/dovecot.conf
#26行: 如果不使用IPv6,请修改为*
listen = *
vim /etc/dovecot/conf.d/10-auth.conf
#9行: 取消注释并修改,使用明文认证
disable_plaintext_auth = no
#97行: 认证机制为:简单登录----->dovecot 验证机制
auth_mechanisms = plain login
vim /etc/dovecot/conf.d/10-mail.conf
#30行: 指定位置与postfix的main.cf的mailbox指定为一致
mail_location = maildir:~/Maildir
vim /etc/dovecot/conf.d/10-master.conf
#88-90行: 取消注释并添加
#Postfix smtp验证
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
第五步、重启服务,添加开机启动项
/etc/init.d/postfix start
/etc/init.d/dovecot start
/etc/init.d/postfix restart
/etc/init.d/dovecot restart
chkconfig dovecot on
chkconfig postfix on
第六步、查看端口
第七步、创建用户与该用户邮件存放目录
useradd mail1 ; echo "123456" | passwd --stdin mail1
useradd mail2 ; echo "123456" | passwd --stdin mail2
su - mail1
mkdir Maildir
su - mail2
mkdir Maildir