![如何限制 PHP5/Apache 仅向本地用户发送邮件](https://linux22.com/image/666375/%E5%A6%82%E4%BD%95%E9%99%90%E5%88%B6%20PHP5%2FApache%20%E4%BB%85%E5%90%91%E6%9C%AC%E5%9C%B0%E7%94%A8%E6%88%B7%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6.png)
我需要一些帮助。我正在运行最新的稳定版 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 规定的每个有效字符。