web-dev-qa-db-ja.com

誰かが私のサイトをハッキングしようとしていますか? Nginxで特定のURLをブロックする方法は?

過去数時間で、主に多くのロード要求が原因で、サーバーがかなりロードされています。これは、StatCounterのリアルタイム統計のおかげでわかりました。これは、「Camefrom」ページが次のとおりであることを示しています。

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、メモリ、帯域幅はどんどん高くなっています。これが何らかの攻撃になる可能性があるかどうかを確認したいと思います。

これはWordPressブログwith WP 3.2.1、Ubuntu 10.04.2 LTS、Nginx、PHP-FPM、APCに基づいています。通常は実行されますかなりうまくいっていますが、このリクエストがサーバーに多くの負荷をかけているのではないかと心配しています。

私が持っている唯一の説明は、Facebookアカウントでコメントを許可するSimple Facebook Connectプラグインを持っているということですが、今まで問題はありませんでした。

奇妙なことに、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で、たとえば、これらすべてのリクエストで定数であるapi_keyパラメーターに一致するURLをブロックすることは可能ですか?

3
javipas

はい、次のような正規表現を使用して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;
}
4
Adrien P.