本文的目标:

搭建一个内部的邮件服务器,最终可实现:用户在一台内部的邮件服务器上互相发送邮件(换句话说就是:一个邮件服务器上创建多个用户,多个用户之间可以互相发送邮件),邮件服务器不需要将邮件转发到外部邮件服务器上。 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