php - 如何限制从 PHP 发送的出站 SMTP 邮件

标签 php email smtp iis-6 fastcgi

我们有共享托管服务器,它为多个客户端(共享托管)使用 PHP fastcgi(在 IIS 上)。客户经常使用旧的可利用代码,这会导致他们的应用程序出现漏洞,最终被黑客用来安装恶意代码。大多数时候,此代码用于从我们的服务器发送垃圾邮件。

我们无法控制我们的客户代码,因此修补这些漏洞是完全不可能的。

但是,一旦客户在 Y 时间内发送了超过 X 封电子邮件,我们希望阻止他们发送垃圾邮件。

设置是基于fastcgi的,所以php和网络服务器之间的关系不大。 PHP 通过本地主机上的 SMTP 发送邮件。邮件服务器允许中继所有本地主机连接(显然)。

我想到的一件事是在 fastcgi 环境中设置一个包含标识符的环境变量,并使用 php 的前置文件选项为 php 的邮件程序发送的所有邮件添加一个标题。之后,我们可以使用该邮件 header 来识别垃圾邮件的罪魁祸首。

上面的选项在发送电子邮件时仍然无法处理使用常规 telnet(telnet localhost、HELO、MAIL FROM 等...)的垃圾邮件脚本。

我的问题是:我提到的想法是处理我们的问题的最佳且可能是唯一的选择吗?或者对于这种情况有更好的解决方案吗?如果是,请说明您将如何处理该问题。

最佳答案

您可以在 MTA(邮件传输代理)上对其进行过滤。例如,在 Exim ( http://www.exim.org ) 配置文件 (/etc/exim/exim.conf) 中允许每个用户在 1 小时内不超过 50 封电子邮件:

begin acl

acl_check_not_smtp:
warn ratelimit = 0 / 1h / strict / $sender_address_local_part
log_message = Sender rate $sender_rate / $sender_rate_perio

acl_not_smtp = acl_not_smtp
begin acl
acl_not_smtp:
        deny message = Sender rate overlimit - $sender_rate / $sender_rate_period
        ratelimit = 50 / 1h / strict
        accept

并且无论他们如何尝试通过 php mail() 或其他方法发送。

关于php - 如何限制从 PHP 发送的出站 SMTP 邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17216575/

相关文章:

jquery - 我想在用户输入 @ 时启用 jquery 自动完成

php - 通过 SMTP 使用 Codeigniter 3.0.3 发送电子邮件

smtp - GMail授权登录SMTP身份验证

codeigniter - CodeIgniter 上的 SMTP 显示成功,但电子邮件未发送到 Gmail 帐户

php - 当我只有父级的父级文本时如何获取 TreeView 项目的 id

php:在数组中查找变量字符

php - 上传文件 - Android 到 Google App Engine (PHP)

php - PHP 准备语句中的问号不起作用?

c - 尝试使用 C 程序通过 SMTP 与电子邮件服务器通信

jquery - 检查联系表单中电子邮件地址的格式