使用 iptables 阻止 PHP 邮件垃圾邮件

haz*_*mat 3 php postfix spam

我托管了一个面向公众的 Web 服务器,运行 Debian Wheezy 和最新版本的 Postfix、Apache、PHP、Spamassassin、ClamAV、rootkit 猎人。Apache 配置了一些虚拟主机,每个虚拟主机都绑定到一个用户并使用 suExec 和 Suhosin 进行保护。这些网站运行 Wordpress 和 ModX,根据平均法则,鉴于这台服务器上的安装数量,至少有 20% 的网站在任何给定时间都会存在某种漏洞,无论是来自 CMS 本身还是来自外部最新的插件。

我收到了来自优秀 MX Toolbox 网站的通知,该网站根据 100 多个黑名单监控 IP 地址。

当我听说我的 IP 地址再次被添加到给定的黑名单时,我立即 ssh 进入,暂停 Postfix

postfix stop
Run Code Online (Sandbox Code Playgroud)

等几秒,查看邮件队列

mailq
Run Code Online (Sandbox Code Playgroud)

从中我可以立即知道垃圾邮件的源用户/虚拟主机,因为所有邮件都来自“random-name@mywebsite.com”,其中“mywebsite.com”是导致问题的虚拟主机上托管的域。

然后我使用优秀的maldet运行手动恶意软件检测扫描,问题消失了。如果我修补网站上所有已知的插件和软件,问题会消失大约 6 个月。如果我不这样做,它会在大约一周内回来。

出于测试目的,我让 Postfix 连续几个月停止运行,但一些木马程序显然绕过了邮件服务器并直接发送邮件。(我从服务器资源监控、黑名单监视和退回到我的域的垃圾邮件退回中知道这一点。更不用说 Postfix mailq 填满了例如 65,000 封未发送的邮件。)

由于我更关心邮件的真实性而不是通过我托管的网站发送电子邮件的能力,因此我采取了许多步骤,即确保我的每个域的 SPF 记录不会将我自己的服务器识别为该域的权威邮件来源. 至少这意味着我的域名不会被自动列入黑名单。

我的问题。有没有一种聪明的方法可以使用 IPTABLES 简单地阻止所有传出的电子邮件?我的意思不仅仅是阻止使用电子邮件服务器 Postfix 发送的邮件,而是所有可能导致我的服务器被列入黑名单的流量?

在我找到解决这个问题的其他方法之前,我不介意禁止网站发送任何邮件。这并不理想,因为我使用一些来生成自己的业务,但同时我可以找到其他解决方案。

wur*_*tel 7

您可以使用简单的规则阻止所有传出的 SMTP 流量:

iptables -I OUTPUT -p tcp --dport 25 -j DROP
Run Code Online (Sandbox Code Playgroud)

您可以将其扩展为仅丢弃www-data用户发送的数据包,这些用户将是运行网站的用户:

iptables -I OUTPUT -p tcp --dport 25 -m owner --uid-owner www-data -j DROP
Run Code Online (Sandbox Code Playgroud)

什么有助于解决您的主要问题(网站首先被感染)是阻止所有不需要的传入端口,以及传出端口,例如端口 80,它通常用于下载额外的 rootkit 等。成立。