はじめに
Gearroom の市場カウンターには、メインとモバイルのログインページがあります。どちらも同じ会員の貸出記録を開きます。ポリシーはすでにアカウント単位で数えていますが、2ページには別々のカウンターがあります。片方で制限された会員は、もう片方でまだ認証できます。
限定的な Hydra 試行でこの隙間を示し、両入口を1つの共有アカウント制限にまとめます。両方向を実証し、別の会員の通常ログインを保ち、クールダウンの自然終了後の回復を確認します。成果は実際のリクエスト履歴と変更のない記録を伴う、有効な稼働中ポリシーです。レポートではありません。
このガイド付きラボは Limit Attempts by Account を前提とします。そこで扱った Hydra のフォーム引数、既知の成功マーカー、JSON ポリシー、curl 診断、deskctl コマンドを理解している必要があります。これらの仕組みは変わりません。環境は別の会員と記録で新規に初期化され、前のファイル、セッション、プロセスは引き継ぎません。Workstation が準備済みターミナル、Equipment Desk がサイトです。両方とも同じ隔離トレーニングコンテナの入口です。アカウントとデータはすべてローカルの合成資源です。
読解や一般的なミスを含めて約50分を見込んでください。著者の見積もりであり、初心者の実測値ではありません。誤ったパスワードを繰り返し送ってよいのは指定されたテスト会員だけです。参照用会員には既知の正しいパスワードを使います。元のサービス、アカウント、記録、トレーニング値を保ってください。
1つのアカウントに2つの入口があることを確認する
このステップでは、2ページが実際に同じ会員を認証し、同じ貸出記録を開くことを確かめます。似たラベルだけで、同一のユーザーとは判断できません。
Equipment Desk、続いて Review brief を開きます。許可されたテスト会員は samplemember、パスワードは Sample24 です。通常の参照用会員は deskteam、パスワードは Desk24 です。
Member sign-in でテスト会員の認証情報を送信し、Open your record を選びます。samplemember、貸出 LN-318、Jules Chen、Workshop camera kit、受取 Friday 09:30、返却 Monday 16:00 と、両バッテリーをラベル付き袋に入れる注意事項を確認します。Sign out を選びます。

実際の各ログイン後に、Member と Record、両時刻、梱包の注意事項を比べます。2ページともこの同じ記録を開くはずです。
Mobile sign-in を選び、同じテスト認証情報で記録を開きます。同じユーザー、貸出、全詳細を確認し、ログアウトします。同じ会員ディレクトリへの2つの入口であり、別アカウントや別ホストではありません。
Member sign-in で deskteam / Desk24 を使い、その記録を開きます。LN-087、Ari Lane、Folding projection screen と、梱包前にスクリーンを乾いた状態に保つ注意書きがあります。再びログアウトします。
Workstation に切り替えます。開始場所は /home/labex/project/login-limits です。pwd で確認します。
pwd
別の場所にいる場合、前と同じディレクトリ変更コマンドを使います。
cd /home/labex/project/login-limits
準備済みポリシーと実際の有効なポリシーを読みます。
cat policy.json
deskctl status
key はすでに account です。entry_groups では /signin は desktop、/mobile/signin は mobile に属します。グループは、そのアカウントでカウンターを共有する入口を識別します。現在、異なるラベルのため同じ会員に別カウンターが与えられています。3回の失敗、30秒のウィンドウ、12秒のクールダウンを保ってください。
別の入口に残る隙間を観察する
このステップでは、メイン入口を制限し、そのクールダウン中にモバイル入口で実際のログインができることを示します。
Workstation に留まります。準備済みファイルには、許可されたテスト会員用の、意図的に誤った5候補だけが含まれています。
cat wrong-passwords.txt
実際の POST パスは、2つの可視フォームの下に示されています。どちらも username と password を使います。ループバックアドレス 127.0.0.1 とポート 8080 が、このローカルトレーニングサービスに届きます。Hydra の -l はここでは samplemember を選びます。-P、-s、-t 1、-I、引用符付き POST 引数、S=Signed in as は最初のラボと同じ意味です。候補はすべて誤りなので、完全な実行は 0 valid password found と報告するはずです。この出力だけでは別入口の保護を証明できません。
以前の試行が自然に終了するのを待ちます。
deskctl wait
次の4コマンドを、途中で読むために止まらずまとめて実行します。curl 診断は既知の正しいパスワードを使います。-o は各応答本文を保存し、-w は HTTP ステータスを表示します。
hydra -I -l samplemember -P wrong-passwords.txt -s 8080 -t 1 127.0.0.1 http-post-form '/signin:username=^USER^&password=^PASS^:S=Signed in as'
curl -s -o main-probe.html -w 'Main HTTP %{http_code}\n' --data 'username=samplemember&password=Sample24' http://127.0.0.1:8080/signin
curl -s -o mobile-probe.html -w 'Mobile HTTP %{http_code}\n' --data 'username=samplemember&password=Sample24' http://127.0.0.1:8080/mobile/signin
curl -s -o reference-probe.html -w 'Reference HTTP %{http_code}\n' --data 'username=deskteam&password=Desk24' http://127.0.0.1:8080/mobile/signin
Main HTTP 429、Mobile HTTP 200、Reference HTTP 200 になるはずです。同じテスト会員がメインでは制限され、モバイルでは認証できます。200 だけを信じず、モバイル側のユーザーを確認します。
grep -o 'Signed in as samplemember' mobile-probe.html
実際のサーバー判断を読みます。
deskctl events
同じリビジョンで、samplemember が /signin でしきい値に達し、メインログインが制限され、/mobile/signin では認証成功するイベントを探します。単一入口の制限イベントだけでは、入口間の制限は証明できません。参照用会員は依然として別アカウントであり、その成功によってこの隙間が修正されるわけではありません。
履歴はクールダウン後も読めます。観察ウィンドウを逃したら、deskctl wait を終えて同じ限定ブロックを繰り返します。接続または Hydra 構文エラーでは、完全な引数、アドレス、ポート、宣言されたパスを先に直します。HTTP 400 は送信フィールド名や構造の誤り、404 はパスの誤りです。通常の誤記で VM をリセットする必要はありません。
両ページを同じアカウントグループに入れる
このステップでは、両 POST パスが同じ会員に対して1つのカウンターを使うようにします。アカウント同士の分離は維持します。
Workstation に留まります。ポリシーファイルを次の完全なオブジェクトに置き換えます。引用符付きヒアドキュメントは JSON を文字どおりに保持します。終了マーカー EOF は行頭に空白を付けず、単独の行に置きます。前と同様に、> はローカルファイルを上書きします。
cat > policy.json <<'EOF'
{
"key": "account",
"entry_groups": {
"/signin": "members",
"/mobile/signin": "members"
},
"failed_attempts": 3,
"window_seconds": 30,
"cooldown_seconds": 12
}
EOF
両ルートのグループラベルが同じになりました。ラベルは短い空でない名前であり、特殊なキーワードではありません。同等の別の共有名も使えます。長さは最大48文字です。アカウントキー、両方の実際のルートキー、定められた値を保ちます。ルートの削除、フォーム無効化、グローバルカウンターへの復帰では課題を満たしません。
ファイルを明示的に適用します。
deskctl apply policy.json --wait
変更されたポリシーは、既存の試行状態が自然に終了するのを待ちます。有効なカウンター、履歴、会員記録を消したり、プロセスを再起動したりしません。同じポリシーの再適用は引き続き変化を起こしません。JSON カンマ不足やフィールドの誤りでは旧ポリシーが有効なままです。再試行前にファイルを直してください。
deskctl status
新しいリビジョン下で、有効な account キーと一致するグループラベルを確認します。ローカルファイルが正しいだけでは不十分で、サービスが実際に使う必要があります。ここからは以前の分離グループのイベントではなく、このリビジョンの証拠が必要です。
両方向をテストし会員アクセスを保つ
このステップでは、どちらのページの失敗も他方を制限し、参照用会員は引き続き作業でき、テスト会員は自然に回復することを実証します。
Workstation に留まります。まずメインからモバイルをテストします。
deskctl wait
この完全なブロックをまとめて実行します。
hydra -I -l samplemember -P wrong-passwords.txt -s 8080 -t 1 127.0.0.1 http-post-form '/signin:username=^USER^&password=^PASS^:S=Signed in as'
curl -s -o mobile-probe.html -w 'Mobile HTTP %{http_code}\n' --data 'username=samplemember&password=Sample24' http://127.0.0.1:8080/mobile/signin
curl -s -o reference-probe.html -w 'Reference HTTP %{http_code}\n' --data 'username=deskteam&password=Desk24' http://127.0.0.1:8080/mobile/signin
Hydra の発見はゼロで、Mobile HTTP 429、Reference HTTP 200 になるはずです。保存された2つの本文も一致するはずです。
grep -o 'Too many attempts' mobile-probe.html
grep -o 'Signed in as deskteam' reference-probe.html
deskctl events
現在のリビジョンに、メインのしきい値、モバイル拒否、通常の参照用認証が必要です。自然な回復を待ちます。
deskctl wait
Equipment Desk に切り替え、Mobile sign-in で samplemember / Sample24 を使い、Open your record を選びます。変更のない LN-318 カメラ記録とバッテリー袋の注意事項を確認し、Sign out します。この新しいモバイルログインが、メイン入口の制限からの回復を示します。
Workstation に戻り、方向を逆にします。
deskctl wait
この完全なブロックをまとめて実行します。
hydra -I -l samplemember -P wrong-passwords.txt -s 8080 -t 1 127.0.0.1 http-post-form '/mobile/signin:username=^USER^&password=^PASS^:S=Signed in as'
curl -s -o main-probe.html -w 'Main HTTP %{http_code}\n' --data 'username=samplemember&password=Sample24' http://127.0.0.1:8080/signin
curl -s -o reference-probe.html -w 'Reference HTTP %{http_code}\n' --data 'username=deskteam&password=Desk24' http://127.0.0.1:8080/signin
発見はゼロで、Main HTTP 429、Reference HTTP 200 になるはずです。
grep -o 'Too many attempts' main-probe.html
grep -o 'Signed in as deskteam' reference-probe.html
deskctl events
今度はモバイルのしきい値後にメインの拒否が必要です。最初の結果を改名したものではなく、異なる方向です。診断が遅すぎたら、状態が自然に落ち着いてから、その限定方向を繰り返します。候補を増やしたり、カウンターをリセットしたりしないでください。
deskctl wait
Equipment Desk に切り替え、Member sign-in で samplemember / Sample24 を使い、元の LN-318 記録を開きます。このメインログインはモバイル入口の制限からの回復を示します。ログアウトし、Member sign-in で deskteam / Desk24 を使って LN-087 を再び開き、スクリーンと乾いた状態で梱包する注意事項を確認します。再びログアウトし、Visitor guide を開きます。
ブラウザーは各ログイン成功後に独自のセッションを作ります。curl の診断応答がブラウザーをログインさせるわけではありません。記録が403なら、ブラウザーの実際のログインを修正して Open your record を使います。通常のパスワードやパスの誤記は、シナリオを再起動せずに直します。
両方の実際の入口が、各アカウントについて同じ制限に従うようになりました。現在のポリシー下での両方向の証拠、維持された参照用アクセス、自然な回復、変更のない業務記録がそろっています。評価は既存の事実と公開ページを読み、不足するテストや回復を代行しません。これは説明したローカル単一プロセスの動作を証明するもので、分散した本番制限やあらゆる自動ログインへの防御ではありません。
まとめ
2つの実際のログインページが同じユーザーを扱うことを確認し、別々の入口グループが生む隙間を再現して、共有アカウントカウンターを適用しました。限定的な Hydra テストで両方向、通常の参照用アクセス、変更のない記録への自然な回復を実証しました。単一ページの拒否や旧ポリシーの履歴だけでは、完全な結果は証明できません。



