如何限制 PHP5/Apache 仅向本地用户发送邮件

如何限制 PHP5/Apache 仅向本地用户发送邮件

我需要一些帮助。我正在运行最新的稳定版 Ubuntu,它托管 Apache/PHP5 并发送电子邮件。我为其他用户托管一些 WordPress 网站,几个月来一直在与攻击者作战,这些攻击者在目录中发现不良权限并利用此上传 php 脚本通过服务器发送垃圾邮件。

我当然正在采取措施自动化 WordPress 的安全性,但也想消除 PHP5/Apache 向任何无法本地送达的地址发送邮件的能力。

我正在配置一台新服务器来执行此操作。我将运行最新版本的 MailScanner,并选择 Sendmail 或 Postfix。这将专门针对锁定 wwwdata 用户,使其只能在本地发送。

我已经设置了 PHP5 邮件日志,但需要更进一步,因为当垃圾邮件开始涌入时,我的托管服务提供商会采取严厉措施。到目前为止,我还没有通过 Google 找到任何答案。到目前为止,我唯一找到的方法是禁用 PHP 的邮件功能,或者记录、审查、防火墙 IP 并删除有问题的脚本。任何帮助都非常感谢。

答案1

该答案假设使用 postfix mta。

在 php.ini 中添加:

mail.add_x_header = 1

在 /etc/main.cf 添加:

header_checks = pcre:/etc/postfix/header_checks.pcre

/etc/postfix/header_checks.pcre 的内容

if /X-PHP-Originating-Script.*/
!/To:[a-zA-Z0-9._%+-]+(@(localdomain1.com|localdomain2.com))?$/ REJECT PHP Mail is only allowed to submit mail for local delivery.
endif

此处使用的正则表达式涵盖电子邮件地址本地部分中常用的字符,但并不涵盖 RFC、YMMV 规定的每个有效字符。

相关内容