[PR] 本記事にはプロモーションが含まれています。

【GoAccess】レポートに見知らぬ海外のIPv6アドレス|Apacheのログで正体を調べたらMJ12botだった、robots.txtとレポートからの除外

GoAccess

【2026年7月3日時点の情報です】

GoAccessで自宅サーバーのアクセスを見ていたところ、見知らぬ海外のIPv6アドレス(2a01:4f9:... や 2001:41d0:...)が上位に出ていました。不正なアクセスなのか、ただのボットなのかを確かめるために、Apacheのアクセスログを調べたところ、正体は「MJ12bot」というクローラーでした。

この記事では、ログから相手を調べる方法と、MJ12botを robots.txt で断る方法、GoAccessのレポートから除外する方法をまとめます。GoAccessの設定は「Webアクセス解析(GoAccess)の設定」で紹介しています。

IPアドレスから相手を調べる

GoAccessの画面ではIPアドレスしか分かりませんが、Apacheのアクセスログには、アクセスしてきた側が名乗っている「User-Agent」も記録されています。気になるIPアドレスでログを絞り込みます。

Bash
# 今のログから探す
sudo grep "2a01:4f9:4a:2aa5::2" /var/log/httpd/access_log

# 過去のログ(圧縮されたものも含む)からも探す
sudo zgrep "2a01:4f9:4a:2aa5::2" /var/log/httpd/access_log*

実際に表示されたログは、次のようなものでした。

Plaintext
2a01:4f9:4a:2aa5::2 - - [22/Jun/2026:13:37:00 +0900] "GET /robots.txt HTTP/1.1" 304 - "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"
2a01:4f9:4a:2aa5::2 - - [22/Jun/2026:13:44:46 +0900] "GET /category/ds224%EF%BC%8B/ HTTP/1.1" 404 309501 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"

最後の " で囲まれた部分がUser-Agentです。ここに MJ12bot/v1.4.8 と、クローラーの名前と説明ページのURLが書かれていました。

このブログはCloudflare Tunnelを通して公開しているので、そのままだとログのIPアドレスはすべて 127.0.0.1 になります。Apacheの mod_remoteip で Cloudflare が渡してくれる CF-Connecting-IP を読むようにしているので、相手のIPアドレスが記録されています(「Cloudflareとは?仕組みと無料プランでできること」)。

User-Agentは自己申告

User-Agentは、アクセスする側が自由に名乗れるものです。悪質なプログラムが、有名なクローラーの名前をかたることもあります。今回は、ログを見ると存在しないページを読みに来ているだけで、ログイン画面や設定ファイルを狙うようなアクセスはありませんでした。名前だけでなく、どのURLにアクセスしているかも一緒に見ると、判断しやすくなります。

MJ12botとは

MJ12botは、イギリスのMajestic(マジェスティック)という会社のクローラー(自動でサイトを巡回するプログラム)です。世界中のサイトを回って、どのサイトがどこにリンクしているか(被リンク)を集め、SEOの分析サービスに使っています。

  • 攻撃ではない:
    サイトを読むだけのクローラーで、robots.txtの指示にも従います
  • 検索の順位には関係しない:
    Googleのクローラーではないので、巡回されてもGoogleの検索順位には影響しません
  • 少しだけサーバーの負荷になる:
    上のログのように、今はない古いURLを読みに来て404になることもあり、個人のブログにはあまりメリットがありません

どのくらい来ているかは、次のコマンドで数えられます。

Bash
sudo grep -c "MJ12bot" /var/log/httpd/access_log

対策①:robots.txt で断る

MJ12botは robots.txt の指示に従うので、サイトの robots.txt(https://ドメイン/robots.txt)に次の2行を足すと、サイト全体の巡回を断れます。

Plaintext
User-agent: MJ12bot
Disallow: /

このブログの robots.txt にも、この2行を入れています。他のクローラー向けの指定(User-agent: * の部分)とは、空行で区切って書きます。

完全に断るのではなく、アクセスの間隔をあけてほしいだけなら、Crawl-delay(秒数)も使えます。

Plaintext
User-agent: MJ12bot
Crawl-delay: 10

このブログのようにCloudflareを使っている場合、robots.txt のような .txt ファイルはCloudflareに保存(キャッシュ)されます。書き換えたあとは、Cloudflareの管理画面の「キャッシュ」→「構成」→「カスタム パージ」で robots.txt のURLを指定して消し、外から新しい内容が見えるかを確かめます。

Bash
curl -s https://softdev-learn.cc/robots.txt

robots.txt は、クローラーが次に読みに来たときに反映されるので、すぐにアクセスが止まるとは限りません。また、「従うかどうか」はクローラー次第なので、指示を無視するボットには効きません。

対策②:GoAccessのレポートから除外する

アクセス自体は断らなくてもよいけれど、レポートを見やすくしたいときは、集計スクリプトでログを絞り込むときの除外の条件(grep -v -E の部分)に MJ12bot を足す方法もあります。私は robots.txt で断っているので、スクリプトには入れていません。robots.txt を足してもアクセスが減らないときや、断りたくはないけれどレポートには出したくないときに使えます。次の例の最後の MJ12bot が、足した部分です(IPアドレスは例)。

Bash
grep -v -E '/wp-admin/|/wp-login\.php|^2001:db8:1234:5678:|^203\.0\.113\.10 |[0-9a-f]{32}\.txt|/wp-cron\.php|MJ12bot'
条件除外するもの
/wp-admin/、/wp-login\.phpWordPressの管理画面へのアクセス
^2001:db8:1234:5678:自宅のIPv6アドレスからのアクセス(前半だけで比べる)
^203\.0\.113\.10自宅のIPv4アドレスからのアクセス
[0-9a-f]{32}\.txtCloudflareの確認用ファイルへのアクセス
/wp-cron\.phpWordPressの内部の定期処理
MJ12bot今回のクローラー

自宅のIPアドレスは、行の先頭(^)で比べています。ログの1行はアクセス元のIPアドレスから始まるので、先頭で比べると、URLなど他の場所にたまたま同じ文字がある行まで消してしまうことを防げます。自宅の回線のIPアドレスが変わったときは、この条件も直します。スクリプト全体は「Webアクセス解析(GoAccess)の設定」で紹介しています。

自分のIPアドレスをブログなどに載せるときは、今回のように例のアドレスに置き換えておくと安心です。IPv4の 203.0.113.x やIPv6の 2001:db8: は、説明用に使うために用意されているアドレスです。

まとめ

  • GoAccessで見知らぬアドレスを見つけたら、ApacheのログをそのIPアドレスで絞り込み、User-Agentとアクセス先のURLを見る
  • User-Agentは自己申告なので、名前だけでなく、どこを読みに来ているかも一緒に判断する
  • MJ12botはMajestic社のSEO用のクローラーで、攻撃ではないが、個人のブログにはあまりメリットがない
  • 断るなら robots.txt。Cloudflareを使っているなら、書き換えたあとにキャッシュを消す
  • 断らずにレポートだけきれいにしたいなら、集計スクリプトの除外の条件に MJ12bot を足す

コメント