GA4でLanzhouからの異常アクセス対策|ログ解析から.htaccessで遮断した話

GA4でLanzhouからの異常アクセス対策|ログ解析から.htaccessで遮断した話

Google Analytics のリアルタイムアクセスを見ていると、普段とは異なる地域から大量のアクセスが発生していることに気づいた。

NJ

中国のLanzhou(蘭州)?一体何のアクセス?!

GA4リアルタイムから判明したLanzhouからのアクセス

一時的に特定の場所からアクセスが偏る可能性はあるものの、今回は数日にわたって同様のアクセスが継続していた。

これは一般的なアクセスなのか?それとも何か目的があって訪れているのか。GA4のデータでは判別ができないため、サーバーログを解析して必要に応じて対策を講じることにした。

NJ

結果的に、GA4で中国Lanzhouからの異常アクセスを確認。サーバーログを解析するとBOTとわかり、.htaccessでユーザーエージェントとIP帯域を制御してアクセスを遮断しました。

サーバーログを解析する

大量のログデータはAIに丸投げが便利

Lanzhouからのアクセスが確認できた日のログファイルをサーバーからダウンロードして、分析を開始する。と言っても、目視で数十万件のログから怪しいアクセスを見つけるのは時間が掛かる。

そこでファイルを丸ごとGeminiへ添付して、解析してもらった。

NJ

【添付ファイル】このlog、中国のLanzhouからの異常なアクセスがあると思うんだけど、IP拾える?あと具体的なログの例と、どういったアクセスなのか解析してほしい。

データが大量にあっても、数分も待たずに答えが得られる。本当に便利な世の中になったものです。

解析の結果BOTと判明

Geminiの解析結果によると、中国からのアクセスと思われる、以下のUser-Agentを伴うログが確認できた。

  • User-Agent:Baiduspider
  • User-Agent:TikTokSpider
  • User-Agent:Bytespider

Baiduspiderは中国の検索エンジン「百度(バイドゥ)」のクローラーであり、残りの2つはByteDance(TikTok運営会社)関連のクローラーと判明。

今回表示されていたLanzhou(蘭州)は、クラウドサーバー経由の通信がその地域名として表示されている可能性が高い様子。つまり今回のような不自然な挙動は、BOTや自動アクセスと判断するのが妥当だ。

NJ

ログからも異常なアクセス数を検知しているため、不正アクセスとして完全に通信を遮断したい!

不正なアクセスを.htaccessで制限する

なおrobots.txtによる制御も検討したが、今回検出されたクローラーはrobots.txtのルールを守らない挙動が確認できたため、.htaccessでの制御を選択した。

ユーザーエージェントによる制御

ログから得られた情報を元に、アクセスを制限する。判明した3つのクローラーからのアクセスを遮断するため、.htaccessに以下の内容を記述する。

.htaccessでクローラーアクセス制御
# 中国系BOTのアクセス拒否
SetEnvIfNoCase User-Agent "Baiduspider" bad_bot
SetEnvIfNoCase User-Agent "Bytespider" bad_bot
SetEnvIfNoCase User-Agent "TikTokSpider" bad_bot
Deny from env=bad_bot
NJ

アクセス拒否は.htaccessの先頭に記述するのがポイントです。(他のルールを適用する必要がないため)

ログに記されたユーザーエージェント情報を使ってアクセスを遮断する。これで各種クローラーがサイトにアクセスすると、403エラーが返るようになる。

消えない?!Lanzhouからのアクセス

3つのクローラーを遮断することで、Lanzhouからのアクセスは大きく減少。しかし完全には消えず、まだ若干のアクセスが続いている。

遮断後のログを改めて分析すると、ログにユーザーエージェントの記述がなく、一般的なブラウザからのアクセスを装っていることが判明。(この解析も基本的にはGeminiで行い、該当ログを目視で確認。)

NJ

これ以上の制御は、IPアドレスを拒否するしかないみたい。

レンタルサーバーの機能を使って海外からのアクセスを完全に遮断する方法はあるけれど、それは避けたいのでIPアドレス制御が妥当なラインと判断した。

.htaccessでIPアドレスのアクセス制御

ログ解析の結果、明らかに怪しいIP帯域(43.173.x.x系)が見つかる。1つのIPから短時間に数百回のリクエストを投げたり、複数のIP(43.173.x.x系など)を使い分けて波状攻撃的にアクセスしている形跡があった。

またIPアドレスから住所を調べると、シンガポールと出てくる。これはアリババクラウド(中国のクラウドサーバー)を利用した通信の典型例

先ほどのユーザーエージェントの拒否条件に加えて、同IP帯域(43.173.x.x系)を丸ごと制御することで、Lanzhouからのアクセスは排除できそうだ。

NJ

前述のユーザーエージェント設定も含めて、最終的にはこのようにまとめました!

.htaccessでIPアドレスのアクセス制御
# 以下の設定は、Apache 2.4系サーバーを前提とする
# 中国系BOTのアクセス拒否
SetEnvIfNoCase User-Agent "Baiduspider" bad_bot
SetEnvIfNoCase User-Agent "TikTokSpider" bad_bot
SetEnvIfNoCase User-Agent "Bytespider" bad_bot
<RequireAll>
    Require all granted
    Require not env bad_bot
    Require not ip 43.173.0.0/16
</RequireAll>
# IP制御は /16 と指定することで、43.173.0.0 ~ 43.173.255.255 までの全範囲をカバーする

Lanzhouからのアクセスは消えたが万事解決ではない

  • 特定のユーザーエージェントの制御
  • 不正アクセスのあったIP帯域の制御

.htaccessにこれらの対応を加えたことで、GA4上でのLanzhouからのアクセスは消失。無意味なPV増加が止まり、明らかに制御が機能しているとわかる変化だった。

NJ

これでサーバーの負荷も軽減されて、GA4でもまともなデータが見られるようになりました。

.htaccessで遮断しても、反映されるまでGA4上にしばらくデータが残る場合があります。もし過去のデータも綺麗にしたい場合は、GA4のデータフィルタ設定も併用すると確実です。

ただ、今後クラウドサーバーの他のIPアドレスを使ってアクセスしてくる可能性は否定はできない。今は問題が解決したけど、素直に喜べないのが正直なところ。しばらく経過観察して、必要に応じて対応していくしか方法はないのかな。

BOT対策は、完璧にやりすぎると必要なアクセスを制御してしまう場合もある。妥協点として、少し緩めの対策に留めるのが望ましい。もし海外アクセス完全遮断で大丈夫であれば、自身の利用しているサーバー設定を確認してみると良いかもしれない。

NJ

僕が使っているXSERVERでは、国外IPアドレスからのアクセス制御を行う機能が提供されています。

最後に。っっっdGA4で「地域の違和感」に気づいたら、まずサーバーのログを見ること。所有者しか閲覧できない状況を使って判断することが重要です。

\ この記事をシェアする /

関連記事

このブログの運営者

NJ

Web系メインで従事していた元システムエンジニア。現在は個人事業主として独立。Webサイト運営における「困った問題」の解決方法をブログで発信。Web サイト運営、ポップデザインや動画制作など、パソコンでモノづくりをしている。