我的电脑上有很多未使用的(旧的、死的)帐户。其中许多帐户每天会收到数千封电子邮件,全是垃圾邮件。
如果该帐户被某人使用,我会让电子邮件退回,这样任何试图联系他们的人都会知道出了问题。但是,我不知道该如何处理数百个用于其他目的的帐户,例如我曾经用于要求我提供电子邮件地址的网站的一次性帐户,或者我曾经在网页上列出的地址。
选项 1:
将发往这些账户的所有邮件转发至/dev/null
。发件人不会收到退回邮件。
选项 2:
让电子邮件退回。
发送电子邮件的好处/dev/null
是垃圾邮件发送者无法利用我来生成退回邮件(反向散射垃圾邮件)。即:伪造“发件人”行使其成为他们不喜欢的人,然后利用我向该人发送大量退回邮件。
退回邮件的好处是,对我来说维护工作量较少。我只需从别名文件中删除该项目,电子邮件就会退回。此外,我不断发现新的垃圾邮件陷阱,并将它们添加到我的“垃圾邮件黑洞”列表中,这很浪费时间。
每种方法的优缺点是什么?
答案1
只要您首先拒绝接收邮件并将其退回,垃圾邮件发送者就无法利用您通过大量退回的邮件来骚扰无辜的人。
您可以在命令中返回错误RCPT TO
,这通常是在地址不存在的情况下发生的情况,或者您可以在命令中返回成功RCPT TO
但在末尾返回错误DATA
。
在这两种情况下,最终结果都是一样的。您的邮件服务器对邮件不承担任何责任,而发送邮件服务器现在负责退回邮件。如果是垃圾邮件,则意味着垃圾邮件发送者必须产生退回邮件。(如果他们想这样做,他们甚至可以在一开始就不尝试将邮件发送给您的情况下这样做。)
我认为这种方法没有问题。
但是,我确实发现在接收邮件时存在问题。也就是说,如果您的邮件服务器在整个交易过程中(包括交易结束时)都成功响应DATA
,那么您的邮件服务器就有责任递送邮件。这是一个问题,因为您没有正确的解决方法。
- 默默地丢弃邮件是一个问题,因为如果发送了任何合法邮件,发件人永远不会知道该邮件未被送达。
- 从您的邮件服务器发送退回邮件是有问题的,因为在这种情况下垃圾邮件会退回到一些无辜人的邮箱而不是退回到垃圾邮件发送者。
可能存在这样的情况:电子邮件地址的分发范围一开始就非常有限,以至于您知道不可能有任何合法的邮件发送到该地址。在这种情况下,拒绝命令RCPT TO
或接受邮件并默默丢弃邮件都没有什么区别。但我无法想出在哪种情况下默默丢弃邮件比在 SMTP 事务期间拒绝邮件更好。
答案2
我将使这个答案相当通用,因为术语和配置细节将根据您的特定邮件服务器/垃圾邮件过滤软件而有所不同。
对于无效收件人,实际上有 3 种方法:
在判定收件人无效后,向发件人发回无法送达的消息。
在邮件仍在“飞行中”时关闭 SMTP 连接。发件人的 SMTP 服务器将负责生成无法投递的邮件。
接受消息并默默删除。发送者不知道消息是否被收到。
几乎没有理由再使用方法 1。在发生反向散射攻击的情况下,您的服务器将看起来像垃圾邮件发送者(即使它是无辜的受害者),而您将成为被列入黑名单的人。它还会给您的服务器和上传带宽带来更多负载,因为它必须发送退回消息。
方法 2 普遍优于方法 1。它降低了您的服务器被列入黑名单或被 DoS 攻击的可能性。它并不能消除针对无辜第三方地址的反向散射的可能性,但至少您的服务器不是发送退回邮件的服务器。
方法 3 消除了反向散射的可能性。它还有助于防止目录收集攻击。但是,这也意味着如果外部发件人输错了您的地址,他们永远不会知道。如果有人离开您的公司,而客户试图联系前员工,这也可能是一个问题。
由于担心 DHA,我继承了一个使用方法 3 的电子邮件系统。它带来的麻烦比它本身的价值要多。我们现在使用方法 2。(请注意,还有其他方法可以缓解 DHA。)
答案3
如果您的电子邮件服务器配置正确,您应该在 SMTP 交易期间拒绝向未知用户发送的电子邮件。
在 SMTP 事务期间拒绝电子邮件
您的服务器应配置为在 SMTP 事务阶段拒绝向未知用户发送电子邮件。这样做会向发送服务器返回 550 SMTP 错误代码。由于这种情况发生在 SMTP 事务期间,因此您的服务器永远不会发送未送达报告(又称退回)。
正确配置后,这可以防止反向散射,因为拒绝会直接发送到发送服务器,而其他电子邮件标头将被忽略。
好处
这种方法的好处是,您可以在 SMTP 交易过程中很快拒绝电子邮件。这可能意味着:
- 降低服务器的资源利用率,尤其是在所有电子邮件被接受后都发送进行处理(病毒/av 过滤)的情况下。
- 发件人通常会从列表中删除这些电子邮件地址,以防止被列入黑名单。
考虑一下,如果您将电子邮件路由为空,发送服务器会认为邮件已成功发送。他们没有理由停止向这些无效的地址发送电子邮件。因此,随着这些旧地址的堆积,您需要越来越多的服务器资源来处理电子邮件。
要实现这一点,您只需从电子邮件系统中删除用户即可。如果您需要当前电子邮件的备份,那也没问题,您只需让您的服务器发送响应即可550 user unknown
。