WordPress Tips | セキュリティ:ログイン試行回数制限を導入

web Web
スポンサーリンク

「ログイン試行回数制限」って何をする仕組みか

まずイメージからいきましょう。
ログイン画面で、ユーザー名とパスワードを何度も間違えると、こうなりますよね。

「一定回数間違えたので、しばらくログインできません」

これが「ログイン試行回数制限」です。
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 は、
「とりあえず狙われるサイト」から
「わざわざ狙う価値のない、堅いサイト」に変わっていきます。

タイトルとURLをコピーしました