有人试图破解我的网站? 如何阻止Nginx中的某些URL?

在过去的几个小时里,我的服务器变得非常漂亮,主要是由于大量的加载请求。 我已经看到了这一点,这要归功于StatCounter的实时统计,它显示“来自”页面是:

http://www.facebook.com/extern/login_status.php?api_key=3d34061e0ac6dc4dec21b35d2fb9d6d3&extern=0&channel=http%3A%2F%2Fwww.mysite.com%2F%3Fxd_receiver%3D1&locale=es_ES&sdk=edgar 

着陆页是

 http://www.mysite.com/?xd_receiver=1#%7B%22id%22%3A0%2C%22sc%22%3A%22http%3A%2F%2Fwww.facebook.com%2Fxd_receiver_v0.4.php%22%2C%22sf%22%3A%22loginStatus%22%2C%22sr%22%3A2%2C%22h%22%3A%22loginServer%22%2C%22sid%22%3A%220.162%22%2C%22t%22%3A0%7D%5B0%2C%22loginStatus%22%2C%22InitLogin%22%2C%7B%22b 

CPU,内存和带宽越来越高,我想现在如果这可能是某种攻击。

这是一个WP 3.2.1的WordPress博客,基于Ubuntu 10.04.2 LTS,带有Nginx,PHP-FPM和APC。 通常它运行得很好,但我很担心这个请求是加载服务器很多。

我唯一的解释是,我有一个简单的Facebook连接插件允许评论与Facebook帐户,但它没有给任何问题,直到现在。

奇怪的是,access.log显示请求来自不同的IP地址,所以我猜这不是攻击

 164.77.106.237 - - [19/Oct/2011:18:20:53 +0200] "GET /?xd_receiver=1 HTTP/1.1" 403 189 "http://www.facebook.com/extern/login_status.php?api_key=3d34061e0ac6dc4dec21b35d2fb9d6d3&extern=0&channel=http%3A%2F%2Fwww.mysite.com%2F%3Fxd_receiver%3D1&locale=es_ES&sdk=edgar" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.1)" 212.104.164.139 - - [19/Oct/2011:18:20:48 +0200] "GET /?xd_receiver=1 HTTP/1.1" 403 135 "http://www.facebook.com/extern/login_status.php?api_key=3d34061e0ac6dc4dec21b35d2fb9d6d3&extern=0&channel=http%3A%2F%2Fwww.mysite.com%2F%3Fxd_receiver%3D1&locale=es_ES&sdk=edgar" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1" etc. 

是否有可能在Nginx的阻止例如URL匹配所有这些请求中的常量api_key参数?

是的,你可以用这样的正则expression式在NGINX中阻止一个url:

 location / { if ($uri ~* '^/(abc|def|ghi)$') { allow 1.2.3.4; deny all; } root /var/www/ ... } 

你也可以阻止一些查阅者:

 if ($http_referer ~* (klm|nop|qrs)) { return 403; } 

或用户代理:

 if ($http_user_agent ~ (libwww-perl|wget) ) { return 403; }