本文主要是介绍sendmail中与垃圾邮件相关的功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
sendmail中与垃圾邮件相关的功能
垃圾邮件是对广告宣传邮件的专门叫法,通常也称之为不请自来的商业电子邮件。它已经成为一个严重的问题,这主要是因为发件人(至少在美国)不是按字 节数付钱,而是纯粹按连接速率付钱的。或者就算他们按字节数付钱,他们也会只发送一则有数千个收件人的消息,然后通过另一台机器来转发它。别的机器支付了按字节算的庞大费用,而发送垃圾邮件者只支付一份拷贝的钱。在许多国家,最终用户按收到的字节数付钱,他们因为不得不为接收垃圾邮件付钱而非常生气。
从市场营销人员的观点看,垃圾邮件的效果不错。响应速度快,费用低廉,并且是即时发送。一份有3千万个电子邮件地址的列表只需花费大约40美元。
许多发送垃圾邮件的人试图表明他们是无辜的,他们会建议您如果想从他们的邮件列表中消失的话,请用一则写上“请删除”的消息回复他们的电子邮件。虽 然他们可能将您删除,但您却刚好替他们验证了一个目前有效的电子邮件地址,这个事实可能会将您放入其他的列表。发送垃圾邮件者还喜欢弄乱他们的邮件信头,试图把谁发送这封邮件,邮件是从哪台机器来的伪装起来。
把电子邮件地址卖给发送垃圾邮件者的家伙近来开始使用字典攻击的形式来搜出未知的地址。扫描软件从一份常用姓氏的清单开始,通过添加不同的大写首字 母,期望找出有效的电子邮件地址。为了检查这些地址是否有效,这个软件会连接到,比方说,50家大型ISP的邮件服务器,对无数个地址逐个进行验证 (VRFY或者RCPT)。
这种探测会对邮件服务器及其向客户投递合法邮件的能力产生巨大影响。sendmail可以通过使用PrivacyOption goaway对付这种情况,本章将从18.12.4节开始介绍这种方法。但是聪明的垃圾邮件软件的精力是非常充沛的,如果VRFY被封,它们会尝试 EXPN;如果两者都被封,它们就尝试RCPT。它们可以用这种方法尝试数百万个地址而从不发送一则消息—但它确实让您的邮件服务器忙得不可开交。
sendmail有一个选项BAD_RCPT_THROTTLE能挫败这种行为。如果在邮件信封里被拒绝的地址数量超过了这个选项的值,sendmail就开始在每次被拒绝的RCPT命令之后等一秒。
sendmail已经添加了一些非常好的功能来帮助控制垃圾邮件,这也有助于防范偶尔从邮件衍生的计算机病毒。很遗憾,大多数ISP必须传递所有的 邮件,所以这些功能相对于服务客户的宗旨来说可能太过苛刻了(当然,或许它们并不算严厉)。不过,在最终用户的站点上使用这些功能可以获得出色的效果。
有4种类型的垃圾邮件控制功能。
控制第三方或者随意的中继转发(relaying)的规则,中转就是一个站外用户使用您的邮件服务器给另一个站外用户发送邮件。发送垃圾邮件者常常使用转发来试图掩盖他们邮件的真实来源,以避免被他们的ISP发现。它还使得他们可以使用您的机时而节省他们自己的。这简直是杀手。
访问数据库,它允许根据地址对邮件进行过滤,这很像一个用于电子邮件的防火墙。
黑名单,其中包含了开放的中转站和已知对垃圾邮件友好的站点,sendmail可以对照这些站点进行检查。
凭借一种称为libmilter的通用邮件过滤接口,进行信头检查和输入邮件的过滤。它允许您任意扫描邮件信头和内容,并拒绝与特定模板相匹配的任何消息。
我们将在下面介绍这些新功能,然后考察我们收到的两封垃圾邮件,看看我们应该如何调整邮件系统以便自动地识别和拒收它们。
1 中继转发
sendmail和其他邮件传输代理程序要接受传入的邮件,查看信头和信封地址,决定邮件应该去往何处,然后把它传递到适当的目的地。该目的地可以在本地,或者可以是投递链中往下走的另一个传输代理程序。当一则传入的消息没有本地收件人时,就称处理它的传输代理程序担当了一个中继站(relay)的 角色。
在8.9版的sendmail之前,默认情况下允许随意转发(也称为开放中继)。sendmail接受在端口25上投递给它的任何消息,并尽力完成投递。这样做的前提是Internet能睦邻友好。
遗憾的是,发送垃圾邮件者开始滥用中继转发功能,他们利用它来隐瞒自己的身份,更重要的是,他们要使用您的带宽和机时而不是他们自己的。现在的看法是,把邮件服务器配置成开放中继是非常不好的。然而有许多服务器仍然配置成了开放中继。
只有用RELAY在访问数据库(参见18.10.2节)中做了标记的主机,或者在/etc/mail/relay-domains中列出的主机才允许投递要进行中继转发的邮件。由于对默认行为进行了这样的改动,再加上公众对此认识的提高,使用各种黑名单做前期屏蔽的帮助,开放中继的比例在今后几年里 应该降低。
所以,随意的中继转发是很糟糕的。与此同时,有些类型的中继又是很有用的,也是合法的。您怎么分辨应该转发哪些消息,拒收哪些消息呢?中继转发(relaying)实际上只在两种情况下才是必要的。
当传输代理程序充当主机的网关,除转发外任何其他方式该主机都不可达时。例如,不一定打开的主机(拨号主机、Windows的PC)和虚拟主机。在这种情况下,要中继转发的所有收件人都在同一个域内。
当传输代理是其他不那么聪明的主机的传出邮件服务器时。在这种情况下,所有发送主机的主机名或者IP地址都在本地(或者至少可以列举出来)。
其他任何似乎要求中继的情形可能都只是因为设计糟糕的缘故(要支持移动用户可能是个例外)。您可以通过指定一台中央服务器接收邮件(客户机访问采用 POP或者IMAP)来避免使用中继的第一种情况。第二种情况总是允许的,但是只允许您自己的主机。您可以检查IP地址或者主机名,主机易于伪造,但是 sendmail能够核实它们是否是伪造的。
虽然sendmail在默认情况下把中继转发功能关掉了,但又添加了几项功能可以再把它完全打开,或以某种受限制和约束的方法打开。下面完整地列出了这些功能,但我们建议要当心别开得太大。大多数站点不需要第二张表中列出的任何一项功能,它们确实很危险。下一小节中介绍的access_db功能,是允许有限制转发的最安全的方法。
FEATURE(‘relay_entire_domain') —只允许自己的域转发; |
如果使用SMART_HOST或者MAIL_HUB,通过一台特殊的邮件服务器传递邮件,就需要破例了。该服务器将不得不被设置为转发来自本地主机的邮件。应该这样配置它:
FEATURE(‘relay_entire_domain') |
同时还做虚拟主机托管的站点可能还需要RELAY_DOMAIN,才能允许它们的虚拟名字可以进行转发,虽然:
FEATURE(‘use_cw_file') |
就能为那些域或者主机打开转发功能。
还有其他一些可能性,但是它们充满了问题:
FEATURE(‘promiscuous_relay') —允许所有转发,别用它; |
promiscuous_relay功能允许从任何站点转发到任何其他站点。使用它就拿到了落入黑洞名单的单程票。千万不要在Internet能公开访问得到的机器上使用这项功能。
relay_based_on_MX功能不好,因为您不能控制让哪些站点把它们的MX记录指向您。典型情况下,只有您自己的主机才会把MX记录指向 您的邮件服务器,但没有什么能够防止其他站点修改它们的MX记录从而指向您。发送垃圾邮件者通常不具有修改MX记录的能力,但是阴险的站点肯定可以。
loose_relay_check功能允许“%扩展”形式(参见18.2.1节)的寻址方式,发送垃圾邮件者喜欢使用这种寻址形式。
relay_local_from功能信任消息信封上的发件人地址,它将转发那些看似来自本地地址的消息。当然,无论是邮件消息的信封还是信头都很容易伪造,而发送垃圾邮件者是伪造专家。
如果您打算以某种形式打开转发,请参阅cf/README中的sendmail文档,确保自己不会在不经意间成为发送垃圾邮件者的朋友。当完成之后,请让某个中继检查站点验证您是否在无意中创建了一个开放中继—可以试试spam.abuse.net。
有一些发生匹配错误的配置会使您的主机可能转发怪异的地址,这些地址是UUCP寻址句法的误用。当然,如果您没有UUCP连接,可以使用:
|
来预先防止这种可能性。当前的sendmail默认不支持任何古老的连网技术,比如UUCP、BITNET或者DECnet。
另一种常见的转发是LUSER_RELAY,它用于并不存在的本地用户。它默认按照下面这样定义:
define(‘LUSER_RELAY', ‘error:No such user') |
sendmail配置错误的站点有时会在Internet上向外泄漏不全的本地用户名(通常是在Cc行上)。试图给这类邮件写回复的人会把回复寄给一个显然不存在的本地用户。这种转发通常被称为“失败者转发”,并被指向了错误的邮寄程序。
除非您想要返回一则不同的消息或者实现某种特殊的处理,否则不需要改变这个配置。有些站点把“失败者”的邮件发给模糊匹配的一个人或者一个程序,以防发件人打错了,或者只是登录名稍有错误。
2 访问数据库
sendmail中包括了对访问数据库的支持,您可以用它来为自己的站点建立一个专门用于邮件的防火墙。它检查来自外部世界的邮件,如果邮件来自特定用户或者域就拒收。还可以使用访问数据库来指定一台机器愿意为哪些域转发邮件。
用下面一行启用访问数据库(access database):
FEATURE(‘access_db', ‘type filename') |
如果没有指定type和filename,数据库默认为从文件/etc/mail/access建立的hash类型(如果使用DB数据库—这取决于DATABASE_MAP_TYPE的设置)。DBM数据库不使用type字段。和往常一样,用makemap创建数据库:
# makemap hash /etc/mail/access < /etc/mail/access |
access文件的关键字段可以包含电子邮件地址、用户名、域名或网络编号。
例如:
值的部分必须包含表18.12所示的项之一。取RELAY这个值是最常用的,它只是接受消息,并把它转发给它的最终目的地。OK接受消息,但是不允 许做中继转发。REJECT根本不接受消息。SKIP能让您允许有例外。例如,如果想要中转一个域内除了两台主机之外所有主机的邮件,就可以用SKIP动 作列出这台主机,然后用RELAY动作列出这个域。前后顺序没有关系。
表18.12 访问数据库的值字段中能出现的内容
值 | 作 用 |
OK | 接受邮件并正常投递它 |
RELAY | 按照地址接受邮件并把它中继转发到它的目的地,启动逐个主机的中继转发功能 |
SKIP | 允许普遍规则有例外 |
REJECT | 用一则普通的出错消息拒收邮件 |
DISCARD | 悄悄地丢弃这条消息 |
FRIEND | 用于垃圾邮件,由delay-checks功能使用。如果匹配,跳过其他的信头检查 |
HATER | 用于垃圾邮件,由delay-checks功能使用。如果匹配,应用其他的信头检查 |
xxx message | 返回一条出错信息,xxx必须是RFC 821中规定的数字代码a |
ERROR:xxx message | 同上,但清楚地标出是一则出错消息 |
ERROR:x.x.x message | x.x.x必须是一个遵守RFC1893的投递状态通知(550出错代码的推广) |
a.例如,550是单个错误的代码。
这个数据库文件将允许接收来自okguy@cyberspammer.com的消息,但是拒收其他所有来自cybersammer.com的邮件,并返回预设的错误消息。从sendmail.org或128.32.0.0/16(加州大学伯克利分校的网络)来的邮件将被转发。从badguy@AOL和从任何域的hotlivesex或friend来的邮件将被拒收。
采用冒号分隔形式的IPv6地址也可以用在项的左边,但是必须用“IPv6:”打头。用户名hotlivesex和friend之后的@是必要的,用来把它们同域名加以区别。
550是一个RFC821错误代码。RFC1893错误代码(或者把它们称为“投递状态通知消息”)更为广泛一些。第一个数字是4则表示是个临时性错误;5 则说明它是一个永久性错误。在表18.13中列出了一些错误代码。
表18.13 RFC1893投递状态代码
临 时 错 误 | 永 久 错 误 | 含 义 |
4.2.1 | 5.2.1 | 邮箱被禁用 |
4.2.2 | 5.2.2 | 邮箱已满 |
4.2.3 | 5.2.3 | 消息太长 |
4.2.4 | 5.2.4 | 列表扩展问题 |
4.3.1 | 5.3.1 | 邮件系统已满 |
4.4.4 | 5.4.4 | 不能路由 |
4.4.5 | 5.4.5 | 邮件拥塞 |
4.7.* | 5.7.* | 违反站点政策 |
为了进行更好的控制,关键字字段(左边)可以包含标记Connect,To和From,以及在8.12以后的版本里的Spam,来控制应用过滤器的方式。Connect是指连接信息,比如客户机IP地址或客户机的名字(host-name)。To和From是指信封地址而不是信头地址。Spam标记 通过“垃圾邮件朋友(spamfirend)”和“垃圾邮件憎恨者(spam hater)”测试对全局规则有例外处理。用delay_checks可以启用这一功能。
FEATURE(‘delay_checks', ‘friend') |
如果access_db中有一项和映射关系右边的FRIEND匹配,那么第一个功能就跳过其他可能拒收消息的规则集。如果access_db的值是 HATER,那么第二个功能就施加其他的规则集。这4个标记能够在更细的粒度上控制邮件的中继转发和拒收,它们也可以用来覆盖其他的限制。可以用针对垃圾 邮件的FRIEND或者HATER标记来满足对您在全站范围内的垃圾邮件策略有抱怨的用户。
如果使用了某个标记,那么将先尝试带标记信息查找,然后不带标记信息进行查找,以保持对较老的访问数据库的向后兼容性。
下面是一些例子:
从spammer@some.domain来的邮件将被封锁,但您仍然可以给这个地址发邮件,即使它在黑名单上。邮件将被转发到good.domain,而不能转发从它那里来的邮件(假设已在别处禁止转发)。从good.domain来的连接是允许的,即使它被列在一个基于DNS的拒收名单中。向abuse@localdomain发送邮件可以通过,哪怕是从spammer@some.domain来的发往abuse@localdomain的邮件也可以通过,访问数据库的第一行已经拒收了spammer@some.domain的邮件。
许多站点使用访问数据库来控制垃圾邮件或者做管制。我们在科罗拉多大学计算机科学系的传入邮件主机通过使用access_db功能可以拒收从超过500个已知的发送垃圾邮件者发来的邮件,这些发送垃圾邮件者是根据地址、域或者IP网络识别出来的。
3 把用户或站点列入黑名单
如果希望封锁发往本地用户或主机的邮件,请使用:
FEATURE(‘blacklist_recipients') |
它支持访问文件中以下类型的项:
To:nobody@ 550 Mailbox disabled for this user |
这几行将封锁发给任何主机上的nobody用户、发往主机打印机和某台机器上特定用户地址的传入邮件。使用To:标记能让这些用户发送消息,只是不能接收邮件,有些打印机就有这个能力。
遗憾的是,现在实际上不可能手工维护一个像这样的黑名单。还好,通过DNS可以得到由几个团体维护的黑洞列表,其中有些可以免费提供。
要把DNS风格的黑洞名单包括进来,可以使用dnsb1功能:
FEATURE(‘dnsbl', ‘sbl-xbl.spamhaus.org') |
这项功能使得sendmail拒收来自任何站点的邮件,只要其IP地址被列在“Spamhaus Block List”中,该名单中列出的是已知的垃圾邮件源,在sbl-xbl.spamhaus.org维护。其他列表给已知的通过拨号发送垃圾邮件者和运行开放中继的站点分了类,这些地方都可能成为发垃圾邮件者的天堂。
这些黑名单是通过DNS系统的一种巧妙用法进行发布的,因此起名叫dnsbl。例如,把一个特殊形式的DNS资源记录:
|
放入blackholes.mail-abuse.org域的DNS数据库,那么在启用dnsbl功能时,来自该主机的邮件将被阻塞(因为 sendmail将显示地进行检查,以弄清是否存在这样一条记录)。本例中的IP-address是一个主机地址,它用4个由点号连接的小于255的数字 代表IP地址,其中八位组的顺序是颠倒的。
您可以数次包括dnsbl功能,以检查不同列表中的滥发邮件者:只需添加第二个参数以指定黑名单名字服务器,第3个参数说明您希望返回的错误消息。如果省略第3个参数,返回的固定错误消息将来自包含该记录的DNS数据库。
4 信头检查
发垃圾邮件的人经常会企图隐藏他们的身份。从sendmail 8.9起,如果信封的From地址不是user@valid.domain的形式,那么就会拒收邮件。可以用下面的功能来放弃这种做法:
FEATURE(‘accept_unresolvable_domains') |
这两种功能中的第一种功能可以接受从根本不存在的域或者不能在DNS名字树中解析的域来的邮件。第二个功能允许From地址只有一个用户名,不带主 机或者域名。除非在防火墙的后面,而且那里只能有本地DNS数据,否则就不要使用这两种功能中的任何一种。如果您发现自己想要把这两种功能打开,或许应该代之以考虑一下重新设计sendmail和DNS环境。要求有合法的信封发件人地址,就能大大减少垃圾邮件。
对信头做详细检查是一种强有力的反垃圾邮件机制,它能利用底层的sendmail配置文件语法,我们在这里不会介绍这些语法。通过使用信头检查机制,sendmail就能查看信头内是否有指定的模式存在(例如,“To:friend@public.com”),并且在邮件被投递到用户的邮箱之前拒收它们。
信头检查还可以用于识别电子邮件携带的病毒,它们具有某种有特色的信头行。例如,1999年的Melissa病毒包含的主题行是 “Important Message From…”。在Melissa病毒发布和被识别后的几个小时内,sendmail.com就贴出了一个本地规则集用来辨别和丢弃这种病毒。
当病毒的特征是有特点的、容易用sendmail规则表示的时候,sendmail.com通常会很快(在sendmail.com和sendmail.org网站上同时)贴出它的补丁。
要得到针对垃圾邮件和病毒所用的过滤器规则的代表样本,请参见Eric Allman的个人主机knecht上用的sendmail配置。这项配置作为/cf/cf/knecht.mc包括在sendmail的软件发布中。把 这个垃圾邮件过滤器规则拿过来,并把它们添加到您的.mc文件的末尾。
在查看各个例子时,我们已经看到信头检查规则可用于:
发给域public.com中任何用户的邮件; |
所有的信头检查规则都位于.mc配置文件末尾的LOCAL_CONFIG和LOCAL_RULESETS语句之下。借助于m4的divert命令的帮助,sendmail就知道了把它们放到原始配置文件中的什么位置。
您所实现的减少任何垃圾邮件的措施或多或少都会挡住一些发送垃圾邮件者,同时也提高了其他发送垃圾邮件者的门槛水平。请使用error邮寄程序发出 “user unknown(未知用户)”错误消息而不要使用discard邮寄程序,因为许多发送垃圾邮件者会清理他们的列表。干净的列表会更有价值,所以如果可以拦截垃圾邮件,过滤它并用一则错误消息回复,也许就能从一些列表中被删除。
5 速率和连接限制
sendmail 8.13增加了一个ratecontrol功能,它可以一个主机一个主机地,或者一个网络一个网络地设定限制,限制接受从这些地方来的传入连接的速率。对于无法在不造成问题的前提下彻底封锁垃圾邮件源的地方(像拨号用户比例很高的大型ISP),这项限制特别有助于放慢垃圾邮件的速度。要启用速率控制,可以在.mc文件里加上如下一行:
FEATURE(‘ratecontrol', ‘nodelay', ‘terminate') |
此外,您还必须在/etc/mail/access文件里列出要被控制的主机或者网络及其限制阈值。例如,下面两行:
ClientRate:192.168.6.17 2 |
就限制192.168.6.17和170.65.3.4这两台主机每分钟分别只能有2次和10次新连接。
conncontrol功能对并发连接数做了类似的限制。您可以在.mc文件里用下面这样一行配置启用该功能:
FEATURE(‘conncontrol', ‘no delay', ‘terminate') |
和ratecontrol一样,您可以在/etc/mail/access文件里指定要限制的主机和网络:
ClientConn:192.168.2.8 2 |
上述配置的结果为:限制192.168.2.8的并发连接数为2,175.144.4.1的并发连接数为7,而所有其他主机的并发连接数为10。
6 Slamming
在8.13里的另一项很好的功能是greet_pause。当一个远程的MTA连接到您的sendmail服务器时,SMTP协议要求它要等收到您 服务器的欢迎消息之后才开始通信。不过,发垃圾邮件的程序(和蠕虫/病毒)往往立即就会发一条EHLO/HELO命令。这种现象可以部分解释为发垃圾邮件的工具里的SMTP实现得很差,但也可能是一项替发垃圾邮件的人节省时间的特性。无论其真实原因是什么,这种做法都值得怀疑,并称为 “slamming”。
greet_pause功能让sendmail在开始连接的时候先等上指定的一段时间,再向它新发现的朋友发问候消息。如果远程的MTA没 有等到得到正常的问候,就在这段有意放慢响应的时间内继续发一条EHLO或者HELO命令,那么sendmail就在日志里记下一则出错记录,并且拒绝该 远程MTA后续的命令。
您可以在.mc文件里加上如下一行启用greet_pause功能:
FEATURE(‘greet_pause', ‘700') |
这行配置让每次新连接开始的时候都延迟700毫秒。也可以像connctrol和ratecontrol那样,逐个主机或者逐个网络来设置,不过大多数站点上的这个功能都使用统一的延迟值。
7 邮件过滤
8.12版的sendmail引入了一种对信头过滤机制的推广,能形成一种非常有效的反垃圾邮件工具。它是一个邮件过滤 API(application programming interface,应用编程接口),人们可以使用它来开发他们自己的邮件过滤程序。这些过滤程序位于sendmail和传入消息之间,能够用来识别出病 毒或者垃圾邮件的特征,丢弃它或者对它做日志记录(或者采取您觉得合适的任何操作)。过滤的目标既可以是元数据也可以是消息内容。
邮件过滤(mitering)既有可能成为一种用来反垃圾邮件的强有力工具,也有可能成为侵犯用户隐私的工具。想要准确掌握公司通过电子邮件流传出去了哪些信息的经理们可能会, 成为最早采用这种机制的人。8.12版的sendmail不能将邮件过滤功能用在传出的邮件上,但是它已经列入了“to do”工作表。
邮件过滤库叫做libmilter.sendmail,用INPUT_MAIL_FILTER或者MAIL_FILTER配置指令来调用输入过滤机 制,而用名为MILTER_MACROS_*的选项控制邮件过滤的动作,对SMTP会话的每个阶段所应用的过滤器做细粒度的控制。
例如,下面这一行:
INPUT_MAIL_FILTER(‘filtername', ‘S=mailer:/var/run/filtername.socket') |
会把每个传入的消息通过第二个参数所指定的套接口传给程序/etc/mail/filtername。
参见sendmail软件发布里的libmilter/README或者libmilter/docs目录下的HTML文档可以了解到更多的信息。 README文件对miltering进行了概述,并且给出了一个过滤器的简单例子,它把消息的日志记入一个文件。docs下面的文件介绍了库的接口,并 且说明了如何使用各种调用来构建您自己的邮件过滤程序。
8 处理垃圾邮件
反垃圾邮件也许是一种充满困难和挫折的工作。以往,这样的工作成效不大。即使有成堆的垃圾邮件穿过了您的反垃圾邮件屏障,也不要受找出个别发送垃圾 邮件者的诱惑。花时间分析垃圾邮件信头和为发送垃圾邮件者头疼纯粹是浪费时间。没错,这样做是打胜仗的态度,但是在这些问题上花时间也许并不能减少进入站点的垃圾邮件的数量。
向固定发送垃圾邮件者的ISP举报可以很快抓住他们,但打一枪换一个地方、每个ISP账号只使用一次就放弃的发送垃圾邮件者就很难统计了。如果他们 为某个网站做广告,那么该网站是有责任的;如果它是一个电话号码或邮政地址,就更难找出罪犯了,但也不是不可能。许多流动的发送垃圾邮件者似乎基本上都逃脱了处罚。
各种黑洞列表已经对阻断垃圾邮件起到了一些作用,并极大地减少了开放中继的数目。被列入黑名单会对业务产生严重影响,所以一些ISP和公司会谨慎地控制他们的用户。
我们关于垃圾邮件的主要建议是,请使用预防性措施和可用的公开维护的黑名单。还有另一种可能,把寄到您网点的电子邮件都转寄到一家做外包的反垃圾邮件公司,例如Postini。不过,这么做可能会在性能、隐私或者可靠性上面有一些损失。
告诫您的用户只需删除他们收到的垃圾邮件即可。许多垃圾邮件的消息中包含有收件人如何才能从邮件列表中将自己删除的指示。如果您遵循那些,发送垃圾 邮件者可能把您从当前列表中删除,但他们会立即将您添加到其他的若干个列表,并注明“能到达一个会读到这个消息的真人”。然后您的电子邮件地址甚至会更值 钱。
如果您喜欢加入到反垃圾邮件的阵营中,一些网站可以帮助您。一个好网站是www.abuse.net。另外两个知名的Web站点是spamcop.net和cauce.org。SpamCop有一些工具有助于分析邮件信头,并判断真实的发件人是谁。 cauce.org这个站点上有垃圾邮件相关法规的信息。在美国,您可以让联邦贸易委员会(FederalTrade Commission)提供帮助。
9 SpamAssassin
SpamAssassin是一个过滤器(可以通过sendmail的milter调用它),能高效地识别垃圾邮件。它使用一种积点系统来评估一则消息的错误之处。它能捕获所有真正的垃圾邮件,很少误报。如果一条消息累积的积点太多了(可以全站配置,也可以逐个用户单独配 置),SpamAssassin就给这则消息打个标记。接下来,通过运行一个服务器端过滤器(例如Cyrus的sieve),或者配置您自己的用户代理, 您就可以把可疑的消息送到一个垃圾邮件文件夹里。您甚至能教会SpamAssassin什么是好的消息,什么是坏的消息。在您设置SpamAssassin和调整它的参数时,要仔细检查所有的垃圾邮件。从spamassassin.apache.org可以得到这个软件。
10 SPF和SenderID
反垃圾邮件最好的方法就是从源头堵住它。这听上去容易做起来难。Internet的结构使得难以跟踪消息的来源和验证其身份。人们需要一种着实有效的途径来验证发送邮件的实体名副其实。
许多提案已经解决了这个问题,但是SPF和Sender ID最为行之有效。SPF(或者说Sender Policy Framework,发件人政策框架)现在由IETF确定为标准(RFC 4408)。它定义了一组DNS TXT记录(参考15.7.11节的内容),一家单位可以借助这些记录标识出其“正式的”对外邮件中继。于是,如果电子邮件不是从这些正式来源发出的,那 么MTA就可以拒绝从这家单位的域内发来的任何邮件。当然,只有当大多数单位都公布了SPF记录,这种办法才能取得好的效果。能够下载到几种邮件过滤库(milter),它们在sendmail中实现了这个功能。
Sender ID和SPF从形式和功能上看,实质上是等价的。不过微软掌握了Sender ID关键部分的专利,所以它已经成了一个颇具争议的话题。在撰写本书(英文版)的时候,微软仍然在尝试迫使业界采用它的专有标准。
这篇关于sendmail中与垃圾邮件相关的功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!