如何正确过滤外发电子邮件?

如何正确过滤外发电子邮件?

我有一个由许多 Web 服务器组成的平台,用于共享 Web 托管。这些服务器运行 Linux,并托管大量 Wordpress、osCommerce、Joomla 和其他开源网站平台。

时不时地(读作:每天几次)其中一个站点被控制,恶意代码被注入并且垃圾邮件开始。

我已经采取了各种措施来防止这种情况,但这些攻击似乎越来越升级。

因此,我的问题是针对其他负责大型共享托管平台的系统管理员:您如何过滤(和报告?)从您的 Web 服务器发出的电子邮件?当用户(例如 PHP 用户)使用 mail() 函数或本地主机 SMTP 服务器时发送的电子邮件。

答案1

您可以设置自己的 SMTP 服务器,阻止从 Web 服务器到除该 SMTP 服务器之外的任何位置的 SMTP(和提交)流量,并强制您的客户将其配置为其出站 MTA。然后,在该 SMTP 服务器上运行垃圾邮件过滤器(postfix 下的 spamassassin 可能会起作用,但我会禁用 RBL 过滤器,因为它们毫无用处),并让它丢弃任何看似垃圾邮件的内容。

这有许多严重的缺点,比如您可能会无意中悄悄丢弃一些客户的合法邮件,而且一些垃圾邮件可能仍会通过。

假设发送垃圾邮件的服务器实际上应该发送邮件,那么阻止这种情况的唯一方法是保护主机,使其不被控制。这可能非常困难,具体取决于您在每个点运行的软件版本的可利用性以及修补的难易程度。

如果您经常被攻击,则很有可能是被利用公开漏洞的自动化进程攻击了。在这种情况下,修补可能会大大减少此问题的发生率。

答案2

在理想情况下(不同的网站在不同的用户账户下运行),你也许可以使用Postfix 策略. 它允许您根据每个用户限制和限制电子邮件。

如果您使用mod_php并且所有站点都以同一个 Apache 用户身份运行,那么您将必须采用不同的方法。

一种方法是将 PHPX-Originating-Script邮件标头放入mail.add_x_header=1php.ini 中以激活该功能。然后输入类似qpsmtpd处理外发电子邮件并编写一个小插件,该插件查看X-Originating-Script标题并将发送脚本路径(或只是其中的用户名部分)存储到数据库中,每次增加发送邮件计数器的值。如果该值大于您想要的限制,例如“每小时超过 100 封电子邮件”,则让脚本返回“抱歉,您的外发邮件配额暂时超出”。

创建这些脚本并不难,看看 qpsmtpd 示例。我曾经用 Perl 做过这个,脚本的总长度大约为 100-200 行。

而且,不用说,还需要垃圾邮件过滤,但我认为您已经安装了 SpamAssassin 或类似软件。

相关内容