【在用】Postfix 根据规则过滤邮件
上一篇《Postfix 配合 SPF 拒绝欺诈邮件》介绍了 SPF 对欺诈邮件的处理,事实上,通过上篇文章的方式也可以进行邮件的过滤,不过,这里介绍的邮件过滤更为灵活。postfix 的过滤技术非常的全面,其可以在客户端smtp连接时过虑、HELO 阶段过虑、进行发件人过滤、收件人过虑,邮件头和邮件内容过滤等。这些过虑可以参看如下几个参数:
smtpd_client_restrictions
smtpd_helo_restrictions
smtpd_sender_restrictions
smtpd_recipient_restrictions
一、header_checks 规则与分类
下面接下来了解header_checks ,header_checks规则是一个统称,其规则不仅仅限于狭义的头检测,还包含body和附件等。通过man header_checks 可以获取如下用法:
vi main.cf
header_checks = pcre:/etc/postfix/header_checks
mime_header_checks = pcre:/etc/postfix/mime_header_checks
nested_header_checks = pcre:/etc/postfix/nested_header_checks
body_checks = pcre:/etc/postfix/body_checks
milter_header_checks = pcre:/etc/postfix/milter_header_checks
smtp_header_checks = pcre:/etc/postfix/smtp_header_checks
smtp_mime_header_checks = pcre:/etc/postfix/smtp_mime_header_checks
smtp_nested_header_checks = pcre:/etc/postfix/smtp_nested_header_checks
smtp_body_checks = pcre:/etc/postfix/smtp_body_checks
文件内容示例
/^Subject:.*abc.*/ DISCARD
规则生成
postmap /etc/postfix/header_checks
...
重启服务
service postfix restart
具体的规则分为三部分,格式如下
正则匹配部分 ACTIONS动作部分 通知信息部分
正则部分以标准的regexp正则为例(实则pcre正则更强大一些,但基本部分两者差别不大):
正则格式
/pattern/flags result //匹配时执行后面定义的动作 !/pattern/flags result //不匹配时执行后面定义的动作 if /pattern/flags //条件匹配时的动作, 以endif结束 endif if !/pattern/flags //条件不匹配时的动作, 以endif结束 endif
注:if 语句多用于开篇提到的smtpd规则部分。如:
if !/^owner-/
/^(.*)-outgoing@(.*)$/ 550 Use ${1}@${2} instead
endif
- 正则元字符
.
:代表任意一个字符*
:代表一个或多个字符\
:将一个特别字符取消转义^
:匹配行首$
:匹配行尾
- flags部分
i
:忽略大小写,默认为on
m
:多行匹配模式,默认为off
x
:扩展正则 ,默认为on
- 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
将匹配行替换后发给邮件接收者。
二、常用过虑示例
邮件头过滤:
/filename\=\".*src\.exe/ REJECT Virus filename is unavailable header /filename\=\".*\.cpl\"/ REJECT Virus filename is unavailable header /name\=\".*\.bat\"/ REJECT Virus filename is unavailable header /name\=\".*\.scr/ REJECT Virus filename is unavailable header /^Subject:.*Hello\,.*\,how\ are\ you.*/ DISCARD Virus drop the unavailable header /^Subject:.*W32.*removal\ tools$/ DISCARD Virus drop the unavailable header /^From:.*rayman\.com\.cn/ DISCARD Commercial unavailable header /^From:.*\@263\.net/ DISCARD Commercial unavailable header /^To:.*\.TXT@/ DISCARD Commercial unavailable header /^To:.*apatite.*\ /^Subject: .* / REJECT Spam Header Many Spaces /^Subject: Free Money/ REJECT Spam Free Money Mails /^Date: 19[0-9][0-9]/ REJECT Spam past date /name=[^>]*/.(bat|com|exe)/ REJECT Spam Executable Attachements
邮件内容过滤
/http\:\/\/168\-news\.com/ DISCARD Commercial drop the unavailable body /http\:\/\/.*edms\.tv/ DISCARD Commercial drop the unavailable body /mailto\:.*\@126\.com/ DISCARD Commercial drop the unavailable body /mailto\:.*\@powererp\.org/ DISCARD Commercial drop the unavailable body /0982\-281\-125/ DISCARD Commercial unavailable body /www\.email104\.com/ DISCARD Commercial unavailable body /\/nomail\.gif\"/ DISCARD Commercial nomail unavailable body /\/nomail\.htm\"/ DISCARD Commercial nomail unavailable body
以下是之前一些针对老的邮件病毒过虑的规则
############# Part I 病毒攻防 ####################### /filename/=/"1.*zip/"/ REJECT Virus 不允许该命名的附件(/filename/=/"1.*zip/"/) /filename/=/"postcard/.zip/"/ REJECT Virus 不允许该命名的附件(/filename/=/"postcard/.zip/"/ ) # 1. KLEZ.G 病毒攻防 ##################################### /^Subject:.*Let/'s be friends/ DISCARD Virus drop the unavailable header #/^Subject:.*A/ funny/ game/ DISCARD Virus drop the unavailable header #/^Subject:.*A WinXP patch$/ DISCARD Virus drop the unavailable header #/^Subject:.*A special funny website/ DISCARD Virus drop the unavailable header /^Subject:.*Hello/,.*/,how/ are/ you.*/ DISCARD Virus drop the unavailable header /^Subject:.*W32.*removal/ tools$/ DISCARD Virus drop the unavailable header /^Subject:.*Worm/ Klez.*immunity.*/ DISCARD Virus drop the unavailable header # 4. Sobig ############################################# /^Subject.*my/ details/ DISCARD Virus drop the unavailable header #/^Subject.*your/ details/ DISCARD Virus drop the unavailable header #/^Subject.*your/ application/ DISCARD Virus drop the unavailable header # 5. 微軟 假好心病毒 #################################### #/^Subject.*Last/ Internet/ Pack/ DISCARD Virus drop the unavailable header #/^Subject.*Last/ Network/ Pack/ DISCARD Virus drop the unavailable header /^From.*MS/ Network/ Security/ DISCARD Virus drop the unavailable header # 6. 其他最新 ######################################### /^Subject.*our/ private/ photos/ DISCARD Virus drop the unavailable header /^Subject.*don/'t/ be/ late/!/ DISCARD Virus drop the unavailable header # 其他病毒 ############################################# /^Subject:.*Here/ is/ that/ sample/ REJECT Virus drop the unavailable header /^Subject:.*Your.*password/ REJECT Virus drop the unavailable header /charset/=/"Windows/-1252/"/ REJECT Virus 本主机不可使用 charset 為 windows-1252 (Sorry, charset=windows-1252 is unavailable header) #/^Subject/:/ warning$/ REJECT Virus 本主机不可使用这个标题做为邮件标题 unavailable header #/^Subject/:/ unknown$/ REJECT Virus 本主机不可使用这个标题做为邮件标题 unavailable header #/^Subject/:/ stolen$/ REJECT Virus 本主机不可使用这个标题做为邮件标题 unavailable header #/^Subject/:/ hi$/ REJECT Virus 本主机不可使用这个标题做为邮件标题 unavailable header #/^Subject/:/ fake$/ REJECT Virus 本主机不可使用这个标题做为邮件标题 unavailable header # 一些不要被允許的帳號,這些都可以抵擋! ############################################# /^From/:.linyan/@/ REJECT Virus 本主机不允许使用该来源帐号的邮件 linyan /^From/:.*admin/@/ REJECT Virus 本主机不允许使用该来源帐号的邮件 unavailable header
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭