Postfix是一个非常优秀的MTA,她素以高效、安全的特点而著称。Postfix是作者在UNIX上所见过的MTA中在反垃圾邮件(Anti-Spam或Anti-UCE)方面做得最好的一个,甚至有很多公司在Postfix代码的基础上进行二次开发而推出反垃圾邮件网关产品。MTA的反垃圾邮件功能,实际上就是在MTA处理过程中对会话进行过滤。这个过滤不但过滤了发往自身的垃圾邮件,而且还防止了自身被恶意利用发送垃圾邮件。Postfix实现了目前所有主要的MTA过滤技术。postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。和Sendmail相比Postfix更快、更容易管理、更灵活、更安全,同时还与sendmail保持足够的兼容性。Sendmail相比Postfix对比见表1.
表1 Sendmail与Postfix的对比
|
MTA |
成熟性 |
安全性 |
特色 |
性能 |
Sendmail兼容性 |
模块化设计 |
|
Postfix |
中 |
中 |
中 |
中 |
支持 |
是 |
|
Sendmail |
高 |
低 |
中 |
低 |
否 |
垃圾邮件(SPAM) 也称作UCE (Unsolicited Commercial Email,未经许可的商业电子邮件) 或UBE (Unsolicited Bulk Email,未经许可的大量电子邮件) .中国互联网协会对垃圾邮件给出了一个正式的定义,只要是符合下述四条之一的电子邮件都可被称为垃圾邮件:
(1)收件人事先没有提出要求或同意接收的广告、电子刊物、各种形式的宣传品等宣传性的电子邮件。
(2)收件人无法拒收的电子邮件。
(3)隐藏发件人身份、地址、标题等信息的电子邮件;。
(4)含有虚假的信息源、发件人、路由等信息的电子邮件。
垃圾电子邮件成为了人们最头疼的问题之一。在Windows操作系统中也许您已经尝够了垃圾邮件给您带来的苦头,不要以为在Linux操作系统平台中就能避免垃圾电子邮件给我们带来的骚扰,反击和过滤垃圾电子邮件是一件很重要的工作。下面是一些在Linux中广泛使用的防垃圾邮件技术。
(1)SMTP用户认证
目前常见并十分有效的方法是,在邮件传送代理(Mail Transport Agent,MTA)上对来自本地网络以外的互联网的发信用户进行SMTP认证,仅允许通过认证的用户进行远程转发。这样既能够有效避免邮件传送代理服务器为垃圾邮件发送者所利用,又为出差在外或在家工作的员工提供了便利。如果不采取SMTP认证,则在不牺牲安全的前提下,设立面向互联网的Web邮件网关也是可行的。此外,如果SMTP服务和POP3服务集成在同一服务器上,在用户试图发信之前对其进行POP3访问验证(POP before SMTP)就是一种更加安全的方法,但在应用的时候要考虑到当前支持这种认证方式的邮件客户端程序还不多。
(2)逆向名字解析
无论哪一种认证,其目的都是避免邮件传送代理服务器被垃圾邮件发送者所利用,但对于发送到本地的垃圾邮件仍然无可奈何。要解决这个问题,最简单有效的方法是对发送者的IP地址进行逆向名字解析。通过DNS查询来判断发送者的IP与其声称的名字是否一致,例如,其声称的名字为mx.hotmail.com,而其连接地址为20.200.200.200,与其DNS记录不符,则予以拒收。这种方法可以有效过滤掉来自动态IP的垃圾邮件,对于某些使用动态域名的发送者,也可以根据实际情况进行屏蔽。但是上面这种方法对于借助Open Relay的垃圾邮件依然无效。对此,更进一步的技术是假设合法的用户只使用本域具有合法互联网名称的邮件传送代理服务器发送电子邮件。例如,若发件人的邮件地址为someone@yahoo.com,则其使用的邮件传送代理服务器的Internet名字应具有yahoo.com 的后缀。这种限制并不符合SMTP协议,但在多数情况下是切实有效的。需要指出的是,逆向名字解析需要进行大量的DNS查询。
(3)实时黑名单过滤
以上介绍的防范措施对使用自身合法域名的垃圾邮件仍然无效。对此比较有效的方法就是使用黑名单服务了。黑名单服务是基于用户投诉和采样积累而建立的、由域名或IP组成的数据库,最著名的是RBL、DCC和Razor等,这些数据库保存了频繁发送垃圾邮件的主机名字或IP地址,供MTA进行实时查询以决定是否拒收相应的邮件。但是,目前各种黑名单数据库难以保证其正确性和及时性。例如,北美的RBL和DCC包含了我国大量的主机名字和IP地址,其中有些是早期的Open Relay造成的,有些则是由于误报造成的。但这些迟迟得不到纠正,在一定程度上阻碍了我国与北美地区的邮件联系,也妨碍了我国的用户使用这些黑名单服务。其中使用BRL认证过程见图1.
![]() |
| 图1 使用BRL过滤垃圾邮件的过程 |
(4)内容过滤
即使使用了前面诸多环节中的技术,仍然会有相当一部分垃圾邮件漏网。对此情况,目前最有效的方法是基于邮件标题或正文的内容过滤。其中比较简单的方法是,结合内容扫描引擎,根据垃圾邮件的常用标题语、垃圾邮件受益者的姓名、电话号码、Web地址等信息进行过滤。更加复杂但同时更具智能性的方法是,基于贝叶斯概率理论的统计方法所进行的内容过滤,该算法最早由Paul Graham提出(http://www.paulgraham.com/spam.html),并使用他自己设计的Arc语言实现。这种方法的理论基础是通过对大量垃圾邮件中常见关键词进行分析后得出其分布的统计模型,并由此推算目标邮件是垃圾邮件的可能性。这种方法具有一定的自适应、自学习能力,目前已经得到了广泛的应用。最有名的垃圾邮件内容过滤是Spamassassin,它使用Perl语言实现,集成了以上两种过滤方法,可以与当前各种主流的MTA集成使用。内容过滤是以上所有各种方法中耗费计算资源最多的,在邮件流量较大的场合,需要配合高性能服务器使用。 下面以RHEL 4.0为例,介绍上面几种技术应对安全隐患。
安装postfix
1、查询Sendmail是否安装:
#rpm -qa |grep sendmail
2、强行卸载Sendmail
# rpm -e sen
dmail sendmail-cf sendmail-doc –nodeps
3、用以下命令杀死运行中的sendmail进程:
# kill all sendmail
4、下载安装Posfix
#wget ftp://ftp.midvalleyhosting.com/pub/postfix/official/postfix-2.1.4.t ar.gz /tmp
#tar -vxf postfix-2.1.4.tar.gz
#cd postfix-2.1.4
5.编译源代码包
# make
6.建立一个新用户“postfix”,该用户必须具有唯一的用户ID号和组ID号,同时应该让该用户不能登录到系统,也即不为该用户指定可执行的登录外壳程序和可用的用户宿主目录。我们可以先用adduser postfix 添加用户再编辑/etc/passwd文件中的相关条目如下所示:
# useradd postfix
# postfix:*:12345:12345:postfix:/no/where:/no/shell
#groupadd postdrop
7.确定/etc/aliases文件中包含如下的条目:
# postfix: root
8. 以root用户登录,在/tmp/ postfix目录下执行命令:
# ./INSTALL.sh
9.启动postfix
# postfix start
postfix的配置文件位于/etc/postfix下,这四个文件就是postfix最基本的配置文件,它们的区别在于:mail.cf:是postfix主要的配置文件。Install.cf:包含安装过程中安装程序产生的postfix初始化设置。master.cf:是postfix的master进程的配置文件,该文件中的每一行都是用来配置postfix的组件进程的运行方式。postfix-script:包装了一些postfix命令,以便我们在linux环境中安全地执行这些postfix命令。
10、使用postfix本身规则拒收垃圾邮件:
1、 使用头信息过滤邮件:
通常我们可以使用例如To、From、Subject等这样标准的邮件头来拒收垃圾邮件。在mail.cf中加入一行:header_checks = regexp:/etc/postfix/header_checks,它告诉postfix读取名为/etc/postfix/reject-headers的文件, 因为缺省地,postfix不进行信头过滤。
格式是:regexp REJECT ;其中regexp是常规表达式,下面是一个标准的/etc/postfix/reject-headers文件其中一般以下包括内容:
/^To You @xoom\.com $/ REJECT
/^From mailer-daemon @myclient.com $ / REJECT
/^Subject: Make menoey fast / REJECT
myhostname = trendmicro.com.cn
mydomain = trendmicro.com.cn
myorigin = trendmicro.com.cn
inet_interfaces=all
mydestination = trendmicro.com.cn
local_recipient_maps =
//黑色域名部分请填写对应的domain name.
2. 在 /var/spool/postfix目录下新建etc目录,并运行:
# cp /etc/resolv.conf /var/spool/postfix/etc/
3、下载安装IMSS 5.5
下载之前需要到软件官方网站,注册并且得到一个AC—CODE,您需要提供以上激活码以得到病毒码及其他安全补丁的下载.下载链接:http://www.trendmicro.com/ftp/products/interscan/imss55linux1064.tar.gz
将下载文件拷贝到一个临时目录/tmp中。
# tar vxf imss55linux1064.tar.gz
#make;make install
#./isinst
系统提供了一个交换式的命令行界面,安装中请选择支持postfix,并根据实际情况确定是否安装集中管理平台(TMCM)。安装结束系统提示可以打开Web管理的IP地址和端口号:见图2。

图2 IMSS 5.5 安装完成
4、命令行下的参数配置:
1、 1、/etc/postfix/main.cf文件末尾添加如下内容:
default_process_limit=200
imss_connect_timeout=1s
content_filter = imss:localhost:10025
imss_destination_recipient_limit=200
imss_destination_concurrency_limit=20
2、在/etc/postfix/master.cf文件末尾添加以下内容:
#IMSS: content filter smtp transport "imss" for IMSS
imss unix - - n - - smtp
-o disable_dns_lookups=yes
-o smtp_connect_timeout=$imss_connect_timeout
-o smtp_data_done_timeout=$imss_timeout
#IMSS: content filter loop back smtpd
localhost:10026 inet n - n - 20 smtpd
-o content_filter=
-o smtpd_timeout=$imss_timeout
-o local_recipient_maps=
-o myhostname=localhost.$mydomain
3. Relay 控制
a. 允许Relay的Domain设置:
编辑/etc/postfix/main.cf文件,在如下位置添加允许的任意Relay的Domain,如:
relay_domains = 263.net
b. 允许接受的Domain设置:
编辑/etc/postfix/main.cf文件,在如下位置添加允许接受的Domain
mydestination = trendmicro.com.cn
c. 不受Relay限制的地址设置
编辑/etc/postfix/main.cf文件,在如下位置添加允许接受的Domain
mynetworks = 10.11.240.0/24, 127.0.0.1
说明:所谓Relay就是指别人能用这台SMTP邮件服务器,给任何人发信,这样别有用心的垃圾发送者可以使用笔者单位的这台邮件服务器大量发送垃圾邮件,而最后别人投诉的不是垃圾发送者,而是单位的服务器。
参数relay_domains & mydestination的主要区别在于:
Postfix会转发目的地符合 $relay_domains及其子域的邮件;
Postfix会接受目的地符合 $mydestination的邮件,并且在没有smart host的情况下尝试对这些域进行本地落地处理,因而,为了能正常的接受这些邮件,一定要对齐设置smart host;IMSS UNIX的Relay 控制界面设置中的域,即是$mydestination参数值,因而,一定要在IMSS的Domain-Based Delivery中做相应Deliver设置。
5、重新启动Postfix服务器:
#postfix start
重新让postfix读取更改后的配置只需运行“postfix reload”即可。
打开服务
器的8081端口:
# iptables -A FORWARD -i eth0 -p tcp --dport 8081 -j ACCEPT
iptables -A FORWARD -i eth0 -p udp --dport 8081 -j ACCEPT
6、启用Web方式管理:
服务器从新启动完毕,可以进行Web方式管理,开Web浏览器中输入:http://yourip:8081/IMSS.html或者http://yourhost:8445/IMSS.html 即可。第一次进入Web界面时系统提示输入密码,此时密码是空的,可以直接用鼠标点击“Enter”键进入Web管理界面后,马上设定管理员密码。见图3。
![]() |
| 图-3 首次登陆界面 |
点击“Policy Manager”选项,下面就可以制定自己的邮件服务器邮件管理策略,见图4。
![]() |
| 图-4 基于Web方式的IMSS 5.5的邮件管理策略界面 |