这是一个关于打击垃圾邮件的典型问题 。
还相关:
- 如何阻止用户使用我的域名发送垃圾邮件?
- 什么是SPFlogging,我如何configuration它们?
有太多的技术和太多了解打击垃圾邮件。 pipe理员,域名所有者和最终用户可以使用哪些广泛使用的技术和技术来帮助防止垃圾邮件进入我们的收件箱?
我们正在寻找涵盖不同技术的答案。 接受的答案应该包括各种技术(如SPF / SenderID,DomainKeys / DKIM,Graylisting,DNS RBLs,信誉服务,过滤软件[SpamAssassin等]); 最好的做法(例如25号邮箱绝不允许中继,587号应该使用等),术语(例如开放中继,反向散射,MSA / MTA / MUA,垃圾邮件/火腿)以及其他可能的技术。
要打败你的敌人,你必须知道你的敌人。
就我们的目的而言,垃圾邮件是任何未经请求的大量电子邮件。 垃圾邮件这些天是为了引诱毫无戒心的用户访问一个(通常是阴暗的)网站,在那里他们将被要求购买产品,或者有恶意软件传送到他们的电脑,或两者兼而有之。 有些垃圾邮件会直接传送恶意软件。
你可能会惊讶的发现,第一批垃圾邮件是在1864年发出的。 这是一个通过西联电报发出的牙科服务广告。 这个词本身就是对 “巨蟒飞行马戏团”中一个场景的引用 。
在这种情况下,垃圾邮件并不是指用户订阅的邮件列表stream量,即使他们以后改变主意(或者忘记了)但是还没有实际取消订阅。
垃圾邮件是一个问题,因为它适用于垃圾邮件发送者 。 垃圾邮件通常会产生足够多的销售(或恶意软件交付,或两者兼而有之),以弥补垃圾邮件发送者的成本 。 垃圾邮件发送者不会考虑收件人,您和您的用户的成本。 即使只有极less数接收垃圾邮件的用户回应,也足够了。
因此,您需要支付带宽,服务器和pipe理员时间的账单来处理传入的垃圾邮件。
我们根据以下原因阻止垃圾邮件:我们不希望看到垃圾邮件,降低我们处理电子邮件的成本,并使垃圾邮件发送者的垃圾邮件成本更高。
垃圾邮件通常以不同于正常的合法电子邮件的方式发送。
垃圾邮件发送者几乎总是要掩盖电子邮件的来源,所以一个典型的垃圾邮件将包含假头信息。 From:
地址通常是假的。 一些垃圾邮件包括伪造Received:
线路,试图掩饰踪迹。 大量的垃圾邮件是通过开放的SMTP中继,开放的代理服务器和僵尸networking提供的。 所有这些方法都使得确定谁发起垃圾邮件更加困难。
一旦进入用户的收件箱,垃圾邮件的目的就是诱使用户访问广告的网站。 在那里,用户将被诱惑进行购买,或者该网站将尝试在用户的计算机上安装恶意软件,或者两者兼而有之。 或者,垃圾邮件会要求用户打开包含恶意软件的附件。
作为邮件服务器的系统pipe理员,您将configuration您的邮件服务器和域名,使垃圾邮件发送者更难将垃圾邮件发送给您的用户。
我将讨论专门针对垃圾邮件的问题,并可能跳过与垃圾邮件没有直接关系的内容(如encryption)。
大邮件服务器的罪行是运行一个开放的中继 ,一个SMTP服务器,它将接收任何目的地的邮件并将其传送。 垃圾邮件发送者喜欢开放式继电器,因为它们几乎能保证交付 当垃圾邮件发送者做其他事情时,他们承担传递邮件的负担(并重试!)。 他们使垃圾邮件便宜 。
开放式继电器也有助于散射问题。 这些邮件是被接力邮件接受的,但却无法传递。 然后,开放中继将发送退回消息到From:
地址,其中包含垃圾邮件的副本。
From:
和To:
地址不在您的域内。 该消息应该被拒绝。 (或者,使用MX Toolbox等在线服务来执行testing,但请注意,如果您的邮件服务器未通过testing,则某些在线服务会将您的IP地址提交给黑名单。) 各种错误configuration和错误可能是传入消息可能是垃圾邮件或其他非法的提示。
HELO
/ EHLO
。 HELO
/ EHLO
所在的连接:
邮件到达您的服务器应考虑入站邮件和出站邮件。 入站邮件是到达您的SMTP服务器的任何邮件,最终将发往您的域名; 出站邮件是到达您的SMTP服务器的任何邮件,在发送之前它们将被传送到其他地方(例如,它将到达另一个域)。 入站邮件可以由您的垃圾邮件filter处理,可能来自任何地方,但必须始终注定您的用户。 此邮件无法进行身份validation,因为无法向可能向您发送邮件的每个站点都提供凭据。
出站邮件,即将被中继的邮件, 必须经过authentication。 无论是来自互联网还是来自您的networking,都是这种情况(尽pipe如果操作上可行的话,您应该限制允许使用邮件服务器的IP地址范围)。 这是因为垃圾邮件可能在您的networking中运行。 因此,configuration您的SMTP服务器,以便邮件绑定到其他networking将被删除(中继访问将被拒绝),除非该邮件进行身份validation。 更好的是,对入站和出站邮件使用单独的邮件服务器,根本不允许中继入站邮件,并且不允许对出站邮件进行未经validation的访问。
如果您的软件允许这样做,您还应该根据经过身份validation的用户过滤消息; 如果邮件的发件人地址与authentication的用户不符,则应拒绝。 不要静静地更新发件人地址; 用户应该知道configuration错误。
您还应该logging用于发送邮件的用户名,或者添加一个标识标题。 这样,如果发生滥用行为,您就有证据,并知道用哪个账户来做这件事。 这使您可以隔离受损的帐户和问题用户,并且对共享主机提供商尤其重要。
您希望确定邮件离开您的networking实际上是由您的(经过身份validation的)用户发送的,而不是由机器人或外部人员发送的。 你如何做到这一点的具体情况取决于你正在pipe理什么样的系统。
通常情况下,如果您是公司networking,则阻止端口25,465和587(SMTP,SMTP / SSL和提交)上的出站stream量,而不是出站邮件服务器。 这样,您的networking上运行恶意软件的僵尸程序就无法从networking发送垃圾邮件,以便在Internet上打开中继或直接向最终的MTA发送地址。
热点是一种特殊情况,因为它们的合法邮件来自许多不同的域,但是(由于SPF等原因)“强制”的邮件服务器不合适,用户应该使用自己的域名的SMTP服务器来提交邮件。 这种情况要困难得多,但是对这些主机的Internetstream量使用特定的公有IP或IP范围(以保护站点的声誉),限制SMTPstream量以及深度数据包检查都是需要考虑的解决scheme。
过去,垃圾邮件主要是在端口25上发布垃圾邮件,但是没有任何东西阻止他们为了同一目的而使用端口587,所以更改入站邮件所使用的端口具有可疑价值。 但是, RFC 2476build议使用端口587来提交邮件,并允许将邮件提交(对第一个MTA)和邮件传输(在MTA之间)从networking拓扑中明显分开; 如果你需要这样的分离,你应该这样做。
如果您是ISP,VPS主机,主机代pipe服务提供商或类似服务提供热点供访问者使用,阻止出口SMTPstream量对使用自己的域名发送邮件的用户可能会产生问题。 在公共热点以外的所有情况下,您都应该要求需要出站SMTP访问的用户,因为他们正在运行邮件服务器来专门请求。 让他们知道,滥用投诉将最终导致访问被终止,以保护您的声誉。
dynamicIP以及那些用于虚拟桌面基础架构的IP不应具有出站SMTP访问,除非这些节点预期使用特定的邮件服务器。 这些types的IP也应该出现在黑名单上,你不应该试图为他们build立声誉。 这是因为他们极不可能运行合法的MTA。
SpamAssassin是一个邮件filter,可用于根据邮件标题和内容识别垃圾邮件。 它使用基于规则的评分系统来确定邮件是垃圾邮件的可能性。 分数越高,消息越可能是垃圾邮件。
SpamAssassin还有一个贝叶斯引擎,可以分析反馈给它的垃圾邮件和火腿(合法邮件)样本。
SpamAssassin的最佳做法不是拒绝邮件,而是将其放入“垃圾邮件”或“垃圾邮件”文件夹中。 可以将Outlook和Thunderbird等MUA(邮件用户代理)设置为识别SpamAssassin向电子邮件添加的标头,并将其正确归档。 虚假的肯定是可以发生的,虽然很less发生,但首席执行官遇到这种情况时,你会听到这个消息。 如果邮件只是简单地传送到“垃圾邮件”文件夹,而不是直接拒绝,那么这个对话就会变得更好。
SpamAssassin几乎是独一无二的,尽pipe存在一些替代品 。
sa-update
为其规则configuration自动sa-update
。 DNSBL(以前称为RBL或实时黑洞列表)提供了与垃圾邮件或其他恶意活动相关的IP地址列表。 这些由独立的第三方根据他们自己的标准运行,因此仔细研究DNSBL使用的列表和除名标准是否与您的组织需要接收电子邮件兼容。 例如,一些DNSBL有严厉的退市政策,这使得意外上市的人很难被移除。 其他人在IP地址没有发送垃圾邮件一段时间后自动退出,这样更安全。 大多数DNSBL是免费使用的。
声誉服务是相似的,但声称通过分析更多与任何给定的IP地址相关的数据来提供更好的结果。 大多数信誉服务需要订阅付款或硬件购买或两者兼而有之。
有几十个DNSBL和信誉服务可用,虽然我使用和推荐的一些更好的已知和有用的服务是:
保守名单:
积极的名单:
如前所述,许多其他人可用,可能适合您的需求。 我最喜欢的技巧之一是查找传递了一个垃圾邮件,通过反对多个DNSBL 的IP地址 ,看看他们哪些人会拒绝它。
SPF(发件人策略框架; RFC 4408和RFC 6652 )是一种通过声明哪些Internet主机被授权为给定的域名提供邮件来防止电子邮件地址欺骗的手段。
-all
拒绝所有其他的。 DKIM(DomainKeys Identified Mail; RFC 6376 )是在邮件消息中embedded数字签名的一种方法,可以使用DNS中公开的密钥进行validation。 它在美国已经被专利侵占 ,而且已经放慢了采用速度。 如果邮件在传输过程中被修改(例如,SMTP服务器有时可能会重新包装MIME邮件),DKIM签名也会中断。
灰名单是SMTP服务器暂时拒绝传入消息而不是永久拒绝的技术。 在几分钟或几小时内重新投递时,SMTP服务器将接受该消息。
灰名单可以阻止一些垃圾邮件软件,这种软件不足以区分临时性和永久性拒绝,但对于发送到开放式中继或具有更强大的垃圾邮件软件的垃圾邮件没有任何帮助。 它还引入了用户可能不总是容忍的交付延迟。
Nolisting是一种configurationMXlogging的方法,使得最高优先级(最低优先级编号)logging没有正在运行的SMTP服务器。 这取决于很多垃圾邮件软件只会尝试第一个MXlogging,而合法的SMTP服务器则会按照首选项的升序尝试所有MXlogging。 一些垃圾邮件软件也会尝试直接发送违反RFC 5321的最低优先级(最高首选号码)MXlogging,因此也可以将其设置为不包含SMTP服务器的IP地址。 据报道这是安全的,尽pipe如此,你应该首先仔细testing。
将垃圾邮件过滤设备(例如Cisco IronPort或梭子鱼垃圾邮件和病毒防火墙 (或其他类似设备))放在现有的SMTP服务器前面,以减less收到的垃圾邮件。 这些设备预先configuration了DNSBL,信誉服务,贝叶斯filter以及其他function,并且由其制造商定期更新。
如果这对您(或您的IT工作人员过度劳累)太过分了,您可以随时让第三方服务提供商为您处理您的电子邮件。 诸如Google Postini , Symantec MessageLabs Email Security (或其他)的服务将为您过滤消息。 其中一些服务还可以处理法规和法律要求。
最终用户应该对付垃圾邮件的绝对#1是:
不要回应垃圾邮件。
如果看起来有趣,请不要点击网站链接,也不要打开附件。 无论这个提议看起来多么有吸引力。 那伟哥并不是那么便宜,你不可能得到任何人的裸体照片, 尼日利亚或其他地方没有一千五百万美元的钱,除了那些对垃圾邮件做出回应的人的钱。
如果您看到垃圾邮件,请根据您的邮件客户端将其标记为垃圾邮件或垃圾邮件。
如果您实际注册接收邮件并只想停止接收邮件, 请勿将邮件标记为垃圾邮件/垃圾邮件。 而是使用提供的取消订阅方法退订邮件列表。
定期检查您的垃圾邮件文件夹,看是否有合法的邮件通过。 将它们标记为“不垃圾/不垃圾”,并将发件人添加到联系人,以防止他们的邮件将来被标记为垃圾邮件。
多年来,我pipe理了超过100个独立的邮件环境,并使用大量stream程来减less或帮助消除垃圾邮件。
随着时间的推移,技术也在不断发展,所以这个答案将贯穿我过去试过的一些事情,并详细说明当前的事态。
关于保护的一些想法…
关于传入的垃圾邮件…
我目前的做法:
我是一个基于设备的垃圾邮件解决scheme的倡导者。 我想拒绝在networking的周边,并在邮件服务器级别保存CPU周期。 使用设备还提供了一些与实际邮件服务器(邮件传送代理)解决scheme无关的独立function。
我推荐梭子鱼垃圾邮件过滤设备的原因有很多。 我已经部署了几十个单元,而networking驱动的界面,行业思维共享和“一尘不染”的设备性质使其成为赢家。 后端技术结合了上面列出的许多技术。
梭子鱼垃圾邮件和病毒防火墙300状态控制台
较新的方法:
在过去的一个月里,我一直在试用梭子鱼基于云的电子邮件安全服务 。 这与其他托pipe的解决scheme类似,但非常适合小型站点,而昂贵的设备成本高昂。 对于象征性的年费,这项服务提供了硬件设备85%左右的function。 该服务还可以与现场设备一起运行,以减lessinput带宽并提供另一层安全性。 这也是一个很好的缓冲区,可以在发生服务器中断的情况下后台处理邮件。 分析仍然是有用的,虽然不如物理单元详细。
梭子鱼云电子邮件安全控制台
总而言之,我已经尝试了很多解决scheme,但是考虑到某些环境的规模以及用户群不断增长的需求,我想要最优雅的解决scheme。 采取多pipe齐下的方法,“自己动手”是可能的,但是我已经做好了对Barracuda设备的一些基本的安全和良好的使用监控。 用户对结果非常满意。
注意: 思科Ironport是伟大的…只是更加昂贵。
部分,我赞同别人的话。 部分,我不知道。
这对我来说效果很好,但是你需要花费一些时间训练贝叶斯filter,包括火腿和垃圾邮件 。
ewwhite可能会感觉到它的一天已经来临,但我不能同意。 我的一位客户问我的各种filter效果如何,所以这里是我的个人邮件服务器2012年7月的近似统计数据:
所以大约44000从来没有通过灰名单, 如果我没有灰名单,并接受了所有这些,他们将有所有需要的垃圾邮件过滤,所有使用CPU和内存,并确实带宽。
编辑 :因为这个答案似乎对一些人有用,我想我会把统计数据更新。 所以我从二零一五年一月,二年半以后重新进行邮件日志的分析。
这些数字并不能直接比较,因为我不再logging2012年的数字,所以我不能确定这些方法是否相同。 但是我有信心,当时我并不需要在很多内容上运行计算成本很高的垃圾邮件过滤,而且由于灰名单,我还是没有。
这不是一个真正的反垃圾邮件技术,但它可以减less你必须处理的后向散射量,如果你是乔工作的话。 您应该使用它进出,即:您应该检查发件人的SPFlogging收到电子邮件,并相应地接受/拒绝。 你也应该发布你自己的SPFlogging,完整列出所有批准发送邮件的机器,并用-all
locking所有其他机器 。 不以-all
结尾的SPFlogging完全没有用处。
RBL是有问题的,因为一个人可以通过自己的错误来获得他们,他们可以很难下车。 尽pipe如此,他们在垃圾邮件斗争中也有合法的用途,但是我强烈build议不要将RBL用作邮件验收的明线testing 。 spamassassin处理RBL的方式 – 通过使用许多,每个都有助于总分,而这个分数使得接受/拒绝的决定更好。
我不是指商业服务,我的意思是说我的邮件服务器有一个地址,它可以切断我所有的灰名单和垃圾邮件过滤,但是不是传递给任何人的INBOX,而是到/var
的世界可写文件夹,每天超过14天的电子邮件会自动剪除。
我鼓励所有用户充分利用它,例如填写需要可validation电子邮件地址的电子邮件表单,您将收到一封您需要保留的电子邮件,但您不希望再次收到的电子邮件或购买时来自网上供应商谁可能出售和/或垃圾邮件的地址(尤其是那些欧洲隐私法的范围之外)。 用户可以给出收件箱的地址,而不是给她真实的地址,只有当她期望通讯员(通常是一台机器)的东西时,才可以在收存箱中查看。 当它到达时,她可以把它拿出来,并保存在她正确的邮件收集。 没有用户需要在其他时间看保pipe箱。
我正在使用一些将垃圾邮件降低到可接受水平的技术。
延迟接受来自错误configuration的服务器的连接。 我收到的垃圾邮件大部分来自Spambots在恶意软件感染系统上运行。 几乎所有这些都不能通过rDNSvalidation。 延迟30秒左右之后,每次回复都会导致大部分Spambots在放弃信息之前放弃。 只应用于rDNS失败的服务器可以避免惩罚正确configuration的服务器。 某些configuration不正确的合法批量或自动发件人会受到处罚,但交付时间最短。
Configuring SPF for all your domains protects your domains. Most sub-domains should not be used to send email. The main exception is MX domains which must be able to send mail on their own. A number of legitimate senders delegate bulk and automated mail to servers that are not permitted by their policy. Deferring rather than rejecting based on SPF allow them to fix their SPF configuration, or you to whitelist them.
Requiring a FQDN (Fully Qualified Domain Name) in the HELO/EHLO command. Spam often uses an unqualified hostname, address literals, ip addresses, or invalid TLD (Top Level Domain). Unfortunately some legitimate senders use invalid TLDs so it may be more appropriate to defer in this case. This can require monitoring and whitelisting to enable the mail through.
DKIM helps with non-repudiation, but is otherwise not highly useful. My experience is that Spam is not likely to be signed. Ham is more likely to be signed so it has some value in Spam scoring. A number of legitimate senders don't publish their public keys, or otherwise improperly configure their system.
Greylisting is helpful for servers which show some signs of misconfiguration. Servers that are properly configured will get through eventually, so I tend to exclude them from greylisting. It is useful to greylist freemailers as they do tend to be used occasionally for Spam. The delay gives some of the Spam filter inputs time to catch the Spammer. It also tends to deflect Spambots as they usually don't retry.
Blacklists and Whitelists can help as well.
Spam filtering software is reasonably good at finding Spam although some will get through. It can be tricky getting the false negative to a reasonable level without increasing the false positive too much. I find Spamassassin catches most of the Spam that reaches it. I've added a few custom rules, that fit my needs.
Postmasters should configure the required abuse and postmaster addresses. Acknowledge the feedback you get to these addresses and act on it. This allows other to help you ensure your server is properly configured and not originating Spam.
If you are a developer, use the existing email services rather than setting up your own server. It is my experience that servers setup for automated mail senders are likely to be incorrectly configured. Review the RFCs and send properly formatted email from a legitimate address in your domain.
End users can do a number of things to help reduce Spam:
Domain owners / ISPs can help by limiting Internet access on port 25 (SMTP) to official e-mail servers. This will limit the ability of Spambots to send to the Internet. It also helps when dynamic addresses return names which do not pass rDNS validation. Even better is to verify the PTR record for mail servers do pass rDNS valiation. (Verify for typographical errors when configuring PTR records for your clients.)
I have started classifying email in three categories:
The SINGLE most effective solution I have seen is to use one of the external mail filtering services.
I have experience with the following services at current clients. I am sure there are others. Each of these has done an excellent job in my experience. The cost is reasonable for all three.
The services have several huge advantages over local solutions.
They stop most (>99%) of the spam BEFORE it hits your internet connection and your email server. Given the volume of spam, this is a lot of data not on your bandwidth and not on your server. I have implemented one of these services a dozen times and every one resulted in a noticeable performance improvement to the email server.
They also do anti-virus filtering, typically both directions. This mitigates the need to have a "mail anti-virus" solution on your server, and also keeps the virii completely
They also do a great job at blocking spam. In 2 years working at a company using MXLogic, I have never has a false positive, and can count the legit spam messages that got through on one hand.
No two mail environments are the same. So building an effective solution will require a lot of trial and error around the many different techniques available because the content of email, traffic, software, networks, senders, recipients and a lot more will all vary hugely across different environments.
However I find the following block lists (RBLs) to be well suited for general filtering:
As already stated SpamAssassin is a great solution when configured correctly, just make sure to install as many of the addon Perl modules in CPAN as possible as well as Razor, Pyzor and DCC. Postfix works very well with SpamAssassin and it's a lot easier to manage and configure than EXIM for example.
Finally blocking clients at IP level using fail2ban and iptables or similar for short periods of time (say one day to a week) after some events such as triggering a hit on an RBL for abusive behavior can also be very effective. Why waste resources talking to a known virus infected host right?