Automatic IP ban (Autoban)
設定可能なルールに基づいてwatchdogログエントリを分析し、IPアドレスの自動BAN処理をIP banプロバイダーと連携して実行します。
autoban
インストール
composer require 'drupal/autoban:8.x-1.12'
composer require 'drupal/autoban:8.x-1.9'
概要
Autobanモジュールは、Drupalのデータベースログ(watchdog)テーブルで検出されたパターンに基づいて、自動的にIPアドレスをBANする機能を提供します。サイト管理者は、ログエントリのタイプやメッセージパターンをマッチングして不審なアクティビティを識別するルールを作成し、指定した違反回数のしきい値を超えたIPアドレスを自動的にBANできます。
このモジュールは、cron実行時またはオンデマンドでwatchdogテーブルをクエリし、「page not found」エラーの繰り返しやアクセス拒否イベントなど、定義されたパターンにマッチするIPアドレスを識別します。IPアドレスが指定された時間枠内で設定されたしきい値を超えると、設定されたbanプロバイダーを使用して自動的にBANリストに追加されます。
Autobanはサブモジュールアーキテクチャを通じて複数のbanプロバイダーをサポートしており、Drupal CoreのBanモジュールやAdvanced Banなどのサードパーティソリューションとの統合が可能です。このモジュールには、ログエントリの分析、一括ルール作成、IPホワイトリスト(CIDR表記やドメインベースの除外を含む)、手動および自動のルール管理機能が含まれています。
Features
- watchdogログエントリのタイプとメッセージパターンに基づくIP BANルールの作成と管理
- 設定可能なしきい値と時間枠によるcron実行時の自動IP BAN
- 不審なパターンを識別し一括ルール作成を可能にするログ分析ツール
- 柔軟なパターンマッチングのためのLIKEおよびREGEXPクエリモードのサポート
- CIDR表記、単一IPアドレス、ドメインベースの除外をサポートするIPホワイトリスト
- プラグイン可能なアーキテクチャによる複数のbanプロバイダーサポート(Core Ban、Advanced Ban)
- 匿名ユーザー、認証済みユーザー、または両方をターゲットにするユーザータイプフィルタリング(strictモードオプション付き)
- 追加のフィルタリング精度のためのURLリファラーパターンマッチング
- ルールの時間枠設定(1時間、1日、1週間など)
- 404/403エラー時の即時IP BANを行うForceモード
- ルールクエリのトラブルシューティング用デバッグモード
- コマンドラインからのIP BAN操作のためのDrushコマンドサポート
- IPアドレスごとの直接BANリンクを含む強化されたdblog概要ページ
- すべてのルールにわたるIP BANのバッチ処理
- 既存ルールを複製するクローン機能
Use Cases
ブルートフォースログイン試行のブロック
タイプ'user'とログイン失敗メッセージにマッチするメッセージパターンでルールを作成します。低いしきい値(例:5)と短い時間枠(例:'1 hour ago')を設定して、ユーザーアカウントへのブルートフォース攻撃を試みるIPを迅速に識別してBANします。
脆弱性スキャナーのブロック
タイプ'page not found'でルールを作成し、脆弱性スキャナーがよくターゲットにする存在しないパス(例:wp-admin、phpmyadmin)を繰り返しリクエストするIPを識別します。1時間以内に10-20のしきい値で自動スキャナーを効果的にブロックできます。
スパムボットからの保護
分析ページを使用してスパム関連のログエントリパターン(例:繰り返しのフォーム送信、特定のリファラーパターン)を識別します。これらのパターンをターゲットにしたルールを作成して、スパムボットのIPを自動的にBANします。
緊急IPブロッキング
404または403エラーをトリガーするIPを即座にブロックするために設定でForceモードを有効にします。アクティブな攻撃中に有用ですが、404エラーを経験する正当なユーザーに影響を与える可能性があるため、注意して使用する必要があります。
検索エンジンボットのホワイトリスト登録
信頼できるボットドメイン(例:'googlebot.com'、'bingbot.com')またはCIDR表記のIPレンジをホワイトリストに追加して、404をトリガーする可能性のある正当なクローラーを誤ってBANすることを防ぎます。
ログ分析からの自動ルール作成
分析ページを使用してログパターンを確認し、不審なエントリを選択して、ルールを一括作成します。モジュールは自動的に一意のルールIDを生成し、デフォルト設定を適用します。
持続的攻撃者に対するIPレンジブロッキング
レンジサポート付きのAdvanced Banプロバイダーを使用する場合、同じサブネットから複数のIPを使用する攻撃者に対してIPレンジ全体をBANします。モジュールは単一IPを/24レンジに自動的に変換します。
Tips
- 正当なトラフィックをブロックしないように、自動cronBANに依存する前に必ずテスト操作を使用してルールをテストしてください
- 新しい攻撃パターンを識別し適切なルールを作成するために、分析ページを定期的に使用してください
- 正当なボットドメインと信頼できるIPレンジでホワイトリストを最新の状態に保ってください
- BANが一定期間後に自動的に解除されるように、Advanced Banの有効期限機能と短い時間枠の使用を検討してください
- 複雑なパターンマッチングにはREGEXPクエリモードを使用しますが、データベースがそれをサポートしていることを確認してください
- 時間を節約するために、類似のルールを作成する際は既存のルールをクローンしてください
- 'Automatic'ルールタイプフィルターを使用したすべて削除ページを使用して、自動ルールを定期的にレビューしてクリーンアップしてください
Technical Details
Admin Pages 10
/admin/config/people/autoban
設定されたすべてのautobanルールをテーブル形式で表示するメイン管理ページ。各ルールには、ID、タイプ、メッセージパターン、リファラーパターン、しきい値、時間枠、ユーザータイプ、banプロバイダーが表示されます。各ルールで利用可能な操作には、編集、削除、テスト(マッチするIPのプレビュー)、BAN(このルールのBAN実行)、クローン(ルールのコピー作成)があります。
/admin/config/people/autoban/add/{rule}
新しいautobanルールを作成するためのフォーム。すべてのフィールドは、watchdogログエントリに基づいてBANするIPアドレスを識別するための基準を定義します。
/admin/config/people/autoban/manage/{autoban}
既存のautobanルールを変更するためのフォーム。追加フォームと同じフィールドですが、現在のルール値が事前入力されています。
/admin/config/people/autoban/manage/{autoban}/delete
autobanルールを削除するための確認フォーム。ルールを完全に削除する前に確認を求める警告メッセージを表示します。
/admin/config/people/autoban/manage/{rule}/test
特定のルールによってBANされるIPアドレスを、実際にBANせずに表示するテストページ。IPアドレスごとのマッチするログエントリ数と現在のBAN状態をテーブルで表示します。ルールを有効にする前の検証に便利です。
/admin/config/people/autoban/ban/{rule}
IPアドレスをBANするための確認および実行ページ。ルールパラメータなしでアクセスした場合、バッチ処理を使用してすべてのルールのIPをBANします。特定のルールでアクセスした場合、そのルールにマッチするIPのみをBANします。
/admin/config/people/autoban/analyze
悪意のあるアクティビティを示す可能性のある繰り返しログエントリのパターンを見つけるためにwatchdogテーブルをクエリする分析ページ。タイプとメッセージでグループ化されたエントリとその発生回数を表示します。分析しきい値を超えるエントリは、ルールを作成またはテストするオプションとともに表示されます。
/admin/config/people/autoban/delete_all
フィルター条件に基づいて複数のautobanルールを削除するための一括削除フォーム。ルールタイプ、ログタイプ、メッセージパターン、リファラーパターン、しきい値、時間枠、ユーザータイプ、プロバイダーでフィルタリングできます。
/admin/config/people/autoban/settings
Autobanモジュールのグローバル設定ページ。しきい値オプション、時間枠、クエリ動作、ホワイトリスト、除外ログタイプ、動作モードを制御します。
/admin/reports/dblog
Autoban Dblogサブモジュールが有効な場合、このページはログ内の各IPアドレスに直接BANリンクを表示するように拡張されます。操作列には、利用可能な各banプロバイダーを使用してIPをBANするリンクが含まれます。
権限 1
Hooks 2
hook_cron
cron実行中にすべてのautobanルールを処理します。すべてのルールを反復処理し、マッチするIPアドレスを取得し、設定されたプロバイダーを使用してBANします。
hook_help
ヘルプページでモジュールとそのサブモジュールのヘルプテキストを提供します。
Drush Commands 1
drush autoban:ban
autobanルールに対してIP BANを実行します。単一のルールまたはすべてのルールを処理できます。
Troubleshooting 5
設定でデバッグモードを有効にして生成されたSQLクエリを確認します。ログタイプが正確にマッチしていること(大文字小文字を区別)、およびメッセージパターンがクエリモード(LIKE対REGEXP)を考慮していることを確認します。英語以外のログメッセージは、データベースに保存されている元の言語でパターンを指定する必要があることを覚えておいてください。
設定で'Enable cron'がチェックされていることを確認します。少なくとも1つのbanプロバイダーサブモジュールが有効になっていることを確認します。ルールに現在のログエントリにマッチする適切なしきい値と時間枠があることを確認します。
正当なIPアドレスまたはドメインをホワイトリストに追加します。しきい値を上げるか、時間枠を狭めることを検討します。認証済みユーザーをBANしないようにstrictユーザータイプオプションを使用します。
少なくとも1つのAutobanプロバイダーサブモジュール(Autoban Core Ban ProviderまたはAutoban Advanced Ban Provider)を有効にします。対応するbanモジュール(BanまたはAdvanced Ban)がインストールされ有効になっていることを確認します。
Forceモードはすべての404/403エラーで即座にIPをBANします。これは緊急時のみを意図しています。通常の運用ではこれを無効にし、適切なしきい値を持つルールベースのBANに依存してください。
Security Notes 5
- 検証なしにIPアドレスをホワイトリストに登録しないでください - 攻撃者はリファラー情報を偽装できます
- Forceモードは、404エラーを経験する正当なユーザーに影響を与える可能性があるため、アクティブな攻撃中のみ使用してください
- 誤検知を識別するためにBANされたIPリストを定期的にレビューしてください
- ルール処理のクエリパフォーマンスに影響するため、dblogテーブルが大きくなりすぎないようにしてください
- GDPRなどの規制に準拠してIPアドレスのログ記録と保存のプライバシーへの影響を考慮してください