我在运行带有 POSTFIX 的 Ubuntu,不断有垃圾邮件试图发送出去。我已经从电子邮件服务器阻止了所有垃圾邮件,现在它们只是不断地排队。该服务器正在运行 php/mysql,上面有许多网站。我如何知道这些消息来自哪里?即来自服务器上正在执行的 php 文件还是哪里?
mailq 的示例
2A8CA2D447 444542 Wed Feb 29 09:07:27 [email protected]
(delivery temporarily suspended: lost connection with emailserver[emailserverip] while receiving the initial server greeting)
[email protected]
任何帮助,将不胜感激
答案1
听起来好像有人入侵了你的服务器。可能存在 rootkit、隐形进程……如果幸运的话,它只是一个脚本生成的。如果你断开计算机与网络的连接,它是否仍在尝试发送更多新邮件?那么就是服务器上的某个东西生成了邮件。
问题是,即使你尽力清理,你也不能确定是否完全清理干净。
最佳做法是清除机器并重建,然后检查 PHP 代码和 SQL(如果您使用数据库),验证您是否已打上所有补丁且不存在可能的 SQL 注入,并审核所有可以审核的内容。然后验证您是否没有将 Postfix 设置为邮件中继,只允许您自己的机器或您自己的 IP 或自己的子网发送邮件。
答案2
您提供的单个日志消息并未明确告诉您任何这些内容。
最终的发件人地址是[电子邮件保护]暗示它是通过 apache 拥有的进程发送的,可能是 php mail()。
您不能简单地禁止一个网站通过 sendmail(1) 本地提交邮件,而允许其他网站做同样的事情;相反,可以考虑拒绝所有本地邮件提交,并要求网站通过本地 SMTP 提交邮件。
如果您希望暂时阻止任何 apache 拥有的进程发送邮件,请将以下内容添加到 main.cf:
authorized_submit_users = !www-data, static:all
并重新加载 postfix:
# postfix reload
答案3
您可能应该检查一下这个问题的答案:
这样您就可以缩小发送这些垃圾邮件的域/站点的范围。如果做不到这一点,您可以查看邮件服务器日志,查看邮件的发送时间 - 然后在 Apache 日志中查找该时间前一秒左右的相应 POST。这样您可能会很幸运,并确定发送邮件的脚本。