「ログイン試行回数制限」って何をする仕組みか
まずイメージからいきましょう。
ログイン画面で、ユーザー名とパスワードを何度も間違えると、こうなりますよね。
「一定回数間違えたので、しばらくログインできません」
これが「ログイン試行回数制限」です。
WordPress では、標準ではこの仕組みがありません。
何回でも、何千回でも、パスワードを試すことができてしまいます。
そこで「ログイン試行回数制限を導入する」というのは、
同じIPアドレス(またはユーザー)から
短時間に何度もログイン失敗が続いたら
一時的にそのアクセスをブロックする
という“ブレーキ”を追加することです。
なぜ WordPress に「試行回数制限」がほぼ必須なのか
総当たり攻撃(ブルートフォース攻撃)を現実的に防ぐため
攻撃者やボットは、こんなことを平気でやります。
ユーザー名を「admin」「test」「info」など片っ端から試す
パスワードを「123456」「password」「qwerty」など大量に試す
これを自動で、何千回・何万回と投げてきます。
もし試行回数に制限がなければ、
「いつかは当たるかもしれない」
という状態です。
ログイン試行回数制限を入れると、
例えば「5回連続で失敗したら15分ロック」
のように設定できます。
すると攻撃者は、
5回試す → ロック
15分待つ → また5回 → ロック
という、非常に効率の悪い攻撃しかできなくなります。
これは、総当たり攻撃に対してものすごく効きます。
パスワードが“そこまで強くなくても”守りやすくなる
もちろん、本当は強いパスワードを使うべきです。
でも現実には、
英数字記号まぜまぜの超強力パスワード
を全員が使っているわけではありません。
ログイン試行回数制限は、
パスワードの強さ
+
「何回まで試せるか」
という2つ目の防御レイヤーを追加してくれます。
「強いパスワード」+「試行回数制限」
この組み合わせは、攻撃者からすると本当に割に合わないターゲットになります。
仕組みをもう少し分解してみる
何を基準に「制限」するのか
多くのプラグインでは、次のような情報を使って制限します。
IPアドレス
同じIPからの連続失敗回数をカウントする
ユーザー名
特定ユーザー名に対する連続失敗をカウントする
時間
「◯分以内に◯回失敗したらロック」のように時間枠を決める
例えば、
「10分の間に5回失敗したら、そのIPを30分ロック」
というルールを設定すると、
同じIPからの総当たり攻撃
同じユーザー名を狙った攻撃
をかなりの確率で止められます。
ロックされたときの挙動
ロックされたIPからログインしようとすると、
「試行回数が多すぎます。しばらくしてから再度お試しください」
のようなメッセージが出たり、
ログインフォーム自体が表示されなくなったりします。
ここで重要なのは、
「正しいパスワードを入力しても、ロック中は入れない」
という点です。
つまり、攻撃者だけでなく、自分もロックの対象になります。
だからこそ、設定値は「厳しすぎず、甘すぎず」が大事になります。
どんな設定にすればいいか(考え方の軸)
例:初心者向けの“無難なライン”
あくまでイメージですが、こんな設定がよく使われます。
5回連続で失敗したらロック
ロック時間は15〜30分
同じIPからのロックを数回繰り返したら、もっと長くロック
このくらいなら、
普通の人がうっかり2〜3回間違える
→ まだセーフ
明らかに総当たりしているボット
→ すぐロック
というバランスになります。
厳しすぎる設定の落とし穴
例えば、
3回失敗で1時間ロック
のように厳しくしすぎると、
パスワードをちょっと打ち間違えた管理者
→ すぐ自分で自分をロックしてしまう
という事故が起きやすくなります。
特に、複数人で運用しているサイトでは、
誰かが何度も間違える
→ 全員が巻き込まれて困る
ということもあり得ます。
「攻撃を止めたい気持ち」と
「自分たちが使いやすいこと」のバランスを取るのが大事です。
実際の導入イメージ(プラグイン前提)
1. ログイン試行回数制限系のプラグインを入れる
WordPress 本体には、標準で試行回数制限はありません。
なので、基本的にはプラグインで機能を追加します。
セキュリティ総合プラグイン(Wordfence, iThemes Security など)
ログイン試行回数制限専用プラグイン
どちらかを使うのが一般的です。
プラグインを有効化すると、
管理画面に「ログイン制限」「Brute Force Protection」などの設定項目が増えます。
2. 回数・時間・対象を決める
設定画面では、だいたい次のような項目を決めます。
何回失敗したらロックするか
ロック時間は何分か
同じIPの再ロック条件はどうするか
ログインページ以外(XML-RPCなど)も対象にするか
ここで、さきほどの「無難なライン」を参考にしつつ、
自分のサイトの運用に合わせて調整します。
例えば、
管理者が自分だけ → 少し厳しめでもOK
複数人がログインする → ちょっと余裕を持たせる
という感じです。
例題:攻撃が来たときの挙動をイメージしてみる
試行回数制限なしの場合
攻撃者(ボット)が、
ユーザー名:admin
パスワード:辞書にある単語を片っ端から
を自動で試していきます。
1秒に数回〜数十回のペースで、
延々とログイン試行が続きます。
結果として、
サーバー負荷が上がる
ログが大量に汚れる
運が悪いとパスワードが当たる
という、あまり嬉しくない状態になります。
試行回数制限ありの場合
同じ攻撃を仕掛けられても、
5回失敗 → そのIPを30分ロック
というルールがあると、
攻撃者は5回試した時点で強制終了
30分待たないと次の5回を試せない
という状態になります。
1秒に何十回も試せていた攻撃が、
「1時間に10回も試せない」レベルまで弱体化します。
これは、攻撃者からすると「別のサイトを狙った方が早い」と思わせる効果があります。
自分がロックされたときの対処イメージ
管理者が自分で自分をロックしてしまった場合
ありがちなパターンです。
パスワードを何度か間違える
→ 設定した回数を超える
→ 自分のIPがロックされる
このときは、
ロック時間が来るまで待つ
別のIP(スマホ回線など)からログインする
サーバー側からプラグイン設定をリセットする
などの方法があります。
一番簡単なのは「時間が来るまで待つ」ですが、
どうしても今すぐ入りたい場合は、
サーバーに入れる人(自分 or サーバー管理者)が
プラグインの設定を一時的に無効化する、という手もあります。
「自分もロック対象になる」ことをチームで共有する
複数人で運用している場合は、
ログイン試行回数制限を入れたこと
何回まで間違えられるか
ロックされたらどうなるか
を、最初に全員に共有しておくとトラブルが減ります。
プログラミングの感覚で捉える「ログイン試行回数制限」
これは「レートリミット+ロック」の仕組み
API の世界では、
同じIPからのリクエストが多すぎたら制限する
一定時間はアクセスを拒否する
という「レートリミット」がよく使われます。
ログイン試行回数制限は、
それをログイン処理に特化して適用したものです。
ログイン失敗回数をカウントする
閾値を超えたら、そのIPを一定時間ブロックする
という、とてもシンプルだけど強力なミドルウェアです。
「攻撃コストを上げる」という発想
セキュリティは、
完全に防ぐ
というより
攻撃コストを上げる
という発想が大事です。
ログイン試行回数制限は、
「このサイトを本気で狙うなら、かなり手間がかかるよ」
という状態を作るための仕組みです。
攻撃者は、
簡単に破れるサイトから順に狙っていきます。
あなたのサイトを「簡単ではない側」に移すことが、
この設定の本当の価値です。
まとめ:ログイン試行回数制限は“安くて強い防御レイヤー”
「ログイン試行回数制限を導入する」というのは、
総当たり攻撃を現実的に無力化する
パスワードが破られるリスクを大きく下げる
サーバー負荷やログのノイズも減らす
という、コスパの高いセキュリティ対策です。
やることはシンプルで、
対応プラグインを入れる
失敗回数・ロック時間を決める
自分たちもロック対象になることを理解する
この3ステップだけです。
2段階認証やログインURL変更と組み合わせれば、
あなたの WordPress は、
「とりあえず狙われるサイト」から
「わざわざ狙う価値のない、堅いサイト」に変わっていきます。


