我负责的其中一台服务器似乎正在参与针对 Wordpress 安装的暴力攻击。
我曾多次遇到这种情况,因此非常熟悉可以采取哪些步骤来防止这种情况发生。然而,我所面临的困难是检测外发攻击。该服务器是一个典型的 Apache 服务器,上面有许多虚拟主机 - 当然,这就是复杂之处 - 如果上面只有一个虚拟主机,就不会那么困难了!
我目前正在使用 tcpflow 来记录从该服务器上的任何端口到任何其他计算机上的端口 80 的流量,使用以下命令:
tcpflow -i eth0 dst port 80 and src host <my_servers_ip> and port not 22
我发现这比 tcpdump 更好。查看它的输出一段时间后可能会有点令人费解 :) tcpflow 将每个请求放入单独的文件中。
以下是我认为是可疑活动的文件的一些输出:
POST /wp-login.php HTTP/1.1
User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Host: somedomain.com
Accept: */*
Cookie: wordpress_test_cookie=WP+Cookie+check
Content-Length: 97
Content-Type: application/x-www-form-urlencoded
log=jacklyn&pwd=london&wp-submit=Log+In&redirect_to=http://somedomain.com/wp-admin/tes1a0&testcookie=1
请注意,我混淆了上面的“Host:”,我相信那是受到攻击的主机(这是正确的吗?)。
所以我的问题实际上是,我该如何检测生成此恶意流量的虚拟主机?如果我能做到这一点,我可以让我的客户知道,他可以采取措施调查该网站并进行必要的更改以阻止它。
任何解决方案都非常感谢:)
答案1
从您所说的内容来看,我推测您处于无法使用 allow_url_fopen 限制客户端的 url 下载的设置中。
在这种情况下,实际上很难返回到原始 php 脚本,因为您显示的 tcpflow 日志实际上并没有嵌入该信息。
一个简单的选择是强制任何传出的请求都有一个可显示的客户端代理,您可以使用它来识别发出该请求的实际客户端。
例如,你可以在客户端 1 网站的 vhost 定义中添加一条指令
php_admin_value user_agent client1
这将强制该网站发出的任何 http 请求都使用用户代理“client1”,该代理将显示在您的 tcpflow 日志中,从而让您知道是谁发起的。
请注意,如果担心隐私问题,您可能需要使用只有您可以映射到实际客户端的 user_agent(例如客户端名称的加密)。
但是,它可能会损害可用性,因为某些网站会根据提供的用户代理 (user_agent) 而显示不同的内容,并且此设置会故意阻止您的客户端尝试更改它。