質問: さくらインターネットのVPSを使用してサーバーを運用しています。 Webサーバーは「nginx」(1.18.0)です。 内部使用なので先頭画面にBasic認証をかけています。 たまたまエラーログを確認しようと tail -f で error.log を開いたところ 以下のようなログが表示されていました。 ほぼ1秒に1件ずつ、次々に表示され止まりません。 いろいろなユーザー名を使用してアクセスを試みているようです。 これは総当たり攻撃をかけられているということでしょうか? 気持ち悪いので、nginxを一旦ストップしたのですが、リスタートしたとたんに ログも出力を再開しました。 本当に総当たり攻撃なのか、そうであったらどのように対処したらよいか ご指導ください。 よろしくお願いします。 2020/07/07 12:23:44 [error] 17555#17555: *10 user "speedy" was not found in "/etc/nginx/.htpasswd", client: 103.145.12.200, server: www.sampleabc.com, request: "GET /level/15/exec/- HTTP/1.1", host: "202.181.111.999", referrer: "http://202.181.111.999/" 2020/07/07 12:23:45 [error] 17555#17555: *11 user "speedy@speedy" was not found in "/etc/nginx/.htpasswd", client: 103.145.12.200, server: www.sampleabc.com, request: "GET /level/15/exec/- HTTP/1.1", host: "202.181.111.999", referrer: "http://202.181.111.999/" 2020/07/07 12:23:47 [error] 17555#17555: *12 user "speedy@speedy" was not found in "/etc/nginx/.htpasswd", client: 103.145.12.200, server: www.sampleabc.com, request: "GET /level/15/exec/- HTTP/1.1", host: "202.181.111.999", referrer: "http://202.181.111.999/" 2020/07/07 12:23:48 [error] 17555#17555: *13 user "spender" was not found in "/etc/nginx/.htpasswd", client: 103.145.12.200, server: www.sampleabc.com, request: "GET /level/15/exec/- HTTP/1.1", host: "202.181.111.999", referrer: "http://202.181.111.999/" 2020/07/07 12:23:49 [error] 17555#17555: *14 user "spender" was not found in "/etc/nginx/.htpasswd", client: 103.145.12.200, server: www.sampleabc.com, request: "GET /level/15/exec/- HTTP/1.1", host: "202.181.111.999", referrer: "http://202.181.111.999/" 2020/07/07 12:23:50 [error] 17555#17555: *15 user "sphichet" was not found in "/etc/nginx/.htpasswd", client: 103.145.12.200, server: www.sampleabc.com, request: "GET /level/15/exec/- HTTP/1.1", host: "202.181.111.999", referrer: "http://202.181.111.999/" 2020/07/07 12:23:52 [error] 17555#17555: *16 user "sphichet" was not found in "/etc/nginx/.htpasswd", client: 103.145.12.200, server: www.sampleabc.com, request: "GET /level/15/exec/- HTTP/1.1", host: "202.181.111.999", referrer: "http://202.181.111.999/" 2020/07/07 12:23:53 [error] 17555#17555: *17 user "spk" was not found in "/etc/nginx/.htpasswd", client: 103.145.12.200, server: www.sampleabc.com, request: "GET /level/15/exec/- HTTP/1.1", host: "202.181.111.999", referrer: "http://202.181.111.999/" 2020/07/07 12:23:54 [error] 17555#17555: *18 user "spk" was not found in "/etc/nginx/.htpasswd", client: 103.145.12.200, server: www.sampleabc.com, request: "GET /level/15/exec/- HTTP/1.1", host: "202.181.111.999", referrer: "http://202.181.111.999/" 2020/07/07 12:23:55 [error] 17555#17555: *19 user "spl" was not found in "/etc/nginx/.htpasswd", client: 103.145.12.200, server: www.sampleabc.com, request: "GET /level/15/exec/- HTTP/1.1", host: "202.181.111.999", referrer: "http://202.181.111.999/" 2020/07/07 12:23:56 [error] 17555#17555: *20 user "spl" was not found in "/etc/nginx/.htpasswd", client: 103.145.12.200, server: www.sampleabc.com, request: "GET /level/15/exec/- HTTP/1.1", host: "202.181.111.999", referrer: "http://202.181.111.999/" 2020/07/07 12:23:58 [error] 17555#17555: *21 user "spl0" was not found in "/etc/nginx/.htpasswd", client: 103.145.12.200, server: www.sampleabc.com, request: "GET /level/15/exec/- HTTP/1.1", host: "202.181.111.999", referrer: "http://202.181.111.999/" 2020/07/07 12:23:59 [error] 17555#17555: *22 user "spl0" was not found in "/etc/nginx/.htpasswd", client: 103.145.12.200, server: www.sampleabc.com, request: "GET /level/15/exec/- HTTP/1.1", host: "202.181.111.999", referrer: "http://202.181.111.999/" 2020/07/07 12:24:00 [error] 17555#17555: *24 user "sprinkle" was not found in "/etc/nginx/.htpasswd", client: 103.145.12.200, server: www.sampleabc.com, request: "GET /level/15/exec/- HTTP/1.1", host: "202.181.111.999", referrer: "http://202.181.103.119/"
回答: 質問に対する明確な回答が無いようなので一応回答しとくと`辞書攻撃`です。単語の後ろに`0`とかがついてるので`総当たり`も混ざってますが。 > > そうであったらどのように対処したらよいか > > > 公開が前提ならfail2banはどうでしょうか?自分はssh対策にしか使いませんが、nginxにも対応してます。 デフォルトでエラーログに適した設定があるかどうかは知らないけどアクセスログには対応してるようです。 または質問者自身がエラーログから不正なアクセスを試みる連続したIPを抽出するスクリプトを作って動的にブラックリスト化していくかです。 公開をする気が無いならホワイトリストで`自分のIPを許可`する、IPが動的で心配なら`日本に割り当てられたIPを許可`する また、公開サービスの管理機能とかの認証の場合なら大抵は決められたネットワークからしか繋げないようにすると思うので質問者のような状態にはなりません。