最終更新日 2024年12月20日

WordPressでDoS攻撃されて突然アクセス数が急激に増加しました

ブログサイトを運営しているとサイバー攻撃を受けることがあります。
実際に先日私もサイバー攻撃を受けたと思われる兆候がありました。自分のサイトがそのような被害に遭うなんて思ってもみませんでした。

しかし調べてみると同様の被害に遭っている方は意外と多いようです。
実際に、「自分が運営しているサイトで異常なアクセス数増加があった」「サイトへ不正アクセスの被害を受けた」という声が多く見受けられました。
例えば、X(旧Twitter)では次のような投稿も見つかります。
こういった投稿からも、自分が運営しているサイトへの不正アクセス(異常なアクセス数増加)されている方は意外と多いことが伺えます。
スポンサーリンクDoS攻撃だと判断するためのつのチ3個のチェック項目

DoS攻撃かどうか判断するための特に重要なチェック項目は以下の3つです。
この他にも、WAFを利用している場合は、WAFのアラートを確認するのも有効です。
アクセスログで同一IPからの大量のリクエスト

通常、同じIPアドレス(インターネット上の機器の住所のようなもの)から、短時間に何千ものリクエストが来ることはあまりありません。
たとえば、一般的なユーザーがWebページを閲覧するとき、数回から数十回のリクエスト(ユーザーがページを開くときに、ブラウザからWebサーバーにデータを要求すること。)しか行わないため、それ以上の大量のリクエストがあれば異常と考えられます。
大量のリクエストが同じIPアドレスから送られている場合、これはサーバーを狙った攻撃の兆候かもしれません。
DoS攻撃かどうかを判断するには、アクセスログ(サーバーへのアクセス履歴)を確認します。
そこには、誰(どのIPアドレス)が、いつ、どのようなリクエストを送ったかが記録されています。
例えば、ログを見てみると同じIPアドレスから何千回も短期間にアクセスがある場合、これはDoS攻撃の可能性があります。このような異常なアクセスパターンを特定することで、「これは通常のユーザーの動きではない」と判断できます。
短時間に同じIPアドレスから何百回、何千回ものリクエストを送信されている場合、DoS攻撃の可能性が高いと思われます。
同一IPからの大量のリクエストがあったかどうかの確認方法

①お名前.comレンタルサーバーへSSH接続する。
お名前.comレンタルサーバーへSSH接続するには秘密鍵と呼ばれるデータの暗号化をするためのカギを用意する必要があります。
お名前ドットコムサーバへSSH接続するする手順の詳細は以下です。
お名前ドットコムトップ画面からログインします。

ログインしたら編集したいサイトのドメインが登録されているレンタルサーバーへ「ログイン」しましょう。編集したいサイトのドメインの横の「ログイン」ボタンを押してください!

レンタルサーバーコントロールパネル画面が表示されるので、画面左の「サーバー」にカーソルを合わせ、「SSH」をクリックします。

次に「SSH Keyを追加」をクリックします。

「自動作成」を選択し、「情報入力する」をクリックします。

Key名にご自身の好きな名前を入力し、「確認する」をクリックします。

「完了する」をクリックします。

すると秘密鍵が発行されますので必ず「ダウンロードする」をクリックしてダウンロードしてください。

ダウンロードすると↓画像のような感じで表示されると思います。この秘密鍵は後程使用するので大切にとっておいてください。

ダウンロードが完了したら以下のフォルダマークをクリックします。

すると、上記の秘密鍵が保存されたフォルダが開きますので、秘密鍵のファイルを一度右クリックで選択し、左クリックをすると「パスのコピー」が表示されると思いますのでクリックします。

そのまま、メモ帳を開いて、右クリックをして「貼り付け」をクリックします。

すると以下のように秘密鍵のパスが貼り付けされるのでこちらも情報も覚えておきましょう。

次にSSH接続に必要な情報を確認します。↓の「詳細」をクリックしてください。

すると、ホスト名やポート番号、ユーザ名など、SSH接続時に必要な情報が表示されます。
※重要情報のため、↓の画像ではマスクしています。
この画面で表示された、「ホスト名」「ポート番号」「ユーザ名」をメモしてください。
SSH接続の際こちらの情報も使用します。

次に、ダウンロードした秘密鍵を使用してレンタルサーバーへSSH接続します。
今回は一番簡単にできるためPowerShellを使用してSSH接続します。
まず、Windowsキーを押下してPowerShellと入力します。以下の赤枠内に「PowerShell」と入力して下さい。

すると以下のようにWindows PowerShell というアプリが表示されると思いますのでこちらをクリックします。

PowerShellが起動出来たら、先ほどメモした情報を使用して実際にコマンドを使用してSSH接続します。
以下のコマンドに先ほどメモした情報をいれて、PowerShell画面に入力してエンターを押してください。
ssh -i "秘密鍵ファイルパス名(先ほどメモ帳に張った情報)" -p ポート番号 ユーザ名@ホスト名
例:ssh -i "C:\Users\goritan\Downloads\Work.pem" -p 2345 r123456789@onamae.com

分かりにくいですが、以下の画像のように[ ~]$と表示されたらSSH接続が成功しています。

テラタームを使用してお名前.comレンタルサーバーへSSH接続する方法は以下の記事に記載されて見てみてください!

②不正アクセスがあった日のアクセスログファイルを確認する。
私の場合は10/10に異常なアクセス数増加がみられたため10/10のアクセスログファイルを確認します。

お名前.comレンタルサーバーへSSH接続したら、以下の順にコマンドを打っていきます。
[サーバホスト名 ~]$ cd logs/
[サーバホスト名 logs]$
[サーバホスト名 logs]$ cd goritarou.com/
※ドメイン名はご自身の独自ドメイン名に変更してください
[サーバホスト名 goritarou.com]$ zcat access_log.20241010.gz | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10
※赤文字の日付を不正アクセスがあった日に変更してコマンドを打ってください。
zcat~~のコマンドの出力結果でその日にアクセスが多かったIPアドレスとそのアクセス数が出力されます。
以下が私の実行結果です。
10/10に「62.197.149.186」からリクエストが742回もありました。このIPアドレスが攻撃者のIPアドレスです。
※ここで確認したIPアドレスは後の確認で使用しますのでメモしておいてください!

wp-login.phpやxmlrpc.phpなど特定のエンドポイントへの異常なアクセス

まず、エンドポイントというのは、サーバーが特定の機能やサービスを提供するための入り口みたいなものです。
例えば、「wp-login.php」はWordPressのログインページで、管理者がログインするための入り口です。「xmlrpc.php」は、外部からWordPressに操作をするためのインターフェース(外から命令を送って記事を投稿するなど)です。
通常のユーザーは、wp-login.phpに何度もアクセスする必要はありません。普通は一度ログインしたらその後は他のページに行くからです。しかし、もしアクセスログに「wp-login.php」への何百回もリクエストが来ていたら、それは攻撃者がパスワードを突破しようとしている可能性が高いです。
xmlrpc.phpに関しても、普通のユーザーが直接このページにアクセスすることはほとんどありません。ここに大量のアクセスがある場合、攻撃者が悪意を持ってこのページを使っている可能性があります。
詳細は以下の記事に記載されていますので気になる方は見てみてください!
①「②不正アクセスがあった日のアクセスログファイルを確認する。」の画面から以下2つのコマンドを打ちます。
[サーバホスト名 logs]$zcat access_log.20241010.gz | grep "wp-login.php"
※日付を不正アクセスがあった日に変更してコマンドを打ってください。
[サーバホスト名 logs]$zcat access_log.20241010.gz | grep "xmlrpc.php"
※日付を不正アクセスがあった日に変更してコマンドを打ってください。
赤文字のコマンドは「wp-login.php」への不正アクセス、青文字は「xmlrpc.php」への不正アクセスの結果が表示されます。
赤文字、青文字のコマンドで複数のIPアドレスの表示がされた場合は要注意です。
普通のユーザーが直接このページにアクセスすることはほとんどないからです。
私が実行した結果、以下の出力がされました。

404エラーの急増

404エラーは存在しないページをリクエストした際に返されるエラーです。
404エラーが急増している場合、それは攻撃者が大量のリクエストを送ってサーバーに負担をかけている可能性がります。
通常のユーザーは短期間で何度も404エラーを引き起こすことはありませんが、攻撃者は存在しないページに大量にアクセスしてサーバーを困らせたり脆弱性を探ったりするためにこうした行動を取ります。
そのため、404エラーの急増は、DoS攻撃の兆候の一つとして重要な確認ポイントです。
404エラーの詳細は以下の記事で解説されていますので気になる方は見てみてください!
初心者必見!404エラーページをカスタマイズしてユーザー体験を向上させる方法 – ITとPCに関連する用語の解説 (stylemap.co.jp)
404エラーが発生しているかどうかは、GoogleAnalyticで確認できます。
以下の画像のように「ページが見つかりません」という表示が多数ある場合は要注意です。

DoS攻撃されたときに実施した対策手順

私が実際に被害に遭った際、以下の手順で対策を実施しました。
この手順を実施すれば今後DoS攻撃の被害を被ることはなくなると思います。
DoS攻撃については以下の記事で解説していますので良かった見てみてください!

攻撃元IPアドレスの特定


お疲れ様!最近、何か面白いことでもあった?

お疲れ様です。実は、自分のブログがDoS攻撃に遭ってしまったみたいで……アクセスが急増して、サイトが落ちちゃったんです。

あらら、それは大変だね。DoS攻撃って初めてか?

はい、初めてです。どうすればいいのか、ちょっと焦ってしまいました……

「うん、分かるよ。でも大丈夫、基本的な対策を覚えておけば、焦らず対応できるようになるよ。まず、DoS攻撃を受けたら何をすると思う?

「うーん……まず、何が起こっているのかを確認するべきですか?

「そうそう、その通り。まずはサーバーのアクセスログをチェックするんだ。攻撃に見える不審なアクセスがないか、特に同じIPからの大量のリクエストがないかを探すんだよ。

なるほど、アクセスログですね。例えば、tail
とかでログを確認するんでしょうか?

「そうだね。tail
でリアルタイムに見てもいいし、もっと詳しく調べるなら、grep
やawk
を使って特定のIPアドレスを抽出してみるといいよ。
例えば、awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
みたいな感じで、アクセス頻度の多いIPを見つけるんだ。

お疲れ様です。実は、自分のブログがDoS攻撃に遭ってしまったみたいで……アクセスが急増して、サイトが落ちちゃったんです。
DoS攻撃の攻撃者の特定は以下の手順で実施します。
手順1: サーバーのアクセスログの確認

先ほど「②不正アクセスがあった日のアクセスログファイルを確認する。」で確認した攻撃元のIPアドレスを使用します。
1日に数百回アクセスがある場合、不正アクセスの可能性が高いです。
手順2:IPアドレスの身元確認

特定されたIPアドレスが本当に攻撃元かどうかを確認するため、さらに調査します。
whoisコマンドを使用して、IPアドレスの情報を取得します。
以下のコマンドでIPアドレスの所有者情報を確認できます。
whois [攻撃元のIPアドレス]
これにより、IPアドレスの所有者、プロバイダ、国などの情報が表示されます。
IPアドレスの地理情報を確認するツールを利用します。
Webサイト「ipinfo.io」や「WhatIsMyIPAddress.com」でIPアドレスを入力し、攻撃元の地理的な位置情報を確認します。
位置情報でヨーロッパやイラン、ポーランドなど身に覚えのないところからのアクセスの場合は不正アクセスの可能性が高いです。
私の場合はヨーロッパからの不正アクセスでした。


攻撃元IPアドレスのブロック


それで攻撃しているっぽいIPを見つけたら、どうするんですか?

そしたら、そのIPアドレスをブロックする方法を考えるんだ。簡単な方法なら、.htaccess
でブロックするか、iptables
を使ってサーバーレベルでブロックすることもできるよ。

.htaccess
でブロックする方法、教えてもらえますか?

もちろん。例えばこんな感じだね。
<Limit GET POST>
order allow,deny
allow from all
deny from 攻撃元のIPアドレス
</Limit>

なるほど……これなら特定のIPアドレスからのアクセスを拒否できますね。

「そうそう。それと、できればWAF(Web Application Firewall)を導入することもおすすめするよ。Cloudflareみたいなサービスを使えば、DoS攻撃からの防御をより簡単に強化できるからね。

なるほど、Cloudflareですか……ちょっと試してみます!

いいね!あと、Fail2Banも使って、不審なアクセスを自動でブロックするのも有効だよ。何度もログイン失敗してるIPなんかを自動で止めてくれるんだ。

「なるほど、いろんな方法があるんですね。少しずつ勉強して試してみます!

今回は「Wordfence Security」というプラグインを使用して攻撃者のIPアドレスをブロックしよう。
「.htaccess」へのアクセスはお名前ドットコムのレンタルサーバーは出来ません。
「.htaccess」へはサーバーの管理者の権限が必要ですが、お名前ドットコムのレンタルサーバーでは、サービス利用者は管理者の権限を与えられていないからです。
そのため、今回は「.htaccess」ではなく、「Wordfence Security」というプラグインを使用して攻撃者のIPアドレスをブロックします。
まず「Wordfence Security」をインストールしましょう。
WordPress設定画面にアクセスし、「プラグイン」をクリックします。
次に、「プラグインの検索」に「Wordfence Security」と入力しましょう。
するとWordfenceと書かれたアイコンのプラグインが表示されると思いますので、このプラグインを「今すぐインストール」をクリックしてインストールします。

インストールが完了したら「有効化」をクリックします。

有効化されると、以下の「Wordfence Securityライセンスを入手」の画面が表示されるのでライセンスを登録しましょう。ライセンスは無料で登録できます。

「Wordfence Securityライセンスを入手」をクリックすると以下の画面に遷移します。
「Get a Free License」をクリックします。

無料のライセンスを利用する場合は以下の赤枠のリンクをクリックしましょう。

メーリングアドレスを登録し、「YES」をクリックし、チェックボックスにチェックを入れ、「Register」をクリックします。

入力したメールアドレスに確認メールが送信されます。

「Install Your Wordfence License」というタイトルのメールが届きます。
メール本文の「Install My License Automatically」をクリックしましょう。

すると、登録したメールアドレスとライセンスキーが入力された状態でWordPressの以下の画面に遷移します。「ライセンスインストール」をクリックしましょう。

ライセンスのインストールが完了すると以下の画面が表示されます。「ダッシュボードへ」をクリックしましょう。

Wordfence ダッシュボード画面から「ファイアウォールを管理」をクリックします。

これでWordfenceのインストールが完了したので、実際に攻撃元IPアドレスをブロックする設定をしていきましょう。
WordPress管理画面より、「Wordfence」の下にある「ファイアウォール」をクリックします。

「ブロック」をクリックします。

ブロックタイプで「IPアドレス」を選択し、ブロックするIPアドレスの項目で「サーバーのアクセスログの確認」で確認した不正アクセスをしたと思われるIPアドレスを入力します。
ブロック理由は「不正アクセスのため」などとしておきましょう。
入力が完了したら「このIPアドレスをブロック」をクリックします。

設定が完了すると以下のように、入力したIPアドレスをブロックする設定が反映されています。
これでもう攻撃者はサイトにアクセスできません。

レートリミットの設定

WordPressでレートリミット(一定時間内のリクエスト数の制限)を設定することにより、不審なアクセスを減らし、DoS攻撃やブルートフォース攻撃(パスワードを次々に試す攻撃)からサイトを守ることができます。
WordPressでは、プラグインを使うことで簡単にレートリミットを設定することができます。今回私はは、「Wordfence Security」というプラグインを使用し以下の設定を行いました。
「同一IPからのアクセスを制限」:
例えば、「60秒間にアクセスが50回以上あった場合は制限」など、IPごとにアクセス回数を制限する設定をします。
「人間とボットのアクセスを区別」:
ボットからの過剰なリクエストを制限しつつ、正当なユーザーには通常通りアクセスを許可します。
まず、WordPress管理画面から、Wordfenceの下にある、「ファイアウォール」をクリックします。

次に「レート制限」をクリックします。

するとレート制限の設定画面に画面が自動でスクロールされます。
この画面で以下のように設定しましょう。
誰かのリクエスト数が超過 :分当たり240
人間のページが見つからない (404s) が超過 :分当たり240
この設定で、1分間に240回以上アクセスするユーザーを制限、1分間に20回以上404エラーを発生させるIPを制限します。

最後に画面右上の「変更を保存」をクリックして設定を保存します。

Wordfenceに関する他設定は以下のサイトで詳しく解説されているので見てみてください!

対策の重要性

DoS攻撃自体は主にシステムを使えなくすることを目的としていますが、その背後には、個人情報が盗まれるリスクも潜んでいます。
DoS攻撃はPCやネットワークの過負荷を利用して脆弱性を生じさせたり、攻撃の混乱状態を狙ってマルウェアやフィッシングを仕掛けたりする前段階の攻撃として使用されます。
そのため、こうした状況が生まれることで、通常なら防げる攻撃が通過してしまい、結果として個人情報が盗まれるリスクが高まります。
DoS攻撃に対してしっかりと対策を取ることが、自分の個人情報を守るために非常に重要です。

ゴリタン
インフラエンジニアとして、ネットワークとサーバーの運用・保守・構築・設計に幅広く携わり、
現在は大規模政府公共データの移行プロジェクトを担当。
CCNPやLPICレベル3、AWSセキュリティスペシャリストなどの資格を保有しています。