Restrict IP
IPアドレスのホワイトリストに基づいてDrupalサイトへのアクセスを制限するセキュリティモジュール。パスベースのルールと国別フィルタリングをサポートしています。
restrict_ip
インストール
composer require 'drupal/restrict_ip:^5.0'
概要
Restrict IPモジュールは、許可されたIPアドレスのホワイトリストを管理することで、管理者がDrupalサイトへのアクセスを制御できるようにします。有効にすると、許可リストにないIPアドレスからの訪問者は、カスタマイズ可能なメッセージを含むアクセス拒否ページにリダイレクトされます。
このモジュールは、IPv4とIPv6アドレスの両方のサポート、IPアドレス範囲、特定のページを除外または対象とするパスベースのホワイトリスト/ブラックリスト、ロールベースのバイパス権限、IP-based Determination of a Visitor's Country(ip2country)モジュールと併用した国別フィルタリングなど、柔軟な設定オプションを提供します。
ブロックされたユーザーに対しては、意図しないコンテンツの露出を防ぐため、Block、JavaScript、その他のページ要素を含まない最小限のページをレンダリングします。管理者はフックを通じてアクセス拒否ページをカスタマイズでき、オプションでユーザーがアクセスを要求するための連絡先メールアドレスを表示できます。
Features
- 個別のIPv4/IPv6アドレスとIPv4アドレス範囲をサポートするIPアドレスホワイトリスト
- ホワイトリスト(特定のパスをチェックから除外)またはブラックリスト(特定のパスのみをチェック)によるパスベースのアクセス制御
- 特定の権限を持つログインユーザーがIPに関係なくサイトにアクセスできるロールベースのIP制限バイパス
- ip2countryモジュールと統合した場合の国別アクセス制御(国別のホワイトリストまたはブラックリスト)
- オプションの連絡先メール表示付きカスタマイズ可能なアクセス拒否ページ
- Drupalのデータベースログ(dblog)へのブロックされたアクセス試行のログ記録
- ブロックされたユーザーに対するすべてのBlock、JavaScript、メニュー、タブを削除した最小限のページレンダリング
- 緊急アクセス回復のため、管理UIまたはsettings.phpで直接IPアドレスを設定可能
- 管理者アクセスなしでIP制限を有効/無効にするDrushコマンドのサポート
- アクセス拒否ページのカスタマイズ、テーマリージョンのホワイトリスト、JavaScriptファイルのホワイトリストのためのフック
Use Cases
ステージング/開発サイトの保護
ステージングまたは開発サイトへのアクセスを、オフィスのIPアドレスまたはVPNのみに制限します。チームのIPアドレスでホワイトリストを設定し、制限を有効にします。すべての外部訪問者にはアクセス拒否ページが表示されます。
イントラネット専用アクセス
組織のネットワーク内からのみアクセス可能なイントラネットサイトを作成します。組織の内部IP範囲をホワイトリストに登録し、制限を有効にして外部アクセスを防止します。
地理的アクセス制御
特定の国のユーザーにサイトアクセスを制限します。ip2countryモジュール統合を有効にし、国のホワイトリストまたはブラックリストを設定します。例えば、他の地域からの悪意のあるトラフィックを減らすために自国のみをホワイトリストに登録します。
管理セクションの保護
メインサイトは公開のままにしながら、管理パスを特定のIPアドレスに制限します。パスチェックモードをブラックリストに設定し、/admin/*、/node/*/editなどの管理パスを追加します。ホワイトリストに登録されたIPのみが管理機能にアクセスできます。
一時的なメンテナンス制限
メンテナンス中、サイトを更新している間は開発チームのIPのみにアクセスを制限します。完了したら、制限を無効にして公開アクセスを復元します。
IPバックアップ付きロールベースアクセス
特定のロールを持つ認証済みユーザーがIP制限をバイパスできるようにしながら、ホワイトリストに登録されていないIPからの匿名訪問者をブロックします。ロールバイパスを有効にし、信頼できるロールに「IP制限をバイパス」権限を割り当てます。
Tips
- 制限を有効にする前に必ず現在のIPアドレスをホワイトリストに追加してください - 現在のIPは設定ページに表示されます
- UIで誤って削除できない緊急用IPホワイトリストエントリにはsettings.phpを使用してください
- パスパターンはワイルドカード(*)をサポートします - /admin/*を使用してすべての管理パスに一致させます
- IPアドレス範囲はAAA.BBB.CCC.XXX - AAA.BBB.CCC.YYYまたはAAA.BBB.CCC.XXX-YYY形式のIPv4アドレスでのみ機能します
- Drushコマンド(drush ripd disable)はロックアウト時のアクセス回復に非常に有用です
- ドキュメント用に//または/* */構文を使用してIPアドレスリストにコメントを追加できます
Technical Details
Admin Pages 1
/admin/config/people/restrict_ip
サイトのIPベースのアクセス制限を設定します。ホワイトリストに登録されたIPアドレス、パスベースのルール、ロールバイパス設定、国別フィルタリングオプションを管理します。
権限 2
Hooks 3
hook_restrict_ip_whitelisted_regions
モジュールやテーマが、ブロックされたユーザーに対しても引き続きレンダリングすべき特定のページリージョンをホワイトリストに登録できるようにします。
hook_restrict_ip_whitelisted_js_keys
モジュールやテーマが、ブロックされたユーザーに対しても引き続き読み込むべき特定のJavaScriptファイルをホワイトリストに登録できるようにします。
hook_restrict_ip_access_denied_page_alter
モジュールやテーマが、要素の追加、削除、変更、またはリダイレクトの実行を含むアクセス拒否ページのコンテンツを変更できるようにします。
Drush Commands 1
drush restrict_ip:disable [enable|disable]
管理インターフェースにアクセスせずにIP制限を有効または無効にします。ロックアウトされた場合にアクセスを回復するのに便利です。
Troubleshooting 4
sites/default/settings.phpに次の行を追加します:$config['restrict_ip.settings']['enable'] = FALSE; これにより制限が無効になり、サイトにアクセスして設定を修正できます。または、Drushコマンドを使用:drush ripd disable
正しい設定キーを使用していることを確認してください:$config['restrict_ip.settings']['ip_whitelist'] = ['111.111.111.1']; 値はIPアドレスの配列である必要があります。
IP-based Determination of a Visitor's Country(ip2country)モジュールをインストールして有効にしてください。composer require drupal/ip2countryを実行し、モジュールを有効にします。
プロキシやロードバランサーの背後にいないか確認してください。モジュールは信頼されたプロキシヘッダーを尊重するSymfonyのgetClientIp()を使用します。settings.phpでプロキシ設定が正しく構成されていることを確認してください。
Security Notes 5
- サーバーがクライアントIPアドレスを正しく渡していることを確認してください - ロードバランサーやCDNの背後では追加の設定が必要な場合があります
- settings.phpのip_whitelist設定は、管理UIから変更できない安全なフォールバックを提供します
- ロールバイパスを使用する場合、「IP制限をバイパス」権限が信頼できるロールにのみ付与されていることを確認してください
- アクセス拒否ページに表示されるメールアドレスは難読化されていますが、収集される可能性があります - 連絡先情報を追加する際はこれを考慮してください
- ログに記録されたアクセス試行には機密性の高いパス情報が含まれる場合があります - データベースログが適切に保護されていることを確認してください