在上一篇 RH254小结(二)postfix邮件服务器的搭建 中有提到邮件内容过滤 ,不过由于篇幅所限,写的有些零散,有些东西总有些意犹未尽。这里再写下。在此之前,先了解下过滤技术。postfix 的过滤技术非常的全而细 ,其可以在客户端smtp连接时过虑、HELO 阶段过虑、进行发件人过滤、收件人过虑,邮件头和邮件内容过滤等。前面提到的几种过虑可以参看如下几个参数:

1smtpd_client_restrictions
2smtpd_helo_restrictions
3smtpd_sender_restrictions
4smtpd_recipient_restrictions

一、header_checks 规则与分类

下面接下来了解header_checks ,header_checks规则是一个统称,其规则不仅仅限于狭义的头检测,还包含body和附件等。通过man header_checks 可以获取如下用法:

 1#main.cf 文件中增加的规则及分类
 2header_checks = pcre:/etc/postfix/header_checks
 3mime_header_checks = pcre:/etc/postfix/mime_header_checks
 4nested_header_checks = pcre:/etc/postfix/nested_header_checks
 5body_checks = pcre:/etc/postfix/body_checks
 6milter_header_checks = pcre:/etc/postfix/milter_header_checks
 7smtp_header_checks = pcre:/etc/postfix/smtp_header_checks
 8smtp_mime_header_checks = pcre:/etc/postfix/smtp_mime_header_checks
 9smtp_nested_header_checks = pcre:/etc/postfix/smtp_nested_header_checks
10smtp_body_checks = pcre:/etc/postfix/smtp_body_checks
11# 规则生效的方法
12postmap -q "string" pcre:/etc/postfix/filename
13postmap -q - pcre:/etc/postfix/filename <inputfile

具体的规则分为三部分,格式如下

1正则匹配部分        ACTIONS动作部分           通知信息部分

正则部分以标准的regexp正则为例(实则pcre正则更强大一些,但基本部分两者差别不大):

1、正则格式

1/pattern/flags result    //匹配时执行后面定义的动作
2!/pattern/flags result   //不匹配时执行后面定义的动作
3if /pattern/flags        //条件匹配时的动作, 以endif结束
4endif
5if !/pattern/flags       //条件不匹配时的动作, 以endif结束
6endif

注:if语句多用于开篇提到的smtpd规则部分。如:

1if !/^owner-/
2/^(.*)-outgoing@(.*)$/   550 Use ${1}@${2} instead
3endif

2、正则元字符

1.  :代表任意一个字符
2* :代表一个或多个字符
3\  :将一个特别字符取消转义
4^ :匹配行首
5$  :匹配行尾

3、flags部分

1i   :忽略大小写,默认为on
2m :多行匹配模式,默认为off
3x  : 扩展正则 ,默认为on

4、actions动作

actions动作有DISCARD、DUNNO、FILTER、 HOLD、IGNORE、INFO、PREPEND、REDIRECT、REPLACE、REJECT、WARN ,这里取几个常用的作下说明:

  • DISCARD 通知Postfix直接删除邮件,在这种情况下,服务器不对发送者返回任何信息,以便让发送端感觉邮件已经正常发送。只适用于postfix2.0以后的版本,其不支持smtp header/body checks 。
  • HOLD 通知Postfix将邮件保存在邮件队列中,以便管理对之进一步处理。
  • IGNORE 通知Postfix删除满足过滤条件的那部分内容。
  • REJECT 退回邮件,并告知通信原因。
  • WARN 将邮件收下来,但将邮件的基本信息记录在日志档内。
  • REPLACE 将匹配行替换后发给邮件接收者。

二、常用过虑示例

邮件头过滤:

 1/filename\=\".*src\.exe/                       REJECT      Virus filename is unavailable header
 2/filename\=\".*\.cpl\"/                          REJECT      Virus filename is unavailable header
 3/name\=\".*\.bat\"/                              REJECT      Virus filename is unavailable header
 4/name\=\".*\.scr/                                REJECT      Virus filename is unavailable header
 5/^Subject:.*Hello\,.*\,how\ are\ you.*/   DISCARD    Virus drop the unavailable header
 6/^Subject:.*W32.*removal\ tools$/        DISCARD    Virus drop the unavailable header
 7/^From:.*rayman\.com\.cn/                 DISCARD     Commercial unavailable header
 8/^From:.*\@263\.net/                          DISCARD     Commercial unavailable header
 9/^To:.*\.TXT@/                                   DISCARD     Commercial unavailable header
10/^To:.*apatite.*\
11/^Subject: .* / REJECT Spam Header Many Spaces
12/^Subject: Free Money/ REJECT Spam Free Money Mails
13/^Date: 19[0-9][0-9]/ REJECT Spam past date
14/name=[^>]*/.(bat|com|exe)/ REJECT Spam Executable Attachements

邮件内容过滤:

1/http\:\/\/168\-news\.com/                 DISCARD      Commercial drop the unavailable body
2/http\:\/\/.*edms\.tv/                          DISCARD     Commercial drop the unavailable body
3/mailto\:.*\@126\.com/                     DISCARD     Commercial drop the unavailable body
4/mailto\:.*\@powererp\.org/               DISCARD     Commercial drop the unavailable body
5/0982\-281\-125/                               DISCARD     Commercial unavailable body
6/www\.email104\.com/                      DISCARD     Commercial unavailable body
7/\/nomail\.gif\"/                                 DISCARD     Commercial nomail  unavailable body
8/\/nomail\.htm\"/                               DISCARD     Commercial nomail  unavailable body

以下是之前一些针对老的邮件病毒过虑的规则:

 1############# Part I 病毒攻防 #######################
 2/filename/=/"1.*zip/"/ REJECT Virus 不允许该命名的附件(/filename/=/"1.*zip/"/)
 3/filename/=/"postcard/.zip/"/ REJECT Virus 不允许该命名的附件(/filename/=/"postcard/.zip/"/ )
 4# 1. KLEZ.G 病毒攻防 #####################################
 5/^Subject:.*Let/'s be friends/ DISCARD Virus drop the unavailable header
 6#/^Subject:.*A/ funny/ game/ DISCARD Virus drop the unavailable header
 7#/^Subject:.*A WinXP patch$/ DISCARD Virus drop the unavailable header
 8#/^Subject:.*A special funny website/ DISCARD Virus drop the unavailable header
 9/^Subject:.*Hello/,.*/,how/ are/ you.*/ DISCARD Virus drop the unavailable header
10/^Subject:.*W32.*removal/ tools$/ DISCARD Virus drop the unavailable header
11/^Subject:.*Worm/ Klez.*immunity.*/ DISCARD Virus drop the unavailable header
12# 4. Sobig #############################################
13/^Subject.*my/ details/ DISCARD Virus drop the unavailable header
14#/^Subject.*your/ details/ DISCARD Virus drop the unavailable header
15#/^Subject.*your/ application/ DISCARD Virus drop the unavailable header
16# 5. 微軟 假好心病毒 ####################################
17#/^Subject.*Last/ Internet/ Pack/ DISCARD Virus drop the unavailable header
18#/^Subject.*Last/ Network/ Pack/ DISCARD Virus drop the unavailable header
19/^From.*MS/ Network/ Security/ DISCARD Virus drop the unavailable header
20# 6. 其他最新 #########################################
21/^Subject.*our/ private/ photos/ DISCARD Virus drop the unavailable header
22/^Subject.*don/'t/ be/ late/!/ DISCARD Virus drop the unavailable header
23# 其他病毒 #############################################
24/^Subject:.*Here/ is/ that/ sample/ REJECT Virus drop the unavailable header
25/^Subject:.*Your.*password/ REJECT Virus drop the unavailable header
26/charset/=/"Windows/-1252/"/ REJECT Virus 本主机不可使用 charset 為 windows-1252 (Sorry, charset=windows-1252 is unavailable header)
27#/^Subject/:/ warning$/ REJECT Virus 本主机不可使用这个标题做为邮件标题 unavailable header
28#/^Subject/:/ unknown$/ REJECT Virus 本主机不可使用这个标题做为邮件标题 unavailable header
29#/^Subject/:/ stolen$/ REJECT Virus 本主机不可使用这个标题做为邮件标题 unavailable header
30#/^Subject/:/ hi$/ REJECT Virus 本主机不可使用这个标题做为邮件标题 unavailable header
31#/^Subject/:/ fake$/ REJECT Virus 本主机不可使用这个标题做为邮件标题 unavailable header
32# 一些不要被允許的帳號,這些都可以抵擋! #############################################
33/^From/:.linyan/@/ REJECT Virus 本主机不允许使用该来源帐号的邮件 linyan
34/^From/:.*admin/@/ REJECT Virus 本主机不允许使用该来源帐号的邮件 unavailable header