在整封信的传送流程中,客户端若通过主机的重重限制后,最终应该可以到达邮件队列中。而由队列中要送出去或者是直接送到Mailbox就要通过MDA的处理。MDA可以加载很多机制,尤其是它可以过滤某些特殊字眼的广告邮件或病毒信件。MDA可以通过分析整封信件的内容(包括标头以及内文)来捕获有问题的关键词,然后决定这封信的命运。

Postfix已有内建可以分析标头或者是内文的过滤机制,即/etc/postfix/目录下的header_checks以及body_checks这两个文件。在默认的情况下这两个文件不会被Postfix使用,您必须利用下面的设置来启用它:

[root@linux ~]# vi /etc/postfix/main.cf
header_checks=regexp:/etc/postfix/header_checks
body_checks=regexp:/etc/postfix/body_checks
# regexp代表的是“使用正规表示法”的意思

[root@linux ~]# touch /etc/postfix/header_checks
[root@linux ~]# touch /etc/postfix/body_checks
[root@linux ~]# /etc/init.d/postfix restart
 

 

接下来您必须自行处理header_checks以及body_checks的规则设置,在设置前先确认对于正规表示法是否熟悉。因为很多信息都必须通过正规表示法来处理。开始设置的依据如下。

· “#”代表该行为注释,系统直接略过。
· 在默认的规则中,大小写是视为相同的。
· 规则的设置方法为:“/规则/操作 显示在日志文件里面的信息”。

请注意,要使用两个斜线“/”将规则包起来。举个例子来说明:例如想要抵挡掉标题为“A funny game”的信件,并且在日志文件里显示“drop header deny”,则可在header_chekcs文件中这样写:

 /_Subject:.*A funny game/   DISCARD  drop header deny

有如下几个操作。

· REJECT:将该封信件退回给原发信者。
· WARN:将信件收下来,但是将该封信的基本数据记录在日志文件内。
· DISCARD:将该封信件丢弃,并不给原发信者回信。

鸟哥自己做过一些规则的比对,只不过性能不好。如果您有兴趣的话,可以自行下载来看看,使用的结果请自行评估,因为每个人的环境都不一样。

 

如果您自行修改过这两个文件后,务必要检查一下语法才行。

[root@linux ~]# postmap -q - regexp:/etc/postfix/body_checks \
>  < /etc/Postfix/body_checks

如果没有出现任何错误,那就表示您的设置值应该没有问题了。

除了这两个设置之外,还有基础过滤方面的MDA机制呢,即procMail。procMail基本上与上面提到的body_checks相似,同样是用来分析邮件之用的,所以您也需要设置规则。首先需要安装procMail,CentOS已经有内建的软件了,请使用yum install procMail自行安装。

那么procMail的过滤规则在哪里呢?默认为/etc/procMailrc。这个文件的设置方式如下:

 

. 一组规则设置至少含有三行,如下所示
:0b                              <==设置过滤机制所要检查的信件部分
* _Subject:.*A funny game   <==检查的规则部分
/dev/null                      <==如果符合上述规定,则进行的操作

参数说明
a. 关于检查邮件的部分(第一行),flags 包含如下
H : Header的检查
B : Body的检查
h : 提供Header的数据,进入pipe、file及Mail等的检查
b : 提供Body的数据进入pipe、file 及Mail等的检查
b. 关于检查内容的部分
! : 这是反向选择的意思
< : 检查Mail的总长度是否小于设置值 ( bytes )
> : 与<相反的选择
c. 关于操作的部分
| : 开始启用后续的shell程序
d. 其他的环境变量部分
PATH:搜索执行文件的路径
SENDMAIL:/usr/sbin/SendMail
LOGFILE:日志文件。通常设置在/var/log/procMail.log
e. 与 Regular express相关的部分
_ : 开始(同一行最左边)字符
$ : 本行的结束字符(最右边)的比对
. : 除了新增一行之外的任何字符
\ : 跳脱字符
更详细的内容请参考
man procMailrc
man procMailex

您可以将上述的网页数据捕捉到您的/etc/procMailrc中,然后在main.cf里增加以下代码:

 

 [root@linux ~]# vi /etc/Postfix/main.cf
Mailbox_command=/usr/bin/procMail

[root@linux ~]# /etc/init.d/Postfix restart

通过这种基础的邮件分析可以捉取一些有问题的邮件,不过对于目前垃圾邮件的抵挡方面还是很有限。此外,由于这些分析机制都直接读取信件来处理与分析,这些机制通常都很耗系统资源。您的信件越大、流量越大,那么您的系统花费在分析邮件上面的时间会越多,所以您的硬件要很好,否则当有大型邮件进来时,邮件主机会跑得很吃力。所以,目前要不要启动这些过滤机制,那便视情况而定了。