Linux系统下postfix邮件系统反垃圾技术解析
2011-06-04李志东
李志东
随着信息技术的发展,电子邮件在企业内部文件沟通、外部业务往来中承担着越来越重要的角色。但是,垃圾邮件的泛滥及其带来的安全问题一直在困扰着广大用户,对于企业来讲影响更大。
垃圾邮件是指未经允许发送的出于商业宣传、政治和色情等非正常目的的邮件。某种程度上,对垃圾邮件的定义可以是:那些人们没有意愿去接收而收到的电子邮件都是垃圾邮件。
从邮件的发送和接收基本流程中可以看出,MAIL服务器上的反垃圾邮件过程是在发件人、收件人公司的MAIL服务器会话发起和接收过程阶段进行的(见图1),而postfix的反垃圾邮件功能,实际上就是在postfix处理过程中对会话进行过滤。该过滤不但能对发往自身的垃圾邮件进行过滤,而且还可防止自身被利用而外发垃圾邮件。因此,postfix能够实现目前所有主要的邮件传输代理(Mail Transfer Agent,简称MTA)的过滤技术。
图1 邮件发送和接收
1 技术解析
当前,运行在Linux环境下的免费MTA有若干种选择,比较常见的有 Sendmail、Qmail、postfix、exim及Zmailer等等。其中,因为postfix处理速度快、易管理、能提供尽可能的安全保障,同时和sendmail能保持最大兼容而被很多大中型邮件系统所采用。
postfix过滤分为邮件数据发送前过滤和邮件数据发送后过滤两种。
(1)数据前过滤
数据前过滤是指在SMTP会话中,在DATA指令发送前进行的过滤(见图2)。其过滤默认是在RCPT TO指令后生效的,但将smtpd_delay_reject设置为No可使其立刻生效;在默认状态下smtpd_delay_reject的值是Yes,其四个子阶段可以接受所有支持的规则,在RCPT TO指令后全部生效;当其为no时,只接受五个公共规则参数(见表1)、之前子阶段过滤规则参数及本阶段规则参数。此外,根据smtpd_delay_reject设置值的不同,又有多阶段过滤和单阶段过滤两种形式。
图2 数据前过滤流程图
表1 公共规则参数
SMTP连接时过滤(SMTP客户端限制)在接受客户端SMTP连接请求时进行过滤。通过postfix的smtpd_client_restrictions指令来指定本阶段过滤规则(见表2)。
HELO/EHLO指令过滤(HELO/EHLO主机名限制)是在接受SMTP连接后,对HELO或EHLO指令所发送的信息过滤检查。本阶段可用过滤规则有公共规则、SMTP连接过滤规则及HELO/EHLO指令过滤阶段规则(见表3)。
表2 SMTP连接时过滤阶段规则参数
表3 HELO/EHLO指令过滤阶段规则
MAIL FROM指令过滤(发送者地址限制)对通过MAIL FROM指令声明发送者的身份过滤检查。利用smtpd_sender_restrictions指令指定该阶段的过滤规则,即公共规则、之前两个子阶段规则及本阶段规则(见表4)。
表4 MAIL FROM指令过滤阶段规则
RCPT TO指令过滤(接收者地址限制)负责对接收者身份进行过滤检查。通过smtpd_recipient_restrictions指令指定过滤规则,具体包括公共规则、之前三个子阶段规则及本子阶段规则(见表5)。
多阶段过滤是指smtpd_delay_reject为Yes时,过滤分多阶段进行,无论其中某个子阶段的过滤结果如何,都不会影响其它子阶段过滤的进行。
而单阶段过滤是指当smtpd_delay_reject为No时,一旦某个规则匹配成功,则其后的所有过滤规则和子阶段都不再进行。
(2)数据后过滤
即对邮件数据中的信息进行过滤以判断其是否为垃圾邮件,通过该过滤可自动完成对垃圾邮件的判定和处理,降低病毒随邮件扩散的可能性。
表5 RCPT TO指令过滤阶段规则
数据后过滤一般分为信头过滤和信体过滤两种。
在SMTP会话中,DATA指令发送的数据以一个空行分隔开,前面的部分称为信头,后面的称为信体。邮件中通常有主信头、MIME头及附带邮件的信头。
信头过滤可以通过对各信头参数进行匹配来完成。
信体过滤只检查body_checks_max_size所指定字节的大小,对于超长的行,只检查line_length_limi所指定的长度(默认2048字节)。
2 具体应用
2.1 Relay控制
(1)允许Relay的Domain设置
编辑/etc/postfix/main.cf文件,使relay_domains=263.net…。
(2)允许接受的Domain设置
编辑/etc/postfix/main.cf文件,使mydestination=trendmicro.com.cn等。
(3)不受Relay限制的地址设置
编辑/etc/postfix/main.cf文件,使mynetworks=10.11.240.0/24,127.0.0.1等。
2.2 启用Web方式管理
在Web浏览器中输入:http∶//用户IP:8081/IMSS.html,点击“Policy Manager”选项后即可以按企业内部需求制定自己的邮件服务器邮件管理策略。
除了设置内部规则之外,SpamAssassin(邮件伺服主机上邮件过滤器)也可以访问其它外部垃圾邮件过滤规则集。其中Chinese_rules.cf是用于垃圾邮件过滤系统SpamAssassin的中文垃圾邮件过滤规则集。具体操作时把Chinese_rules.cf复制到/usr/share/spamassassin文件中即可。
2.3 其他措施
(1)隐藏邮件服务器IP地址
如果网络中有专门发送邮件的中央邮件服务器为许多主机提供访问,则必须隐藏邮件地址的主机名部分。具体操作时需在文件main.cf中加入两行:
masquerade_domain=$mydomian;masquerade_exceptions=root;
其中第一句负责通知postfix邮件服务器对所在的域允许地址进行化装,而第二句是将root用户排除,即不对root用户伪装。
(2)限制服务器使用的进程数目
指定/etc/postfix/main.cf文件的下列参数来控制使用的并发进程总量:
default_process_limit=50(3)控制最大邮件尺寸可修改/etc/postfix/main.cf文件中的如下参数来控制邮件尺寸:
message_size_limit=1073741824,即规定服务器处理最大邮件为10兆。
(4)控制同时发送邮件的数量
通过下面参数设定一个站点的最大并发连接数量:
default_destination_concurrency_limit=20,可使到达单一站点的并发连接数量不超过20个。
3 结语
利用postfix邮件系统的反垃圾邮件技术可以精确地设置规则参数,有效防止垃圾邮件的侵害,再加上其它专业软件的支持,就能够使企业的邮件系统达到更好的反垃圾邮件效果。
应该指出,垃圾邮件本质上是一个社会问题,需要通过完善相关法律法规减少垃圾邮件的传播,而仅靠技术手段是无法从根本上杜绝的。