
サーバーログを見ていなかったことで起きた、ある事件
ログ監視って、正直言って地味だ。派手なセキュリティプラグインを入れたり、ファイアウォールを設定したりする方がよっぽど「セキュリティ対策してる感」があるんだよね。
でも、僕がクライアントのECサイトで実際に遭遇した事件を話そう。ある日、そのサイトの売上が急に落ちたという相談を受けた。アクセス数は変わっていないのに、カートに商品を入れた後の購入完了率が異常に低い。
調べてみたら、決済ページだけが異様に重かったんだ。サーバーのログを確認してみると、2週間前から特定のIPアドレスからの大量アクセスが記録されていた。どうやらボットが決済システムの脆弱性を探るために、繰り返しアクセスを試みていたらしい。
もしログを定期的にチェックしていたら、2週間も前に異常を検知できていた。そうすれば、クライアントが失った売上を防げたかもしれない。この経験から僕は、ログ監視の重要性を身をもって理解したんだ。
この記事では、WordPressサイトへの攻撃の兆候を早期に捉えるための、現実的で実践的なログ監視方法を紹介する。毎日何時間もログとにらめっこする必要はない。ポイントを押さえれば、最小限の労力で最大の効果が得られるんだ。

なぜWordPressサイトにログ監視が必須なのか
ログを見ないということは、侵入者に気づかないということ
サーバーログは、あなたのサイトで起きているすべての出来事を記録している「監視カメラの映像」みたいなものだ。誰がいつアクセスしたか、どのファイルを要求したか、エラーが発生したか。すべてが記録されている。
でも、この監視カメラの映像を誰も見ていなかったらどうなる?侵入者が裏口から入ってきても、気づくのは家の中がめちゃくちゃになってからだ。
実際の攻撃は、いきなり成功するわけじゃない。攻撃者はまず偵察をする。脆弱性がないか探り、ログイン画面を見つけ、パスワードの総当たり攻撃を試す。この「準備段階」の痕跡が、すべてログに残っているんだ。
WordPressが狙われやすい理由
WordPressは世界中のウェブサイトの43%以上で使われているCMSだ。つまり、攻撃者にとっては「効率がいい」ターゲットなんだよね。一つの脆弱性を見つければ、何千ものサイトに同じ攻撃を仕掛けられる。
しかも、WordPressはプラグインやテーマの選択肢が豊富だ。これは便利な反面、セキュリティホールが生まれやすい。更新が止まったプラグイン、品質の低いテーマ、古いバージョンのWordPress本体。攻撃者はこういった「穴」を探している。
僕が見てきたサイトの多くは、攻撃を受けていることに気づいていなかった。ログインページへの不正アクセス試行が1日に数百回も記録されているのに、サイトオーナーはまったく知らない。これが現実なんだ。
攻撃は静かに進行する
ハッキングといえば、映画みたいに画面がバーッと切り替わって「YOU ARE HACKED」みたいな派手な演出をイメージするかもしれない。でも実際の攻撃は、もっと静かで地味だ。
バックドアを仕込まれても、サイトは普通に動く。マルウェアを埋め込まれても、見た目は何も変わらない。攻撃者は気づかれないように、じっくりと情報を抜き取ったり、サイトを悪用したりする。
だからこそ、ログ監視が必須なんだ。目に見える被害が出る前に、異常なアクセスパターンや不審な動きを検知する。これが唯一の早期発見方法だと言っていい。
監視すべきログファイルとその場所

アクセスログ(access.log)
アクセスログには、サイトへのすべてのHTTPリクエストが記録される。誰が、いつ、どのページにアクセスしたか。これを見れば、不審な動きはすぐに分かるんだ。
場所:
# Apache
/var/log/apache2/access.log
/var/log/httpd/access_log
# Nginx
/var/log/nginx/access.logアクセスログの記録例を見てみよう:
192.168.1.100 - - [06/Nov/2025:14:32:15 +0900] "GET /wp-login.php HTTP/1.1" 200 1234
192.168.1.100 - - [06/Nov/2025:14:32:16 +0900] "POST /wp-login.php HTTP/1.1" 200 5678
45.123.45.67 - - [06/Nov/2025:14:35:22 +0900] "GET /wp-admin/ HTTP/1.1" 403 1234この例だと、最初の2行は正常なログインアクセスだけど、3行目は403エラー(アクセス拒否)が返されている。もし同じIPアドレスから短時間に大量の403エラーが記録されていたら、何かを探っている可能性が高い。
エラーログ(error.log)
エラーログには、サーバー側で発生したエラーが記録される。存在しないファイルへのアクセス、PHPのエラー、権限エラーなど。これらは攻撃の痕跡であることが多いんだ。
場所:
# Apache
/var/log/apache2/error.log
/var/log/httpd/error_log
# Nginx
/var/log/nginx/error.log特に注目すべきなのは、以下のようなエラーだ:
[Wed Nov 06 14:40:23.123456 2025] [core:error] [pid 12345] [client 45.123.45.67:52341] AH00126: Invalid URI in request GET /../../../etc/passwd HTTP/1.1
[Wed Nov 06 14:41:15.234567 2025] [php7:error] [pid 12346] [client 45.123.45.67:52342] PHP Warning: include(/var/www/html/wp-content/uploads/shell.php): failed to open stream最初のエラーは、ディレクトリトラバーサル攻撃の典型例だ。攻撃者がサーバーの重要ファイルにアクセスしようとしている。2番目のエラーは、不正なシェルスクリプトを実行しようとした痕跡だ。
WordPressのデバッグログ
WordPressには独自のデバッグログ機能がある。プラグインやテーマのエラー、データベースのエラーなどが記録される。これを有効にしておくと、WordPress特有の問題を見つけやすくなるんだ。
設定方法:
wp-config.phpに以下を追加:
<?php
// デバッグモードを有効化(本番環境では表示はオフ)
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
?>これでログファイルが作成される:
/wp-content/debug.logこのログには、プラグインの致命的エラーや、データベース接続の失敗など、WordPress固有の問題が記録される。攻撃者が脆弱なプラグインを悪用しようとした際のエラーも、ここに残ることがあるんだ。
不審なアクセスパターンの見つけ方

ログインの総当たり攻撃(ブルートフォース)
ブルートフォース攻撃は、最もよく見かける攻撃パターンだ。攻撃者はログインページに対して、自動的に何百、何千ものパスワードを試す。
見つけ方:
アクセスログで、短時間に大量のPOSTリクエストがwp-login.phpに送られていないかチェックする:
$ grep "POST /wp-login.php" /var/log/apache2/access.log | tail -20同じIPアドレスから、数秒おきにログイン試行が繰り返されていたら、それはブルートフォース攻撃だ。
さらに詳しく分析するなら:
# 特定期間のログイン試行回数を集計
$ grep "POST /wp-login.php" /var/log/apache2/access.log | \
awk '{print $1}' | sort | uniq -c | sort -nr | head -10これで、IPアドレスごとのログイン試行回数がランキング形式で表示される。正常なユーザーなら、ログイン試行は多くても数回だ。でも100回、200回となっていたら、間違いなく攻撃だよね。
脆弱性スキャンの痕跡
攻撃者は本格的な攻撃の前に、サイトの脆弱性を調べる。既知の脆弱性があるプラグインやテーマがインストールされていないか、自動ツールでスキャンするんだ。
典型的なパターン:
GET /wp-content/plugins/old-vulnerable-plugin/readme.txt
GET /wp-content/themes/vulnerable-theme/style.css
GET /xmlrpc.php
GET /wp-json/wp/v2/usersreadme.txtやstyle.cssにはバージョン情報が書かれている。攻撃者はこれを読んで、古いバージョンかどうか確認する。xmlrpc.phpは悪用されやすいファイルだから、何度もアクセスされていたら要注意だ。
アクセスログで、こういった情報収集のパターンを探してみよう:
$ grep -E "readme.txt|xmlrpc.php|wp-json/wp/v2/users" /var/log/apache2/access.log不正なファイルアクセスの試み
WordPressのディレクトリ構造は公開情報だから、攻撃者はよく知られた脆弱性のあるパスに直接アクセスを試みる。
注目すべきパターン:
GET /wp-content/uploads/2024/05/shell.php
GET /wp-includes/shell.php
GET /.env
GET /wp-config.php.bak
GET /wp-admin/includes/file.phpuploadsディレクトリにPHPファイルが置かれていたら、それはバックドアかもしれない。.envファイルにはデータベースのパスワードなどが書かれていることがある。wp-config.phpのバックアップファイルも同様だ。
これらのファイルへのアクセスが記録されていたら、すぐに確認すべきだ:
$ grep -E "\.php|\.env|wp-config" /var/log/apache2/access.log | grep uploads異常なトラフィック量
DDoS攻撃や、botによる大量アクセスも、ログを見れば分かる。同じIPアドレスから、1分間に何百ものリクエストが来ていたら、それは普通じゃない。
確認方法:
# 1分ごとのアクセス数をカウント
$ awk '{print $4}' /var/log/apache2/access.log | \
cut -d: -f1-3 | sort | uniq -c | sort -nr | head -20正常なアクセスなら、1分間に数件から数十件程度だ。でもこれが数百件、数千件となっていたら、何かがおかしい。
特定のIPアドレスからのアクセスを確認するなら:
$ grep "45.123.45.67" /var/log/apache2/access.log | wc -lこれで、そのIPアドレスからの総アクセス数が分かる。
実践的なログ監視の方法

手動でのログ確認方法
最も基本的な方法は、SSHでサーバーにログインして、コマンドラインでログを確認することだ。これができるようになると、かなり柔軟な分析ができる。
基本コマンド:
# ログファイルの最新20行を表示
$ tail -20 /var/log/apache2/access.log
# リアルタイムでログを監視(新しい行が追加されるたびに表示)
$ tail -f /var/log/apache2/access.log
# ログファイル全体を表示(長いので注意)
$ less /var/log/apache2/access.loglessコマンドは便利だ。ファイルの中を上下にスクロールしながら確認できる。スラッシュ(/)を押せば検索もできる。
特定の情報を抽出:
# 404エラーだけを表示
$ grep " 404 " /var/log/apache2/access.log
# 特定のIPアドレスのアクセスを表示
$ grep "45.123.45.67" /var/log/apache2/access.log
# 本日のログだけを表示
$ grep "06/Nov/2025" /var/log/apache2/access.loggrepコマンドは、ログ分析の基本だ。パイプ(|)で複数のコマンドを組み合わせると、さらに詳しい分析ができる。
コマンドラインでの効率的なログ解析
ここからは、もう少し実践的なテクニックを紹介する。これを覚えておくと、いざという時に役立つはずだ。
よくアクセスされるURLをランキング:
$ awk '{print $7}' /var/log/apache2/access.log | \
sort | uniq -c | sort -nr | head -20これで、どのURLが最も多くアクセスされているか分かる。攻撃者が特定のページを集中的に狙っている場合、それが一目瞭然になるんだ。
IPアドレスごとのアクセス数:
$ awk '{print $1}' /var/log/apache2/access.log | \
sort | uniq -c | sort -nr | head -20不自然に多いIPアドレスがあったら、要注意だ。さらに、そのIPアドレスが何をしているか詳しく見てみよう。
ステータスコードごとの集計:
$ awk '{print $9}' /var/log/apache2/access.log | \
sort | uniq -c | sort -nr200(成功)、404(Not Found)、403(Forbidden)などの内訳が分かる。403や404が異様に多かったら、攻撃者が存在しないファイルを探っている可能性がある。
時間帯別のアクセス分析:
$ awk '{print $4}' /var/log/apache2/access.log | \
cut -d: -f2 | sort | uniq -c深夜や早朝に異常にアクセスが多い場合、それは自動化された攻撃かもしれない。正常なユーザーは、普通そんな時間にアクセスしないからね。
プラグインを使った自動監視
コマンドラインが苦手な人、もしくは時間がない人には、プラグインでの自動監視がおすすめだ。これなら、WordPressの管理画面から簡単に設定できる。
でも、プラグインに頼りすぎるのも考えものだ。プラグイン自体が脆弱性の原因になることもある。それに、プラグインはあくまでWordPressレベルのログしか見られない。サーバーレベルの異常は検知できないんだ。
だから僕は、プラグインとコマンドラインの両方を使うことをおすすめする。普段はプラグインで監視して、何か異常があったらコマンドラインで詳しく調べる。これがバランスの取れたアプローチだと思う。
おすすめのログ監視ツールとプラグイン

Wordfence Security
Wordfenceは、WordPressのセキュリティプラグインの中でも特に人気がある。ファイアウォールやマルウェアスキャンに加えて、リアルタイムのトラフィック監視機能が付いている。
主な機能:
- リアルタイムのトラフィック監視
- ログイン試行の記録と分析
- ブルートフォース攻撃の自動ブロック
- 不審なIPアドレスの検出とブロック
管理画面の「Tools」→「Live Traffic」で、リアルタイムのアクセスログが見られる。これが結構便利なんだ。誰がどのページを見ているか、ログインに失敗しているか、すべて可視化される。
ただし、Wordfenceは無料版だと機能が制限されている。リアルタイム監視やIPブロック機能をフルに使うには、有料版(年間119ドル)が必要だ。
<?php
// Wordfenceの設定例(wp-config.phpに追加)
define('WFWAF_ENABLED', true);
define('WFWAF_LOG_PATH', '/var/www/html/wp-content/wflogs/');
?>WP Activity Log
WP Activity Logは、WordPressサイト内で起きたすべてのアクティビティを記録するプラグインだ。誰が記事を公開したか、プラグインをインストールしたか、設定を変更したか。すべての操作履歴が残る。
記録される主なイベント:
- ユーザーのログイン・ログアウト
- 投稿・固定ページの作成・編集・削除
- プラグインやテーマのインストール・更新・削除
- WordPressの設定変更
- ウィジェットやメニューの変更
このプラグインの良いところは、「誰が何をしたか」が明確に分かることだ。複数人で運用しているサイトだと、これが特に役立つ。不正アクセスがあった場合も、どのユーザーアカウントが使われたか、すぐに特定できる。
無料版でも基本的な機能は使えるけど、詳細なフィルタリングやメール通知機能を使うには、有料版(年間99ドルから)が必要だ。
Sucuri Security
Sucuriは、セキュリティに特化したプラグインだ。マルウェアスキャン、ファイル整合性チェック、セキュリティ強化など、幅広い機能が揃っている。
ログ監視関連の機能:
- ログイン試行の記録
- ファイル変更の検出
- 最終ログインの記録
- セキュリティアクションのログ
Sucuriの強みは、ファイル整合性チェック機能だ。WordPressのコアファイルが改ざんされていないか、定期的にチェックしてくれる。もし不正なファイルが追加されたり、既存のファイルが書き換えられたりすると、すぐに通知が来るんだ。
無料版でも基本的な監視機能は使えるけど、本格的なセキュリティ対策をするなら、Sucuriのファイアウォールサービス(月額19.99ドルから)を検討してもいいかもしれない。
注意点:
どのプラグインを使うにしても、覚えておいてほしいことがある。プラグインはあくまで「補助」だ。本当に詳細な分析をするには、やっぱりサーバーのログファイルを直接見る必要がある。
それに、プラグインは動作するためにサーバーリソースを消費する。あまり多くのセキュリティプラグインを入れすぎると、サイトが重くなってしまう。僕の経験では、セキュリティプラグインは1つ、多くても2つに絞るのがベストだ。
ログ監視を続けるための現実的なアプローチ
毎日全部チェックするのは無理
正直に言うと、毎日サーバーにログインして、何千行ものログファイルをチェックするなんて、現実的じゃない。僕だってやってない。
でもね、それでいいんだ。完璧を目指す必要はない。大事なのは、「何かあったときに気づける仕組み」を作っておくことだ。
アラート設定で異常時だけ通知
現実的なアプローチは、アラート機能を活用することだ。異常なアクセスパターンや、不審なログイン試行があったときだけ、メールやSlackで通知が来るように設定する。
Wordfenceの通知設定:
Wordfenceなら、管理画面の「Settings」→「Alerts」で、以下のような通知を設定できる:
- ログイン試行の失敗が一定回数を超えた場合
- 管理者アカウントでログインがあった場合
- プラグインやテーマがインストール・更新された場合
- ファイルが変更された場合
全部の通知をオンにすると、メールが大量に来て逆に面倒だ。だから僕は、本当に重要なもの(管理者ログイン、ファイル変更、攻撃のブロック)だけに絞っている。
サーバー側でのアラート設定:
もっと本格的にやるなら、fail2banというツールを使う方法もある。これはサーバー側で動作するソフトウェアで、ログファイルを監視して、不審なアクセスを自動的にブロックしてくれる。
# fail2banのインストール(Ubuntu/Debian)
$ sudo apt-get install fail2ban
# 設定ファイルの編集
$ sudo nano /etc/fail2ban/jail.local設定例:
[wordpress-login]
enabled = true
port = http,https
filter = wordpress-login
logpath = /var/log/apache2/access.log
maxretry = 5
bantime = 3600この設定だと、5回ログインに失敗したIPアドレスを1時間ブロックする。fail2banは少し設定が面倒だけど、一度設定すれば自動的に働いてくれるから、手間が大幅に減るんだ。
定期的な目視確認との組み合わせ
アラートだけに頼るのも危険だ。アラートは「異常」を検知するものだから、ゆっくりと進行する攻撃には気づけないことがある。
だから僕は、週に1回程度、ログを目視で確認することにしている。具体的には、以下をチェックするんだ:
週次チェックリスト:
- ログイン試行の失敗回数(急に増えていないか)
- 404エラーの内訳(どんなURLがアクセスされているか)
- アクセス数の多いIPアドレス(不審なものがないか)
- 新しいユーザーアカウント(勝手に作られていないか)
- ファイルの更新日時(覚えのない変更がないか)
これなら10分もあればできる。完璧じゃないけど、何もしないよりは遥かにマシだ。
月次での詳細確認:
月に1回は、もう少し詳しくチェックする。プラグインやテーマが最新版になっているか、不要なファイルが残っていないか、データベースの容量は適切か。
こういった定期メンテナンスと組み合わせることで、セキュリティレベルを維持できるんだ。
よくある質問(FAQ)
Q1: ログファイルが大きくなりすぎた場合の対処法は?
ログファイルは放置すると、どんどん肥大化する。数GB、場合によっては数十GBになることもあるんだ。そうなると、ディスク容量を圧迫するし、ログの検索も遅くなる。
対処法:
ログローテーションを設定しよう。これは、ログファイルを定期的に分割して、古いものを圧縮または削除する仕組みだ。
# logrotateの設定ファイル
$ sudo nano /etc/logrotate.d/apache2設定例:
/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
}この設定だと、毎日ログファイルをローテーションして、14日分のログを保持する。古いログは圧縮されるから、ディスク容量も節約できるんだ。
Q2: 共有サーバーでもログ監視はできる?
共有サーバーだと、サーバーのログファイルに直接アクセスできないことが多い。でも、諦める必要はない。
方法1: ホスティング会社の管理画面
多くの共有サーバーは、cPanelやPleskなどの管理画面で、ある程度のログが見られる。アクセスログやエラーログの最新分を確認できる場合が多いんだ。
方法2: WordPressプラグイン
WP Activity LogやWordfenceなどのプラグインを使えば、WordPress内部のログは監視できる。サーバーレベルのログは見られないけど、ログインの試行やファイルの変更は検知できる。
方法3: 外部サービス
Cloudflareなどのセキュリティサービスを使うのも一つの手だ。これなら、サイトへのアクセスをCloudflare側で監視できる。DDoS攻撃やボットのアクセスも、自動的にブロックしてくれる。
Q3: どのくらいの頻度でログを確認すればいい?
これは、サイトの規模や重要度によって変わる。でも、目安としては:
個人ブログや小規模サイト:
- 週1回の目視確認
- 異常時のアラート通知
企業サイトやECサイト:
- 毎日の自動監視(プラグインやツール)
- 週1回の詳細確認
- 異常時の即時通知
大規模サイトや重要なサービス:
- 24時間365日の自動監視
- リアルタイムアラート
- 専任の担当者による監視
大事なのは、「継続すること」だ。最初は頻繁にチェックしても、だんだん面倒になって放置してしまうことが多い。だから、自分が無理なく続けられる頻度を見つけることがポイントなんだ。
Q4: 不審なアクセスを見つけたらどうすればいい?
不審なアクセスを見つけたら、まず落ち着いて状況を確認しよう。パニックになって、いきなりサイトを閉鎖したりする必要はない。
対応手順:
- IPアドレスの確認
そのIPアドレスからのアクセス履歴を全部見る。何をしようとしているか、パターンを把握するんだ。 - 被害の確認
実際にファイルが改ざんされていないか、不正なユーザーが作られていないか、チェックする。 - IPアドレスのブロック
.htaccessやプラグインで、そのIPアドレスをブロックする。
# .htaccessでIPブロック
<IfModule mod_authz_core.c>
Require all granted
Require not ip 45.123.45.67
</IfModule>- パスワードの変更
念のため、管理者アカウントのパスワードを変更する。 - プラグインとテーマの更新
すべてのプラグインとテーマを最新版に更新する。 - ログの保存
証拠として、該当期間のログを別途保存しておく。
Q5: ログ監視だけで十分なセキュリティ対策になる?
正直に言うと、ログ監視だけでは不十分だ。ログ監視は「早期発見」のための手段であって、「予防」ではない。
総合的なセキュリティ対策:
- WordPressとプラグインの定期的な更新
- 強固なパスワードと二要素認証
- 定期的なバックアップ
- ファイアウォールの設定
- SSL/TLSの導入
- ログ監視
これらを組み合わせることで、初めて堅牢なセキュリティが実現できる。ログ監視は、この中の重要な一部なんだ。
まとめ:ログ監視は地味だけど、最も確実な防御手段

ログ監視は、確かに地味な作業だ。派手なセキュリティ対策と比べると、地道で面倒に感じるかもしれない。
でも、僕がこれまで見てきた多くの事例で、最初に異常に気づけたのは、ログを見ていたからだった。プラグインやファイアウォールが防げなかった攻撃も、ログには痕跡が残っていた。
この記事のポイントをおさらいしよう:
- サーバーログは攻撃の「証拠」が残る唯一の場所
- アクセスログとエラーログを定期的に確認する
- ブルートフォース攻撃や脆弱性スキャンの痕跡を見つける
- コマンドラインとプラグインを組み合わせる
- アラート機能で異常時に通知を受ける
- 完璧を目指さず、継続できる仕組みを作る
ログ監視は、サイトを守る最後の砦だと思ってほしい。どんなに強固なセキュリティを構築しても、完全に攻撃を防ぐことはできない。でも、攻撃の兆候を早期に捉えることはできる。
最初は週1回、5分でもいい。ログファイルを開いて、ざっと目を通してみる。それだけで、あなたのサイトの安全性は大きく向上するはずだ。
セキュリティ対策に「完璧」はない。でも、「継続」することはできる。ログ監視を習慣にして、サイトを守り抜いていこう。
WordPressのセキュリティ、不安に思っていませんか?

「自分のサイトは大丈夫だろうか…」
「何から手をつければいいか分からない…」
もしあなたが少しでもそう感じているなら、専門家によるセキュリティ診断を受けてみることを強くお勧めします。
上記のサイトでは、WordPressのプロがあなたのサイトの脆弱性を無料で診断してくれます。問題が見つかれば、具体的な対策方法についてもアドバイスをもらえます。手遅れになる前に、一度プロの目でチェックしてもらい、安心を手に入れましょう。