我有一台运行 Apache2 的 Ubuntu 12.04 机器,它托管大约 10 个 wordpress 网站。
最近我受到了来自客户端的攻击,这些攻击似乎向名为“xmlrpc.php”的 wordpress 文件发送 POST 请求
我阻止发送这些恶意请求的 IP 地址的方式是一个繁琐的手动过程,我想以某种方式实现这一过程的自动化。
一旦我注意到我的服务器负载很高,我就会执行以下操作:
我在所有虚拟主机访问文件上运行 apachetop。这会显示所有正在发出的请求,这样我就可以查看是否有任何请求发送到 xmlrpc.php
一旦我确定哪些 IP 正在攻击我的服务器,我会针对每个违规 IP 地址运行以下命令:
sudo iptables -A INPUT -s 94.102.52.95 -j DROP
当所有 IP 地址都被添加到我的阻止列表后,我的服务器负载立即下降到正常水平
有没有办法自动执行此过程?我考虑在 xmlrpc.php 中编写一些代码,将任何 IP 地址添加到我的阻止列表中,以阻止任何向其发送请求的 IP。有人知道如何做到这一点吗?
提前致谢!
答案1
我认为封锁每个 IP 不是解决此问题的方法。执行 POST 操作的 IP 很可能是全球受感染/被黑客入侵的 PC。只有将每个 IP 列入黑名单,才能淹没您的 IPtables。如果 WP 网站已被黑客入侵,我建议将其下线并通知客户清理混乱并更新所有组件。
您可以安装 mod_security 来阻止恶意代码的上传。您还可以指示 mod_security 完全阻止对该特定页面的 POST 请求,它将仅返回 404,这将为您节省一些负载(并阻止黑客攻击)。
如果上述方法仍然没有帮助,并且您想要阻止每个 IP(我会确保您在一段时间后删除它们,以防止出现巨大的 iptables),您可以制作一个脚本跟踪 access.log 并阻止 IP(例如带有 cronjob/sleep 的 shell 脚本,或者更好的是:perl/python 中的守护进程)。