我有一台 CentOS 5.8 服务器,上面装有 Apache 2.2.3,上面有 20 个网站。最近几周,服务器多次无法访问(数据库连接过多,CPU 使用率过高)。我不得不重新启动服务器才能再次获得 ssh/ftp/http 访问权限。当我检查服务器的 httpd 日志文件时,我发现每天有 10,000 次“访问尝试”通过 yourthumbnails.com 发起。以下是访问日志的示例:
98.224.147.78 - - [19/Apr/2012:14:20:06 +0200]
"GET /yourthumbnails.com/?id=2&%20121 HTTP/1.1" 404 278 "http://yourthumbnails.com/tgp44.html"
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GTB7.1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618; WinNT-PAI 23.10.2009)"
错误日志
[Thu Apr 19 14:19:15 2012] [error] [client 24.3.144.129]
File does not exist: /var/www/vhosts/default/htdocs/yourthumbnails.com, referer:
http://yourthumbnails.com/tgp44.html
正如你所见,yourthumbnails.com 是引荐来源实际访问者都有不同的 IP 地址。所以我无法只阻止一个 IP 地址。
我在 Google 上搜索过如何屏蔽 referrer,但似乎很难。一种方法是通过 htaccess 进行操作,如下所示:
RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} ^http://(www\.)?yourthumbnails\.com
RewriteRule .* - [F]
但是,我查看了我所有站点的单独 httpd 访问日志,没有找到 yourhtumbnails 所在的日志。所以看起来我的服务器正在直接受到攻击?而且我无法使用 htaccess 方法。
我的问题:有没有办法可以在不使用大量服务器资源的情况下阻止服务器上这种“引荐来源攻击”?
我已经联系了我的供应商,但他们也想不出解决办法。所以如果有人能提供一些建议我会非常高兴。
答案1
我查看了我所有网站的单独 httpd 访问日志,没有找到 yourhtumbnails 所在的位置
但在错误日志中报告了。看来你只是没有将 referer 写入访问日志。
但是它并不能解决您所描述的问题 - 您显示的请求导致了 404 响应 - 这不应该导致大量的数据库连接(除非您在 404 处理程序中有一些智能),对于 Web 服务器来说,处理这个问题比处理有效请求需要的努力要少得多。
因此,要么还有其他事情发生而您没有告诉我们,要么您需要在 httpd 之上处理这些问题(例如使用 fail2ban 规则、iptables 中的 syn 速率限制)。您可能还想与运行 thumbnails.com 的人取得联系。