2人のユーザーエージェントがサーバーを絶えずプローブするのをブロックしようとして、これをWebサイトの.conf
ファイルに入れています。
## Block http user agent - morpheus fucking scanner ##
if ($http_user_agent ~* "morfeus fucking scanner|ZmEu") {
return 403;
}
私はまた、運が悪かったので、以下を試しました:
if ($http_user_agent ~* ("morfeus fucking scanner|ZmEu"))
if ($http_user_agent ~* (morfeus fucking scanner|ZmEu))
if ($http_user_agent ~* ("morfeus fucking scanner"|"ZmEu"))
if ($http_user_agent ~* "morfeus fucking scanner|ZmEu")
if ($http_user_agent ~* morfeus fucking scanner|ZmEu)
ユーザーエージェントが1つしかない場合はうまく機能しましたが、2つ目のユーザーエージェントを追加しようとすると、これらのユーザーエージェントはサーバーをプローブできます。
111.90.172.235 - - [17/Feb/2013:23:05:22 -0700] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 118 "-" "ZmEu" "-"
111.90.172.235 - - [17/Feb/2013:23:05:22 -0700] "GET /MyAdmin/scripts/setup.php HTTP/1.1" 404 118 "-" "ZmEu" "-"
111.90.172.235 - - [17/Feb/2013:23:05:22 -0700] "GET /pma/scripts/setup.php HTTP/1.1" 404 118 "-" "ZmEu" "-"
111.90.172.235 - - [17/Feb/2013:23:05:22 -0700] "GET /w00tw00t.at.blackhats.romanian.anti-sec:) HTTP/1.1" 403 118 "-" "ZmEu" "-"
111.90.172.235 - - [17/Feb/2013:23:05:22 -0700] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 118 "-" "ZmEu" "-"
111.90.172.235 - - [17/Feb/2013:23:05:22 -0700] "GET /phpmyadmin/scripts/setup.php HTTP/1.1" 404 118 "-" "ZmEu" "-"
これらの2つの投稿によると #12:特定のユーザーエージェントを拒否するにはどうすればよいですか? 、 ハウツー:Nginxブロックユーザーエージェント 、私は正しくセットアップされていると思いますが、そうではありません動作しているようです。
[〜#〜]編集[〜#〜]
これがnginxバージョンとconfファイル全体です
nginx version: nginx/1.2.7
server {
listen 80;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/XXXXXX/access.log main;
error_log /var/log/nginx/XXXXXX/error.log;
root /srv/www/XXXXXX;
location / {
index index.html index.htm index.php;
#5/22/2012 - Turn on Server Side Includes
ssi on;
## Block http user agent - morpheus fucking scanner ##
if ($http_user_agent ~* "morfeus fucking scanner|ZmEu") {
return 403;
}
## Only allow GET and HEAD request methods. By default Nginx blocks
## all requests type other then GET and HEAD for static content.
if ($request_method !~ ^(GET|HEAD)$ ) {
return 405;
}
}
location ~ \.php {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
#fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /srv/www/XXXXXX/$fastcgi_script_name;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# Redirect server error pages to the static page
error_page 403 404 /error403.html;
location = /error403.html {
root /usr/share/nginx/html;
}
nginxは、構成の各レベルでoneロケーションブロックのみを適用します。 404ingしているすべてのファイルは、.php
ロケーションブロックにヒットする\.php
ファイルであるため、ユーザーエージェントブロックを含む/
ロケーションブロックを使用しないでください。これを修正するには、ユーザーエージェントブロックをロケーションブロックの外側のルートレベルに移動して、すべてのリクエストに適用されるようにします。
if ($http_user_agent ~* "morfeus fucking scanner|ZmEu") {
return 403;
}
location / {
...
}
location \.php {
...
}
編集:これはcurl
のようなものでテストでき、任意のヘッダーを設定できます。
% curl -I localhost/sf645/blah
HTTP/1.1 404 Not Found
% curl -I -H 'User-agent: ZmEu' localhost/sf645/blah
HTTP/1.1 403 Forbidden
% curl -I -H 'User-agent: morfeus fucking scanner' localhost/sf645/blah
HTTP/1.1 403 Forbidden
パターン(morfeus)
を使用してみてください。そのパイプ文字は、正規表現のパターンマッチングを台無しにしている可能性があります。
これを試して
if ($http_user_agent ~* (morfeus|ZmEu) ) {
return 403;
}