nginx Webサーバーレベルでのボットと不要なユーザーのブロック

私にとって、そして私はあなたのために、ウェブサーバーのログは次の形式のリクエストでしばしば詰まっています:

62.193.233.148 - - [28/May/2009:18:20:27 +0600] "GET /roundcube/ HTTP/1.0" 404 208 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5"
62.193.233.148 - - [28/May/2009:18:20:28 +0600] "GET /webmail/ HTTP/1.0" 404 206 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5"
212.150.123.234 - - [29/May/2009:20:51:12 +0600] "GET /admin/main.php HTTP/1.0" 404 212 "-" "-"
212.150.123.234 - - [29/May/2009:20:51:12 +0600] "GET /phpmyadmin/main.php HTTP/1.0" 404 217 "-" "-"
212.150.123.234 - - [29/May/2009:20:51:12 +0600] "GET /phpMyAdmin/main.php HTTP/1.0" 404 217 "-" "-"
212.150.123.234 - - [29/May/2009:20:51:13 +0600] "GET /db/main.php HTTP/1.0" 404 209 "-" "-"
212.150.123.234 - - [29/May/2009:20:51:13 +0600] "GET /PMA/main.php HTTP/1.0" 404 210 "-" "-"
212.150.123.234 - - [29/May/2009:20:51:14 +0600] "GET /admin/main.php HTTP/1.0" 404 212 "-" "-"
212.150.123.234 - - [29/May/2009:20:51:14 +0600] "GET /mysql/main.php HTTP/1.0" 404 212 "-" "-"
212.150.123.234 - - [29/May/2009:20:51:15 +0600] "GET /myadmin/main.php HTTP/1.0" 404 214 "-" "-"
212.150.123.234 - - [29/May/2009:20:51:15 +0600] "GET /phpadmin/main.php HTTP/1.0" 404 215 "-" "-"
212.150.123.234 - - [29/May/2009:20:51:16 +0600] "GET /webadmin/main.php HTTP/1.0" 404 215 "-" "-"


これらは主にボットです。サーバーをスキャンしてフォルダーを探し、脆弱性を探すユーザーもいます。
そこで、nginxツールを使用してサーバーをスキャンしようとした直後に、これらのIPアドレスをブロックしたかったのです。


geo njinxモジュールが助けになります

まず、場所セクションに「IPアドレス1;」という形式の新しいlog_formatを書き込みます。これは、geoモジュールが理解します。

log_format deny '$remote_addr 1;';


httpセクションに次のように記述します。

geo $deny {
default 0;
include /www/logs/deny;
}



これにより、ファイル/ www / logs / denyを読み取り、ブロックするIPアドレスのリストを取得できます。

次に、場所のセクションで、IPアドレスをブロックする必要がある「悪い」状況について説明します。次に例を示します。

set $ua $http_user_agent;

if ($ua ~* wget) {
access_log /www/logs/deny deny;
return 403;
}

if ($ua ~* curl) {
access_log /www/logs/deny deny;
return 403;
}

if ($request ~* "webadmin") {
access_log /www/logs/deny deny;
return 403;
}

if ($request ~* "\/admin\/main.php") {
access_log /www/logs/deny deny;
return 403;
}


その結果、不正なリクエストとユーザーエージェントは、「IPアドレス1;」の形式でファイル/ www / logs / denyに到達し、構成を再読み取りすると、IPアドレスがブロックされます。

設定を再読み込みするために(必要に応じて)1-5-10分ごとに一度クラウンのjinxにコマンドを投げるだけで、ブロックされたIPアドレスのリストはサーバーへのアクセスを拒否されます。

シソエフによると、次のようになります。
kill –HUP `cat /var/log/nginx/nginx.pid`

ルールのリストに「悪い」クエリを入力すると、悪魔はあなたの兄弟ではありません!

Source: https://habr.com/ru/post/J61759/


All Articles