一. postfix概述
  postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。下面一段话摘自postfix的官方站点(http://www.postfix.org):“postfix是Wietse Venema想要为使用最广泛的sendmail提供替代品的一个尝试。在Internet世界中,大部分的电子邮件都是通过sendmail来投递的,大约有100万用户使用sendmail,每天投递上亿封邮件。这真实一个让人吃惊的数字。Postfix试图更快、更容易管理、更安全,同时还与sendmail保持足够的兼容性。”--摘至百度百科.
二.    POSTFIX实现过程
环境:
需要搭建DNS服务做MX解析;
POSTFIX实现SMTP功能;
DOVECOT 提供pop3与imap服务;
CYRUS-SASL 提供SMTP认证;
DNS:
mail.example.com (邮件主机)
邮件服务之POSTFIX_postfix
mail.sina.com (邮件主机)申明:此为实验环境。
邮件服务之POSTFIX_postfix_02
POSTFIX:
邮件服务之POSTFIX_dovecot_03
配置前行备份:
邮件服务之POSTFIX_休闲_04
#postconf -d     查看postfix default设置
#postconf -n     查看用户自定义设置
#postconf -e      修改用户自定义设置
MTA的选择:
邮件服务之POSTFIX_dovecot_05
启动postfix :
邮件服务之POSTFIX_dovecot_06
设置监听接口:(默认只监听在本地,ALL为监听所有接口)
邮件服务之POSTFIX_职场_07
这个设置只有重启服务才能生效:(已经监听在所有接口了)
邮件服务之POSTFIX_dovecot_08
查看当前用户设置:
邮件服务之POSTFIX_休闲_09
使用TELNET工具测试:
邮件服务之POSTFIX_postfix_10
发信流程:(借用鸟哥的图.感谢鸟哥:这张图让我的理清了思路)
邮件服务之POSTFIX_cyrus-sasl_11
这里分别涉及了/etc/postfix/main.cf里的三个设定项:
mydestination:        设置可收信的地址(用于收信)
mynetworks:           设置可信任的客户端(用于Relay)
relay_domains:        设置可信任的域(用于Relay)
现在来看图作文吧:
第一步:信件进来ehlo握手阶段,传递邮件头部信息也就是mail from: mail to:之类的.
邮件主机根据传递来的头部信息分析邮件是不是传给我自己的,也就是看Mail To的地址是不是与我的邮件主机地址匹配.如果是,再看是否符合mydestination的设定,如果符合则放入mailbox,如果不符合则丢弃或退回.
以上是针对于邮件目标地址是邮件主机本身的处理过程
第二步:Mail To 的地址不是给邮件主机的,我们称为Relay部分.
这时,邮件主机会查看邮件来源IP地址(注意是IP地址而不是什么Mail from:,因为mail from是可以伪装的.)是否符合mynetworks设定(postfix 默认只信任本机所在的网络)
如果符合则放入邮件队列中等待转发.如果不符合,则看来源或者目的是否符合relay_domans的设定,如果符合则转发,不符合则丢弃或退回.
注:mynetworks与relay_domains都是用来设定可信任的客户端,只是一个是基于IP地址,一个是基于域名的设定而已.
测试整个流程:
第一步:example.com 是邮件本机的,接收邮件,放入mailbox
邮件服务之POSTFIX_职场_12
邮件日志信息(状态:发送并放入mailbox)
邮件服务之POSTFIX_职场_13
收件人地址拒绝: (目标是邮件主机主机的,但不符合mydestination设定)
邮件服务之POSTFIX_休闲_14
邮件日志信息:本地收信列表中不存在,reject (拒绝!!)
邮件服务之POSTFIX_postfix_15
来源不符合mynetworks与relay_domains设定.拒绝!!
邮件服务之POSTFIX_休闲_16
postfix默认只信任本地域.重新设定:信任sina.com这个域.
邮件服务之POSTFIX_休闲_17
来源IP不符合mynetworks设定(此邮件主机mynetworks设定只信任主机.).但目标地址符合relay_domains设定,转发成功!!
邮件服务之POSTFIX_postfix_18
说明:因为两台邮件主机处于同一网段的情况下,为了区分效果之前mynetworks设定为只信任自己,现在改为信任本网段.而relay_domains还原为默认的,即取消之前信任的sina.com域.
邮件服务之POSTFIX_dovecot_19
虽然不符合relay_domains设定,但来源符合mynetworks设定,为信任网络,转发.!!
邮件服务之POSTFIX_dovecot_20
日志信息说明的很清楚~~!!
邮件服务之POSTFIX_职场_21
SMTP控制:
控制文件: /etc/postfix/access  (sendmail的无标签版本)
可控制行为: client , sender , recipient (分别是客户端,发信者与收信者.)
执行动作: DISCARD(严厉拒绝,丢弃),REJECT(拒绝,退回信息),RELAY(转发),OK(允许,可以在一个拒绝范围内无条件允许个别.)
使用postmap /etc/postfix/access 进行重散列 (重要的一步!!)
/etc/postfix/access文件本身都带有配置实例,可以参考它的步骤~!
邮件服务之POSTFIX_postfix_22
实例:
在/etc/postfix/main.cf主配置文件中加入以下内容.
smtp的客户端控制,先检查/etc/postfix/access/里有没有相应匹配的动作,没有匹配的全部reject (拒绝!!)
邮件服务之POSTFIX_休闲_23
编辑/etc/postfix/access文件,此例只允许192.168.1.254这一个IP地址的访问.
邮件服务之POSTFIX_休闲_24
#postmap /etc/postfix/access  (使用hash进行重散列!!)
使用192.168.1.254这个IP地址测试发送成功~~!
邮件服务之POSTFIX_职场_25
使用192.168.1.111这个IP地址给example.com这个邮件主机的本地域发邮件仍然拒绝!!
邮件服务之POSTFIX_postfix_26
日志内容:
邮件服务之POSTFIX_休闲_27
改动一下,首先允许mynetworks(这里是192.168.1.0/24这个信任网段!),再做后面的动作.
邮件服务之POSTFIX_dovecot_28
现在邮件发送成功了~!!
邮件服务之POSTFIX_休闲_29
上面的mynetworks已经是允许了!下面再做一条发信策略,检查/etc/postfix/sender_access 文件,不匹配则执行后面的permit (允许!!)
邮件服务之POSTFIX_休闲_30
如下图,拒绝了sina.com这个域.我们看一下,发信..
邮件服务之POSTFIX_postfix_31
如下图,已经对发信人做了控制!!
邮件服务之POSTFIX_cyrus-sasl_32
做user2这个用户做例外!!
邮件服务之POSTFIX_休闲_33
user2@sina.com这个用户可以通过mail.example.com这个邮件主机发信了!!
邮件服务之POSTFIX_职场_34
下面再增加一条收信控制:
先检查recipient_access这个文件里的策略,不匹配则允许mynetworks,再拒绝没有被定义为可收信的主机名.
邮件服务之POSTFIX_职场_35
定义example.com这个域的user2这个用户收信拒绝!!注意不要和上面的那个user2@sina.com搞混淆了~!!
邮件服务之POSTFIX_cyrus-sasl_36
如下图,给user2发信被拒绝了~~! 给其他人发信ok~~!
邮件服务之POSTFIX_休闲_37
日志信息..
邮件服务之POSTFIX_职场_38
以上情况只针对于在同一局域网内固定IP地址的行为控制,如果是不固定的IP地址想要通过这个邮件主机收发邮件而又不想让我的邮件主机open relay 成为垃圾邮件中转站.那么SMTP认证能够很好的解决这一问题.
cyrus-sasl认证:
先确定下以下软件包是否被安装
#saslauthd -v 可查看该论证版本以及可支持的认证方式.
这里我选择shadow验证机制.
邮件服务之POSTFIX_dovecot_39
#/usr/sbin/saslauthd -a shadow  执行,并写入开机脚本.
分别编辑以下配置文件,内容如图:
/etc/sysconfig/saslauthd 这是sasl认证的全局配置,定义socketdir与认证方式.
/usr/lib/sasl2/smtpd.conf  smtp的认证配置
在/etc/postfix/main.cf配置文件中开启smtp认证,并进行相关设置.
邮件服务之POSTFIX_cyrus-sasl_40
sasl 测试: 分别测试saslauthd 这个功能是否开启和smtp认证是否生效!成功了!
邮件服务之POSTFIX_休闲_41
使用Dovecot 提供POP3与imap服务:
安装dovecot软件:
邮件服务之POSTFIX_休闲_42
启用服务查看监听的端口110 143分别是pop3 ,imap监听的端口,993 995则是pop3s与imaps啦.
邮件服务之POSTFIX_cyrus-sasl_43
因为pop3与imap不够安全,这里我只提供加密的pop3s 与imaps,所以客户端要只能在他的MUA软件上设置为安全的连接.
编辑/etc/dovecot.conf  去掉imap与pop3
邮件服务之POSTFIX_cyrus-sasl_44
重启服务,现在只提供imaps与pop3s 了.
邮件服务之POSTFIX_职场_45
设置开机启动;自制证书
邮件服务之POSTFIX_dovecot_46
如下图: dovecot.pem  已经产生了.
邮件服务之POSTFIX_postfix_47
dovecot是用的是对称加密的算法,所以公钥与私钥使用的都是dovecot.pem
这里将dovecot.pem放入一个/etc/pki/dovecot/serts这个目录里.(目录并不是特定的哦!)
邮件服务之POSTFIX_dovecot_48
编辑/etc/dovecot.conf
开启SSL的功能,并指定钥匙的路径,只需要对应刚才存放的路径就行了~!
邮件服务之POSTFIX_dovecot_49
测试~~!
邮件服务之POSTFIX_cyrus-sasl_50
邮件服务之POSTFIX_职场_51
测试ok~~!
使用MUA工具: Thunderbird
邮件服务之POSTFIX_cyrus-sasl_52
询问是否信任该证书..
邮件服务之POSTFIX_dovecot_53
如果你不确定请先查看该证书的相关细节部分,再决定是否信任,这里我当然要信任了.
邮件服务之POSTFIX_dovecot_54
邮件服务之POSTFIX_休闲_55
邮件服务之POSTFIX_cyrus-sasl_56
postfix 其他功能:
使用always_bcc监控邮件~!注意开启这个功能必须经过授权.
此功能是将经过本邮件主机的邮件都抄送一份给某个用户.
邮件服务之POSTFIX_cyrus-sasl_57
这里是将邮件抄送给admin@sina.com这个用户~!
邮件服务之POSTFIX_cyrus-sasl_58
看一下,给test@sina.com的用户也送了一份给admin@sina.com
邮件服务之POSTFIX_职场_59
日志信息:
邮件服务之POSTFIX_cyrus-sasl_60
虚拟别名:
编辑/etc/postfix/main.cf主配置文件
virtual_alias_domains = example.com baidu.com 这里指定了两个的虚拟域.
virtual_alias_maps = hash:/etc/postfix/virtual   (配置文件里有相关配置说明)
编辑/etc/postfix/virtual这个文件.编辑完也记得postmap一下~~!
邮件服务之POSTFIX_dovecot_61
通常用在公司域名变更之后,无须通知原来的客户邮件联系方式,使用别名就好了.
如图,发给admin@example.com的邮件最终发给admin@sina.com了.
日志信息:
邮件服务之POSTFIX_cyrus-sasl_62
用户别名:
alias_database = hash:/etc/aliases 在/etc/postfix/main.cf里指定用户别名文件.
使用的是/etc/aliases 这个文件.编辑完记得用postalias /etc/aliases 与postmap很相似~!
邮件服务之POSTFIX_postfix_63
用户别名的功能可以用于群发,而且有效的保证的系统帐号不被泄漏~!
邮件服务之POSTFIX_dovecot_64
看一下群发的效果吧~!
邮件服务之POSTFIX_cyrus-sasl_65
邮件服务之POSTFIX_postfix_66
邮件服务之POSTFIX_postfix_67
邮件服务之POSTFIX_postfix_68
地址重编:
邮件服务之POSTFIX_postfix_69
邮件服务之POSTFIX_dovecot_70
测试一下..~
邮件服务之POSTFIX_休闲_71
日志信息:
邮件服务之POSTFIX_职场_72
接收查看: Mail From: admin.alias@sina.com  测试ok~!
邮件服务之POSTFIX_cyrus-sasl_73
回信~~!
邮件服务之POSTFIX_cyrus-sasl_74
邮件服务之POSTFIX_职场_75
admin收到~!
邮件服务之POSTFIX_休闲_76
重新看了一下日志信息,有点儿疑惑,好像是之前做的bcc 还是别名的实验没有被清除,才收到了信件,因为在日志里出现了收信地址拒绝与bounced的状态,
邮件服务之POSTFIX_职场_77
解决:在/etc/aliases 添加以下内容就可以正常收信了。
admin.alias  admin
附:
mail.example.com邮件主机配置:
邮件服务之POSTFIX_dovecot_78
mail.sina.com邮件主机配置:
邮件服务之POSTFIX_dovecot_79
其它测试方式:
邮件服务之POSTFIX_cyrus-sasl_80
 
推荐文档:
 
完结~~!