Drupal Perimeter Defence
設定可能なパターンに一致する存在しないURLへの不審なリクエストを行うIPアドレスを自動的に禁止し、ハッカーやボットからDrupalサイトを保護するセキュリティモジュールです。
perimeter
インストール
composer require 'drupal/perimeter:^3.0'
概要
Drupal Perimeter Defenceは、不審なリクエストを送信するIPアドレスを自動的に禁止することで、Drupalサイトの基本的な境界防御を提供します。このモジュールは404(ページが見つかりません)レスポンスを監視し、リクエストされたURLを設定可能な正規表現パターンのリストと照合します。一致が見つかると、リクエスト元のIPはDrupal CoreのBanモジュールを使用して即座に禁止されます。
このモジュールは、WordPressの管理ページ(wp-admin、wp-login)、ASP.NETファイル(.aspx、.asp)、JSPファイル(.jsp)など、Drupal以外のプラットフォームを対象とした多数のリクエストをサイトが受信する場合に特に有用です。これらは自動スキャナーやボットが一般的に使用する不審なパターンです。
このモジュールはパフォーマンスに最適化されており、Drupalサイトが積極的に標的にされている際に有効化するよう設計されています。禁止前に設定可能な回数の試行を許可するフラッド保護、正当なユーザーやサービスのブロックを防ぐIPホワイトリスト、追加のスパム保護のためのHoneypotモジュールとの統合が含まれています。
Features
- 不審な404リクエストに対する設定可能なURL正規表現パターンに基づく自動IP禁止
- WordPress(wp-admin、wp-login)、ASP.NET(.aspx、.asp)、JSP(.jsp)、その他の悪意のあるURLを含む一般的な攻撃ベクトル用の事前設定パターン
- 信頼できるIPおよび範囲を禁止対象から除外するためのCIDR表記(例:192.168.1.0/24)によるIPホワイトリストサポート
- IPアドレスを禁止する前に設定可能な回数の試行を許可するフラッド閾値制御
- 試行カウンターの持続時間を制御するための設定可能なフラッド時間ウィンドウ
- 禁止されたIPアドレスを管理するためのDrupal Core Banモジュールとの統合
- Honeypotモジュール統合 - Honeypotの時間ベース保護をトリガーしたIPを自動的に禁止(ユーザーログインフォームを除く)
- 信頼されたユーザーがブロックされずに禁止URLにアクセスできる権限ベースのバイパス
- ソースURL、リファラー、ユーザーエージェント情報を含む禁止IPの詳細なログ記録
- Drupal 10および11と互換性あり
Use Cases
WordPress脆弱性スキャナーからの保護
多くの自動ボットは/wp-admin、/wp-login.php、/wp-content/などのURLをリクエストしてWordPressインストールを探すためにウェブサイトをスキャンします。これらのボットがDrupalサイトを標的にすると、繰り返しの404エラーで不要なサーバー負荷が発生します。デフォルトパターンでPerimeter Defenceを有効にすることで、これらのボットは最初のリクエスト後すぐに禁止され、以降のスキャン試行が防止されサーバー負荷が軽減されます。
技術固有のエクスプロイト試行のブロック
攻撃者は脆弱なMicrosoft IISやJavaアプリケーションサーバーを探して.aspx、.asp、.jsp拡張子を含むURLでウェブサイトを調査することがよくあります。Linux/Drupalサーバーでは、これらのリクエストは明らかに悪意のあるものです。Perimeter Defenceはこれらの調査IPを自動的に禁止し、後続の攻撃からサーバーを保護します。
フラッド閾値を使用した段階的な禁止実装
正当なユーザーが誤って禁止パターンをトリガーする可能性があるサイトでは、フラッド閾値を3などの値に設定します。これにより、ユーザーは禁止される前にいくつかの間違いを犯すことができます。適切なフラッドウィンドウ(例:3600秒/1時間)と組み合わせることで、セキュリティとユーザビリティのバランスが取れます。
CDNまたはプロキシサーバーIPの保護
サイトがCDNやロードバランサーを使用している場合、インフラストラクチャを誤って禁止することを防ぐため、CDNのIP範囲をホワイトリストに追加してください。例えば、CloudflareのIP範囲をCIDR表記で追加して、CDNリクエストが決してブロックされないようにします。
フォームスパム保護のためのHoneypotとの統合
Honeypotモジュールと併用すると、Perimeter Defenceは、Honeypotの時間ベース保護に繰り返し失敗するIPを禁止することで追加の保護を提供します。これはフォームを素早く送信する自動スパムボットに対して効果的です。
ステージングまたは開発サイトの保護
開発サイトやステージングサイトはボットに発見されて攻撃されることがよくあります。Perimeter Defenceを有効にして偵察試行を自動的に禁止し、ログのノイズを減らし、機密性の高い開発データを保護します。
Tips
- 本番環境にデプロイする前に、必ず別のIPまたはデバイスからモジュールの動作をテストし、必要に応じて禁止からIPを削除できるようデータベースにアクセスできることを確認してください
- 誤ってパターンをトリガーする可能性のある正当なユーザーの禁止を避けるため、本番サイトではより高いフラッド閾値(例:2-3)から始めてください
- モジュールを有効にする前に、オフィスのIP範囲、CDN IP、監視サービスIPをホワイトリストに追加してください
- サイトの最近のログメッセージを定期的に監視して、どのIPが禁止されているかを確認し、それに応じてパターンを調整してください
- デフォルトのパターンを出発点として使用し、ログ分析に基づいてサイト固有のパターンを追加してください
- このモジュールは自動スキャナーに対して最も効果的です。高度な攻撃者はIPローテーションを使用する場合があります
- 包括的な保護のために、Honeypot、Antibot、CAPTCHAなどの他のセキュリティモジュールとの組み合わせを検討してください
Technical Details
Admin Pages 1
/admin/config/system/perimeter
Perimeter Defenceモジュールの、IP禁止をトリガーするURLパターンの設定、IPホワイトリストの管理、フラッド保護閾値の設定を行います。
権限 3
Hooks 2
hook_honeypot_reject
Honeypotモジュールとの統合フック。Honeypotが時間ベース保護(honeypot_timeタイプ)によりフォーム送信を拒否すると、このフックは送信元IPを禁止します。誤ってロックアウトされることを防ぐため、ユーザーログインフォームとUID 1は禁止対象から除外されます。
hook_help
ヘルプページでモジュールのヘルプテキストを提供し、モジュールの目的を説明してドキュメントへのリンクを表示します。
Troubleshooting 5
自分自身の禁止を解除するためにDrupal管理インターフェースにアクセスできません。Drushを使用してデータベースからIPを削除してください:drush sql:query "DELETE FROM ban_ip WHERE ip='YOUR.IP.ADDRESS';" または、phpMyAdminやコマンドラインから直接データベースにアクセスし、ban_ipテーブルから自分のIPを削除してください。
Perimeter設定でそのIPアドレスまたはIP範囲をホワイトリストに追加してください。また、禁止前にいくつかの偶発的な一致を許可するためにフラッド閾値を増やすこともできます。URLパターンが正当なURLに一致していないか確認することを検討してください。
モジュールが有効になっていて、Banモジュールが機能していることを確認してください。URLパターンが有効な正規表現であることを確認してください(/pattern/のようなデリミタを含む)。キャッシュされたページは禁止をトリガーしないため、キャッシュされていないリクエストでテストしていることを確認してください。最近のログメッセージでPerimeterの通知を確認してください。
禁止URLにアクセスする際にユーザーがログインしていることを確認してください。バイパス権限は認証済みセッションでのみ機能します。匿名ユーザーはバイパス権限を持つことができません。
キャッシュされたページリクエストは禁止ロジックをトリガーしないことを忘れないでください。フラッド閾値をテストする際は、毎回異なるURLをリクエストする必要があります(例:/wp-admin/a、/wp-admin/b、/wp-admin/c)。同じURLへの繰り返しのリクエストはキャッシュから提供される可能性があり、フラッドカウンターが増加しません。
Security Notes 6
- バイパス権限は'アクセス制限'としてマークされています - 高度に信頼されたロールにのみ付与してください
- 信頼されていないユーザーに'Perimeter禁止URLパターンを管理'や'Perimeter IPホワイトリストを管理'権限を付与しないでください。保護を無効にされる可能性があります
- このモジュールはリファラーやユーザーエージェントを含む禁止IPの詳細情報をログに記録します - 攻撃パターンを定期的にログで確認してください
- IP禁止はデータベースに保存され、Banモジュールインターフェースまたはデータベースから手動で削除するまで持続します
- プロキシやCDNの背後で使用する場合、Drupalが正しいクライアントIPを検出するよう設定されていることを確認してください(trusted_host_patternsとプロキシ設定)
- このモジュールは偵察と自動攻撃から保護しますが、定期的な更新、強力なパスワード、適切なサーバー設定を含む包括的なセキュリティ戦略の一部であるべきです