邮件系统是Linux网络应用的重要组成,一个完整的邮件系统包括三个部分:底层操作系统(Linux Operation),邮件传送代理(Mail Transport Agent,MTA),邮件分发代理(Mail Delivery Agent,MDA),邮件用户代理(Mail User Agent,MUA)。
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提出(),并使用他自己设计的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命令。