📋 目次

⚔️ 1. ログインへの攻撃パターンを理解する

適切な対策を選ぶために、まず攻撃者がどのようにWordPressのログインを狙うかを理解しましょう。

主なログイン攻撃の種類

攻撃種別仕組み効果的な対策
ブルートフォース攻撃同一IPから大量のパスワードを試す試行回数制限・CAPTCHA・IP制限
分散型ブルートフォース複数のIPから少量ずつパスワードを試す2FA・強固なパスワード・WAF
クレデンシャルスタッフィング他サービスから流出したID/PWを試すパスワード使い回し禁止・2FA
辞書攻撃よく使われるパスワードリストを順番に試す強固なパスワード・試行回数制限
XMLRPCへの攻撃xmlrpc.phpを使った無制限のログイン試行xmlrpc.phpの無効化
🚨 見落としがちな攻撃経路:xmlrpc.php:WordPressのxmlrpc.phpはログイン試行回数の制限が適用されないため、ブルートフォース攻撃の抜け穴になります。このファイルを使っていない場合(JetpackやWP to Twitter等を使っていなければ不要)は無効化することを強く推奨します。

典型的なブルートフォース攻撃のタイムライン

攻撃開始 ボットが/wp-login.phpを発見。「admin」というユーザー名でパスワードリストの試行を開始。
1分後 1000〜10000回/分のペースでパスワードを試行。制限がなければ短時間で弱いパスワードを突破。
突破後 管理画面にアクセス成功。バックドア設置・スパムメール発信・仮想通貨採掘スクリプト挿入などを実行。

🔗 2. 【対策1】ログインURLの変更

WordPressのデフォルトログインURL(/wp-admin//wp-login.php)は世界中で知られており、攻撃ボットが真っ先に探します。URLを変更するだけで自動攻撃の大半を回避できます。

🛡️
SiteGuard WP Plugin 日本語対応・推奨

日本語のCAPTCHA機能付き。ログインURL変更・試行回数制限・管理ページ保護をワンパッケージで提供。国内サーバーでの利用実績が最も多い。

無料初心者OK日本語CAPTCHA
🔒
WPS Hide Login

URLの変更のみに特化したシンプルなプラグイン。軽量で他のセキュリティプラグインとの併用も容易。既にWordfenceを使っている場合はこちらが適している。

無料軽量URL変更特化

SiteGuard WP Pluginでのログインページ変更手順

1
SiteGuardをインストール・有効化
⏱ 約5分
1
プラグインのインストール

管理画面 → プラグイン → 新規追加 → 「SiteGuard WP Plugin」を検索 → インストール → 有効化

2
有効化直後にメモを取る

プラグインを有効化すると自動的にログインURLが変更されます。画面に表示される新しいURLを必ずすぐにメモしてください。忘れると自分もログインできなくなります。

2
ログインURLをカスタマイズする
⏱ 約5分
1
ログインページ変更設定を開く

管理画面 → SiteGuard → ログインページ変更 → ランダムな文字列をより覚えやすい文字列に変更(例:login_abc123xyz

2
新URLをブックマークに保存

変更後の新URLをブラウザのブックマークに保存し、パスワードマネージャーにも記録してください。

💡 差別化ポイント:xmlrpc.phpも同時に無効化する:SiteGuardには「XMLRPCへのアクセスを無効化」機能があります。SiteGuard → XMLRPC防御 → 有効を選択してください。Jetpackや一部のモバイルアプリを使っている場合はXMLRPCが必要なため、「ピンバックを無効化する」のみを選択してXMLRPCは有効のままにしてください。

🚫 3. 【対策2】ログイン試行回数の制限

同一IPからの連続したログイン失敗をブロックする設定です。ブルートフォース攻撃対策として最も基本的かつ効果的な手法です。

推奨設定値

設定項目推奨値注意事項
ロックアウトまでの失敗回数3〜5回厳しすぎると自分もロックされる
ロックアウト時間20〜60分短すぎると攻撃再開を許す
ロックアウト通知メール通知を有効化攻撃を早期検知できる
自分のIPをホワイトリスト推奨(固定IPの場合)自分がロックされるリスクを解消

Limit Login Attempts Reloadedを使った設定

1
プラグインをインストール・設定する
⏱ 約10分
1
Limit Login Attempts Reloadedをインストール

管理画面 → プラグイン → 新規追加 → 「Limit Login Attempts Reloaded」を検索 → インストール → 有効化

2
設定画面で推奨値を入力

設定 → Limit Login Attempts → 「許可するリトライ回数」を4、「ロックアウト時間」を30分に設定 → 「GDPR準拠メッセージ」を有効化 → 保存

3
メール通知を有効化

「ロックアウト後にメールで通知する」を有効にすると、攻撃発生時に管理者にメールが届きます。攻撃の傾向を把握するためにも有効化推奨です。

⚠️ SiteGuardとの重複に注意:SiteGuard WP PluginにもログインPHPへのアクセス制限機能があります。Limit Login Attempts Reloadedと同時に使う場合は設定が重複しないよう確認してください。Wordfenceを使う場合はWordfenceのブルートフォース保護で代替できます。

🤖 4. 【対策3】CAPTCHA(reCAPTCHA)の設定

CAPTCHAはログインフォームに「人間であることの証明」を追加する仕組みです。ボットによる自動ログイン試行を効果的に防ぎます。

CAPTCHAの種類と比較

種類仕組みUXおすすめ度
reCAPTCHA v2(チェックボックス)「私はロボットではない」チェックやや手間★★★☆☆
reCAPTCHA v3(スコアベース)ユーザーの行動を分析・スコア判定クリック不要★★★★☆
日本語CAPTCHA(SiteGuard)ひらがなを画像で表示・入力確認日本語話者には自然★★★★★(国内サイト)
hCaptchareCAPTCHAの代替・プライバシー重視普通★★★★☆
Cloudflare Turnstile完全非表示・バックグラウンド検証最もスムーズ★★★★★
💡 差別化ポイント:Cloudflare Turnstileが2024年以降の最有力選択肢:GoogleのrečAPTCHAはプライバシーポリシーの観点からEUのGDPR規制との整合性が課題になっています。Cloudflare Turnstileは完全に非表示で動作し(ユーザーの操作不要)、プライバシー保護も高く、WordPressプラグイン「Cloudflare Turnstile」で簡単に導入できます。Cloudflareの無料プランでも利用可能です。

Google reCAPTCHA v3の設定手順

1
Google reCAPTCHAのAPIキーを取得する
⏱ 約10分
1
Google reCAPTCHA管理コンソールへアクセス

https://www.google.com/recaptcha/adminにアクセスし、Googleアカウントでログイン → 「+」ボタンで新規登録

2
サイト情報を入力

ラベル:サイト名を入力
reCAPTCHAタイプ:「v3」を選択
ドメイン:あなたのドメインを追加 → 送信

3
サイトキーとシークレットキーをコピー

表示される「サイトキー」と「シークレットキー」を安全な場所に保存します(次のステップで使用)。

2
WordPressにreCAPTCHAを設定する
⏱ 約10分
1
Advanced noCaptcha & invisible Captchaプラグインをインストール

管理画面 → プラグイン → 新規追加 → 「Advanced noCaptcha」を検索 → インストール → 有効化

2
APIキーを入力して設定

設定 → Advanced noCaptcha → 取得したサイトキーとシークレットキーを入力 → 適用箇所で「ログインページ」を選択 → 保存

📱 5. 【対策4】二要素認証(2FA)の詳細設定

二要素認証は基本対策ページでも紹介しましたが、ここでは権限別の設定や複数ユーザーがいる場合の管理方法も含めて詳しく解説します。

権限別の2FA適用設定

すべてのユーザーに2FAを強制するか、管理者のみに適用するかを選択できます。WooCommerceなど会員制サイトでは顧客全員に2FAを強制すると離脱につながるため注意が必要です。

ユーザー権限2FA推奨度理由
管理者(Administrator)★★★★★ 必須最も高い権限を持つためリスク最大
編集者(Editor)★★★★☆ 強く推奨コンテンツ改ざんのリスクあり
投稿者(Author)★★★☆☆ 推奨記事投稿・編集権限あり
購読者(Subscriber)★☆☆☆☆ 任意権限が低いため優先度は低い
💡 差別化ポイント:アプリパスワード(Application Passwords)の無効化:WordPress 5.6以降に追加された「アプリパスワード」機能は、REST APIやXMLRPCで2FAをバイパスできる抜け穴になる可能性があります。REST APIを使っていない場合は、wp-config.phpに以下を追記してアプリパスワードを無効化することを推奨します:
add_filter( 'wp_is_application_passwords_available', '__return_false' );

🌐 6. 【対策5】IPアドレス制限(上級)

固定IPアドレスを持っている場合、ログインページへのアクセスを特定のIPのみに制限することで、他のすべてのIPからのアクセスをブロックできます。最も強力な防御ですが、外出先やモバイルからのアクセスができなくなる場合があります。

.htaccessによるログインページのIP制限

WordPressルートの.htaccessに以下を追記します(YOUR_IPを自分のIPアドレスに変更):

# wp-login.phpへのアクセスをIPで制限
<Files wp-login.php>
    order deny,allow
    deny from all
    allow from YOUR_IP
    # 複数IPを許可する場合は以下に追加
    # allow from ANOTHER_IP
</Files>

# wp-adminディレクトリへのアクセスをIPで制限
<Directory /wp-admin>
    order deny,allow
    deny from all
    allow from YOUR_IP
</Directory>
⚠️ 自分のIPアドレスを確認してから設定:現在のIPアドレス確認」などのサービスで現在のIPを確認してから設定してください。IPを間違えると自分もログインできなくなります。また、インターネット接続が変わるたびにIPが変わる場合(動的IP)はこの方法は実用的ではありません。

Cloudflareを使ったアクセス制御(推奨)

CloudflareのAccess機能(無料プランでも一部利用可能)を使うと、ログインページへのアクセスをメールアドレス認証などで保護できます。IPが変わっても対応できるため、動的IPユーザーにも適しています。詳細はWAF設定ページで解説しています。

📊 7. ログイン履歴・ログの確認方法

不正アクセスの早期検知のために、ログイン履歴を定期的に確認することが重要です。

Simple History プラグインで確認する

1
Simple Historyをインストール・設定
⏱ 約5分
1
プラグインのインストール

プラグイン → 新規追加 → 「Simple History」を検索 → インストール → 有効化。ダッシュボードにログイン履歴が表示されるようになります。

2
不審なログインを確認する

ダッシュボード → Simple History で以下を確認:
・見知らぬIPアドレスからのログイン成功
・自分が行っていない設定変更
・深夜帯のログイン
・連続したログイン失敗

🆘 8. ロックアウトしてしまった場合の対処法

セキュリティ設定を誤って自分がログインできなくなった場合の対処法です。

方法1:プラグインをFTPで無効化する

1
FTPでプラグインフォルダをリネーム
⏱ 約10分
1
FTPでサーバーに接続

FTPクライアント(FileZilla等)でサーバーに接続し、wp-content/plugins/ディレクトリを開く。

2
原因のプラグインフォルダをリネーム

ロックアウトの原因と思われるプラグインのフォルダ名を変更(例:siteguardsiteguard_disabled)。WordPressはフォルダが見つからないとプラグインを自動的に無効化します。

3
ログイン後にフォルダ名を戻す

管理画面にログインできたら、フォルダ名を元に戻してから設定を修正し、再度有効化してください。

方法2:デフォルトのログインURLに直接アクセス

ログインURLを変更している場合でも、/wp-login.phpに直接アクセスすると、多くの場合SiteGuardの保護を迂回してアクセスできます(SiteGuardの設定によります)。

✅ 予防策:緊急用アクセス手順をメモしておく:ロックアウトに備えて①FTPのID/PW、②サーバーパネルのID/PW、③データベースパスワードを安全な場所に保管しておきましょう。これらがあれば、どんなロックアウトでも復旧できます。

❓ 9. よくある質問(FAQ)

Q. ログインURLを変更するメリットは?自分が忘れたらどうなりますか?
変更だけで自動攻撃の大半を回避できます。URLを忘れた場合、多くのプラグインはfunctions.phpや.htaccessに記録しているため、FTPでサーバーにアクセスして確認できます。SiteGuardの場合は.htaccessに設定が記録されています。
Q. ログイン試行回数は何回に制限すればよいですか?
一般的には3〜5回が推奨です。ロックアウト時間は20〜60分程度が適切です。自分の固定IPをホワイトリストに登録しておけば、設定ミスで自分がロックアウトされるリスクも解消できます。
Q. SiteGuardとWordfenceは同時に使えますか?
同時使用は可能ですが、機能が重複する部分があります。一般的には「SiteGuardはログインURL変更・日本語CAPTCHA、Wordfenceはファイアウォール・マルウェアスキャン」と役割分担することで相互補完できます。ただし両方のブルートフォース保護を同時に有効にすると設定が複雑になるため、片方に統一することを推奨します。
Q. xmlrpc.phpを完全に無効化しても問題ありませんか?
Jetpackプラグイン・スマートフォンのWordPressアプリ・外部からの投稿機能(WP to Twitter等)を使っていない場合は、無効化しても問題ありません。SiteGuardの「XMLRPC防御」またはWordfenceの「ブロックXML-RPCへのアクセス」で簡単に無効化できます。
Q. 海外からのアクセスを一括ブロックする方法はありますか?
日本語サイトであれば、海外IPからのログイン試行を一括ブロックすることが有効です。Wordfenceの「国別ブロック」(有料版)、Cloudflareの「地域ブロック」(無料プラン一部制限あり)、またはiThemes Securityの「特定国のIPをブロック」機能で対応できます。ただしVPNを使った攻撃は防げません。