使用 sendmail 阻止传入垃圾邮件

使用 sendmail 阻止传入垃圾邮件

我遇到了一个问题,因为一位“聪明”的系统管理员在我离开两个月时做出了一些选择:垃圾邮件。

我管理着大约 10,000 个网站/邮件站点。他决定允许所有发往这些域的邮件在用户不存在时转到 /dev/null,而不是将其退回。在某些情况下这样做是可以的,但问题是,对于未知用户,它会显示收件人 OK,这会让垃圾邮件发送者认为他们击中的是有效地址。

所以,综上所述,我现在看到大量垃圾邮件试图进入所有这些网站,而我无法找到逐个服务器的解决方案。

现在他们又回到了用户未知的状态,因此由于实际内容没有被传送,网络带宽下降了相当多,但是由于邮件仍然发送给我,因此我在每封邮件的 DNS 查找以及我的初始退回上损失了大量带宽。这似乎不会花费太多时间,但对于我们讨论的网站数量来说,这相对来说是相当可观的。

我在 CentOS 5 上使用 sendmail。我对机器有完全的 root 访问权限,并且我对核心路由器上的 IPTables、tcpdump、内核修改、sendmail 修改以及访问列表等非常熟悉。

问题是,该公司尚未购买全球反垃圾邮件服务。理想情况下,如果有一种方法可以配置 sendmail,使其在向未知用户发送邮件时不进行 DNS 查找,这将是一个开始。

答案1

我假设带宽就是您面临的问题,也是您正在寻找的解决方案。如果有其他问题,请纠正我。

这一切都在一个同质内部网络中,还是一堆独立的站点/数据中心?我想知道运行自己的缓存 DNS 解析器以减少 DNS 查找造成的带宽是否可行。如果不是所有邮件服务器的中央缓存服务器,也许所有站点的本地缓存名称服务器都是可行的。

另一个计划是阻止防火墙上的任何 IP 地址访问端口 25,因为该端口已导致超过 90% 的未知用户响应(至少 10 次发送尝试)。 您可以使用 fail2ban 来实现此目的

您能减少退回邮件的大小吗?


您应该做的其他事情:

  • 开始测量。看看您是否可以测量由于垃圾邮件而“浪费”了多少带宽,以及在 SMTP 对话的哪个阶段发生这种情况。DNS 查找贡献了多少?HELO 贡献了多少?标头贡献了多少?退回邮件贡献了多少?所有这些带宽要花多少钱?

  • 获取垃圾邮件过滤服务。一旦您知道带宽成本是多少以及如果没有垃圾邮件应该减少多少带宽,您就可以证明垃圾邮件过滤服务的成本是合理的。如果您已经测量了带宽并且无法再减少带宽,那么您无论如何都要付费。更改付费对象,然后将另一个问题放入“已修复”堆中。

答案2

1)添加灰名单

2)添加 spamhaus

3)在sendmail.mc中添加各种xxxx_delay_xxx magros

4)添加

FEATURE(`greet_pause',`5000')dnl
define(`confBAD_RCPT_THROTTLE',`2')dnl

发送至 sendmail.mc

所有这些都将对限制垃圾邮件的目标大有裨益。

答案3

Sendmail 无论如何都会执行反向 DNS 查找。您是否考虑过拒绝来自缺少封闭反向 DNS 循环的主机的消息?

警告:sendmail.org 提供的FEATURE(require_rdns)行为DNSBL 检查。您可以使用 open-sendmail.sourceforge.net 提供的变体。

可以使用本地服务的 IP->国家 DNS 映射(例如 zz.countries.nerd.dk)和 open-sendmail.sourceforge.net 提供的“FEATURE(anfi/rsdnsbl)”来限制每个国家/地区的上述检查。

另一个回复中提到的PSFEATURE(greet_pause,...)值得考虑。

答案4

首先,Sendmail 用于发送电子邮件,而不是接收。垃圾邮件是从您的服务器发送的还是发送到您的服务器的?听起来垃圾邮件是发送到您的服务器的。如果是这样,Sendmail 与此无关。

我有一个简单的建议:实施一些公共黑名单,例如 Spamcop、Spamhaus 和 Barracuda。以下是我在 Postfix 中的配置方式:

smtpd_recipient_restrictions =
        permit_sasl_authenticated,
        reject_rbl_client zen.spamhaus.org,
        reject_rbl_client bl.spamcop.net,
        reject_rbl_client b.barracudacentral.org,
        reject_unauth_destination,
        permit_mynetworks,
        reject_invalid_hostname,
        permit

当然,达到一定数量后(我不确定阈值是多少),他们就会开始切断你的联系,或者要求你支付一些钱。不过,我认为,在你达到那个点之前,你的数量已经足够了。

相关内容