【IT168 服务器学院】Internet发展的今天,电子邮件已经成为信息时代的主要通信工具之一。它的方便快捷费用低廉、与地理位置无关的特性加快了信息的流动和交互。但在电子邮件为人们到来许多快捷、方便的服务时,也带来了很多干扰因素,我们每天被迫删除大量的垃圾邮件,严重影响工作效率。许多企业投入了高额设备服务器来处理邮件,但还是得不到高效率的工作,甚至于有时服务器瘫痪,是什么引起这些现象,是垃圾邮件。
垃圾邮件对企业和个人造成了严重的危害,但目前,其发展势头依然没有被彻底控制的迹象。阻止垃圾邮件,应该从源头做起,至少是在企业的电子邮件服务器上就能够阻挡绝大多数垃圾邮件到个人端。在这里介绍几种限制垃圾邮件的方法。
一、SMTP认证
SMTP认证是针对无限制转发采取的措施。所谓无限制转发,就是任何人都可以使用你的服务器发送邮件,一方面隐藏了真实的来源,另一方面转移了资源成本:发送者可以使用一台简单的PC机借用你的强大的服务器一次发送几十万封信。OPEN RELAY 是由于历史的原因----电子邮件使用的发信协议SMTP(简单邮件传输协议)不需要进行任何身份验证导致的邮件服务器的安全缺陷,虽然目前绝大多数邮件服务器都具有关闭或限制OPEN RELAY的功能,(有的需要更新到某个版本之后,有的需要打补丁。)但仍有很多企业没有对邮件转发做任何限制,导致大量垃圾邮件通过邮件服务器转发。采用SMTP认证,用户在发信时必须提交口令,只有通过服务器认证的用户才能发送邮件,这样极大的阻止了别人利用你的服务器传播大量的垃圾邮件。
你可以通过以下方式测试服务器是否可以被别人中继,(黑体为输入的命令)
$ telnet mailhostname或IP地址 25 #第一步
Trying IP地址...
Connected to IP地址.
Escape character is ''^]''.
220 mail.test.gov.cn ESMTP Sendmail 8.12.9/8.12.9; Wed, 7 Apr 2004 17:20:47 +0800 (CST)
mail from: user1@domainname1 #第二步。User1为非本服务器用户,domainname1为非本服务器域名
250 2.1.0 user1@domainname... Sender ok
rcpt to:user2@domainname2
250 2.1.5 user2@domainame2... Recipient ok
data
354 Enter mail, end with "." on a line by itself
如果可以顺利的到这一步,已经说明你的服务器有很大的漏洞可以被别人作为中继服务器。否则服务器会显示-ERR authorization first。
二、邮件地址或域名过滤。
虽然采用SMTP认证可以阻止别人利用你的服务器发送大量垃圾邮件,但阻止不了接受垃圾邮件,但我们可以采用邮件地址或域名过滤的方法阻止垃圾邮件,如果使用的邮件服务器是sendmail,可以采用以下步骤:
首先定位sendmail.cf文件,默认的存放位置是/etc/mail
拷贝sendmail.cf到一个安全目录。
在/etc/mail目录下创建以下文件。
Spammers.txt,该文件是被你服务器所拒绝的邮箱地址列表。
Spamdomain.txt,所拒绝的主机或域名列表。
Relaydomain.txt,允许可以转发信的主机或域名列表(除此之外的拒绝)。
How to edit sendmail.cf
下来就该配置sendmail.cf,要将过滤域名与邮箱的代码信息插入到sendmail.cf 中,而且必须插入到准确的位置,如果插入位置错误,邮件服务会异常或忽略此段设置。插入位置如下所示:
### Ruleset 0 -- Parse Address ###
######################################
Sparse=0
R$* $: $>Parse0 $1 initial parsing
R<@> $#local $: <@> special case error msgs
R$* $: $>ParseLocal $1 handle local hacks
R$* $: $>Parse1 $1 final parsing
#
# Parse0 -- do initial syntax checking and eliminate local addresses.
# This should either return with the (possibly modified) input
# or return with a #error mailer. It should not return with a
# #mailer other than the #error mailer.
#
SParse0
R<@> $@ <@> special case error msgs
从该位置开始插入过滤信息的代码