Flood Control
Drupalの隠されたFlood制御変数を管理するための管理インターフェースを提供し、複数回のログイン失敗後にブロックされたIPアドレスやユーザーIDのブロックを解除できるようにします。
flood_control
インストール
composer require 'drupal/flood_control:^3.0'
composer require 'drupal/flood_control:^2.3'
概要
Flood Controlは、Drupalの隠されたFlood保護設定をユーザーフレンドリーなインターフェースで公開する、必須のセキュリティ管理モジュールです。Drupal Coreには、ログイン失敗の試行を追跡し、しきい値を超えた場合にさらなる試行を一時的にブロックすることで、ユーザーアカウントへのブルートフォース攻撃から保護する機能が組み込まれています。しかし、これらの設定は標準の管理UIからはアクセスできません。
このモジュールは2つの主要な管理インターフェースを提供します:ログイン試行制限のしきい値と時間枠を設定できる設定ページと、DrupalのFloodテーブルのエントリを表示・削除できるFloodブロック解除ページです。これは、正当なユーザーがパスワード忘れでロックアウトされた場合や、テストアカウントを使用する場合に特に便利です。
このモジュールには、特定のIPアドレスやIP範囲がFlood保護を完全にバイパスできるIP許可リスト機能も含まれています。これは、信頼できるネットワーク、自動テストシステム、または既知の場所からの管理アクセスに便利です。さらに、Contactモジュールが有効な場合、Flood Controlはお問い合わせフォームの送信制限を含む設定機能を拡張します。
Features
- 単一IPアドレスからのブルートフォース攻撃から保護するための、IPベースのログイン試行制限と時間枠を設定
- 個々のユーザーアカウントを保護するための、ユーザー名ベースのログイン試行制限と時間枠を設定
- 識別子とブロック状態によるフィルタリング機能を備えた、DrupalのFloodテーブル内のすべてのエントリを表示
- ロックアウトされたIPアドレスまたはユーザーアカウントのブロックを解除するための特定のFloodエントリの削除
- 特定のIPアドレスまたはIPアドレス範囲をFlood保護から除外するIP許可リスト機能
- Contactモジュールが有効な場合のお問い合わせフォーム送信制限の設定
- Floodエントリのコマンドライン管理のためのDrushコマンド
- Drupal 7のFlood Control設定のマイグレーションサポート
- IPアドレスの地理的位置表示のためのSmart IPモジュールとの連携(オプション)
Use Cases
パスワード忘れの試行後にロックアウトされた正当なユーザーのブロック解除
ユーザーがパスワードを忘れてログイン失敗制限を超えると、ロックアウトされます。管理者は「管理 > ユーザー > Floodブロック解除」に移動し、ユーザーのIPアドレスまたはユーザー名でフィルタリングし、関連するFloodエントリを選択して「選択した項目を削除」をクリックすると、すぐにログインアクセスを復元できます。
高価値サイトのためのより厳格なセキュリティ設定
機密データを扱うサイトでは、管理者は「管理 > 環境設定 > ユーザー > Flood Control」でログイン試行制限を減らし(例:3回まで)、時間枠を延長(例:24時間)することで、より強力なブルートフォース保護を提供できます。
オフィスまたはVPN IPアドレスのホワイトリスト登録
組織はオフィスのIP範囲やVPN出口点を許可されたIPリストに追加することで、外部からのアクセス試行に対するセキュリティを維持しながら、従業員がFlood保護によってロックアウトされることを防ぐことができます。
インシデント中のDrushによる緊急ブロック解除
セキュリティインシデント中や複数のユーザーに影響する誤検知ロックアウト後、管理者はWebインターフェースにアクセスせずに「drush flood_unblock:all」を使用してすべてのFloodエントリをすばやくクリアするか、「drush flood_unblock:ip <アドレス>」で対象を絞ったブロック解除ができます。
お問い合わせフォームのスパム悪用防止
お問い合わせフォームのスパムを経験しているサイトは、お問い合わせフォームのFlood保護の送信制限を低く、時間枠を長く設定することで、正当なお問い合わせを許可しながら自動化された悪用を減らすことができます。
認証の問題のデバッグ
ログイン問題のトラブルシューティング時、管理者はFloodブロック解除ページをブロックされたエントリのみを表示するようにフィルタリングして、Flood保護が特定のユーザーやIPアドレスのアクセス問題を引き起こしているかどうかをすばやく特定できます。
Tips
- Drupalのデフォルト設定(IPで1時間に5回、ユーザー名で6時間に5回)はほとんどのサイトに適切ですが、高セキュリティサイトではより低い制限を検討する必要があります
- ユーザー名の時間枠を「無制限」に設定すると最大の保護が提供されますが、影響を受けたユーザーのブロック解除には手動介入が必要です
- IP許可リストは範囲をサポートしており、大規模ネットワークで多くの個別IPをリストするより効率的です
- Floodブロック解除ページの「ブロック済みのみ」フィルターを使用すると、実際にログイン問題を引き起こしているエントリをすばやく見つけることができます
- Drushコマンドは自動回復スクリプトやWebインターフェースにアクセスできない場合に便利です
- Floodエントリは時間枠に基づいて自動的に期限切れになるため、手動クリーンアップは即時のブロック解除が必要な場合にのみ必要です
Technical Details
Admin Pages 2
/admin/config/people/flood-control
Drupalがログイン失敗をどのように処理するかを制御するFlood保護のしきい値と時間枠を設定します。このページでは、管理者がIPベースとユーザー名ベースの両方のFlood保護の制限を設定し、信頼できるIPアドレスの許可リストを構成し、オプションでお問い合わせフォームの送信制限を構成できます。
/admin/people/flood-unblock
DrupalのFloodテーブル内のエントリを表示・管理します。このページには、IPアドレス、ユーザーID、イベントタイプ、タイムスタンプ、有効期限を含むすべての記録されたログイン失敗が表示されます。管理者はリストをフィルタリングし、エントリを選択的に削除してユーザーやIPアドレスのブロックを解除できます。
権限 2
Hooks 2
hook_migration_plugins_alter
d7_contact_settingsマイグレーションプラグインを変更して、Drupal 7からのFlood Controlしきい値設定を含めます。
hook_migrate_prepare_row
Drupal 7ソースデータベースからcontact_threshold_limitとcontact_threshold_window変数を取得してマイグレーション行データを準備します。
Drush Commands 2
drush flood_unblock:ip <ip_address>
すべてのFloodイベントタイプにわたって特定のIPアドレスのすべてのFloodエントリをクリアします。
drush flood_unblock:all
すべてのイベントタイプのシステム内のすべてのFloodエントリをクリアします。すべてのFlood保護履歴が削除されるため、注意して使用してください。
Troubleshooting 5
Floodブロック解除ページ(/admin/people/flood-unblock)でユーザーのIPアドレスまたはユーザー名に一致するブロックされたエントリを確認してください。見つかった場合は、エントリを選択して削除しブロックを解除します。頻繁に影響を受けるIPアドレスが信頼できるソースからの場合は、許可リストに追加することを検討してください。
これは通常、データベースの代わりに代替Floodバックエンド(RedisやMemcacheなど)を使用している場合に発生します。Floodブロック解除UIにはデータベースFloodバックエンドが必要です。services.ymlでFloodサービスのオーバーライドを確認してください。
削除ボタンをクリックする前に、削除したい各エントリのチェックボックスを選択していることを確認してください。フォームは少なくとも1つの項目が選択されていることを検証します。
IPアドレスが正しい形式であることを確認してください:単一IPはXXX.XXX.XXX.XXX形式、範囲はXXX.XXX.XXX.YYY-XXX.XXX.XXX.ZZZ形式です。範囲内の下位IPは上位IPより数値的に小さくなければなりません。各エントリは別々の行にある必要があります。
お問い合わせフォームのFlood設定は、CoreのContactモジュールが有効な場合にのみ表示されます。これらの設定を構成する必要がある場合は、最初にContactモジュールを有効にしてください。
Security Notes 5
- 「Flood解除設定の管理」権限は制限されており、セキュリティ上重要な設定を制御するため、完全に信頼できる管理者ロールにのみ付与する必要があります
- IPアドレスを許可リストに追加すると、それらのIPのFlood保護が完全にバイパスされます - 本当に信頼できるネットワークに対してのみ控えめに使用してください
- Floodエントリを削除すると、影響を受けるIP/ユーザーからのログイン試行が即座に許可されます - ブロック解除リクエストの正当性を確認してください
- 非常に高い制限や短い時間枠を設定すると、ブルートフォース保護が弱まります - ユーザビリティとセキュリティ要件のバランスを取ってください
- Floodテーブルにはログイン失敗パターンに関する機密情報が含まれている可能性があります - Floodブロック解除ページへのアクセスを適切に制限してください