我有一个平台组成的许多networking服务器共享虚拟主机。 这些服务器运行Linux和主机Wordpress,osCommerce,Joomla和其他开源网站平台。
每隔一段时间(阅读:每天几次),其中一个站点被拥有,恶意代码被注入,并开始垃圾邮件。
我已经采取了各种措施来防止这种情况发生,但似乎这些攻击越来越多。
因此,我的问题是其他系统pipe理员关心大型共享主机平台:如何过滤(并报告?)从您的Web服务器传出的电子邮件? 例如PHP中的用户使用mail()函数或本地主机SMTP服务器时发送的电子邮件。
您可以设置自己的SMTP服务器,阻止从Web服务器出站的SMTP(和提交)stream量到除SMTP服务器外的任何地方,并强制客户端将其configuration为其出站MTA。 然后,在该SMTP服务器上运行一个垃圾邮件filter(在postfix下的spamassassin可能工作,虽然我会禁用RBLfilter,因为它们将是无用的),并让它放弃任何似乎是垃圾邮件。
这有一些严重的缺陷,例如,你可能会无意中放弃你的一些客户的合法邮件,并且一些垃圾邮件可能仍然会通过。
假设发送垃圾邮件的服务器实际上应该是发送邮件,唯一的办法是防止这种情况发生,那就是保证主机不被占用。 这可能certificate是非常困难的,这取决于您在每个时间点运行的软件版本的可利用性,以及您可以如何轻松地进行修补。
有机会,如果你经常拥有自己的资源,那么你就被一个采用公开漏洞的自动化过程所拥有。 在这种情况下,打补丁可能会大大减less这个问题的发生。
在完美的情况下(不同的网站运行在不同的用户帐户下),您可能可以使用Postfix Policyd 。 它允许您限制和限制每个用户的电子邮件。
如果你使用mod_php并且这些站点都是以同一个Apache用户运行的,那么你将不得不采取不同的方法。
一种方法是通过将mail.add_x_header=1到您的php.ini来激活PHP X-Originating-Script邮件头。 然后把类似qpsmtpd的东西处理外发的电子邮件,并写一个小插件,看看X-Originating-Script头,并将发送脚本path(或只是其用户名部分)存储到数据库,增加发送邮件计数器值每次。 如果该值大于您想要的限制,例如“每小时超过100封电子邮件”,则使脚本返回“对不起,您的外发邮件配额暂时超出”。
创build这些脚本并不难,看看qpsmtpd的例子。 我曾经用Perl做过这个,脚本的总长度大约是100-200行。
不用说,垃圾邮件过滤也是必要的,但我认为你已经有SpamAssassin或类似的地方。