ClamAV アンチウイルス
オープンソースのClamAVアンチウイルススキャナーと連携し、アップロードされたファイルのウイルススキャンを行います。
clamav
インストール
composer require 'drupal/clamav:^2.1'
composer require 'drupal/clamav:^2.0'
概要
ClamAVモジュールは、DrupalとオープンソースのClamAVアンチウイルススキャナーを連携させます。ユーザーがサイトにファイルをアップロードすると、モジュールは保存前に自動的にウイルスやマルウェアをスキャンします。感染したファイルはバリデーション処理中にブロックされ、システムへの保存が防止されます。
このモジュールは3つのスキャンモードをサポートしています:直接実行可能ファイル、TCP/IPデーモン、Unixソケットデーモン。デーモンモードは、各スキャンごとにウイルス定義を再読み込みするのではなくメモリに保持されるため、実行可能ファイルモードよりも約10,000倍高速なパフォーマンスを提供します。
サイト管理者は、どのファイルストリームラッパーをスキャンするか、ClamAVが利用できない場合の動作、詳細ログの有効化を設定できます。また、このモジュールはカスタム基準に基づいて特定のファイルをスキャン対象に含めたり除外したりできるhookも提供しています。
Features
- ファイルバリデーションプロセス中にすべてのアップロードファイルを自動的にウイルススキャン
- 3つのスキャンモード:実行可能ファイル(直接clamscan)、デーモンTCP/IP、デーモンUnixソケットによる柔軟なデプロイオプション
- 実行可能ファイルモードよりも約10,000倍高速な高パフォーマンスデーモンモード
- ClamAVが利用できない場合の設定可能な動作:未チェックファイルのブロックまたはアップロード許可
- どのファイルシステムをスキャンするか(ローカル対リモート)を制御するストリームラッパースキームフィルタリング
- 他のモジュールがどのファイルをスキャンするかを制御できる拡張可能なhookシステム
- システム内の既存の管理ファイルすべてをバッチスキャンするDrushコマンド
- トラブルシューティング用の詳細モードとデバッグモードを備えた包括的なログ機能
- ClamAVのバージョンと接続状態を表示するシステムステータスレポート統合
- Drupalのファイルバリデーションイベントシステムとのシームレスな統合
Use Cases
コミュニティサイトでのユーザーアップロードの保護
ユーザーがファイルをアップロードできるウェブサイト(フォーラム、ソーシャルネットワーク、ドキュメント共有プラットフォームなど)では、ClamAVを有効にして、保存前にすべてのアップロードファイルを自動的にスキャンします。これにより、悪意のあるユーザーが、それをダウンロードする他のユーザーに害を与える可能性のある感染ファイルをアップロードすることを防ぎます。
プライベートドキュメント管理のセキュリティ確保
機密ファイルを扱うイントラネットやドキュメント管理システムでは、最適なパフォーマンスを得るためにUnixソケットデーモンモードでClamAVを設定します。ClamAVが一時的に利用できない場合でも未スキャンのファイルがアップロードされないように、障害時の動作を「未チェックファイルをブロック」に設定します。
ECサイトのファイル添付
顧客がカスタムオーダー用にファイルをアップロードするECサイト(印刷ショップ、デザインサービスなど)では、ClamAVを使用してすべての添付ファイルをスキャンします。すべてのスキャンされたファイルの監査証跡を維持するために、詳細ログを有効にします。
既存ファイルの遡及的スキャン
既存のサイトにClamAVをインストールした後、'drush clamav:scan-files'コマンドを使用して、以前にアップロードされたすべてのファイルをバッチスキャンし、システムに既に存在する可能性のある感染コンテンツを特定します。
特定のファイルタイプをスキャンから除外
hook_clamav_file_is_scannable()を実装して、信頼できるファイルタイプ(確認済みソースからの画像など)や管理者がアップロードしたファイルのスキャンをスキップしつつ、ユーザーがアップロードしたコンテンツは完全なスキャンを維持します。
集中スキャンを使用したマルチサーバーデプロイメント
Webクラスター環境では、すべてのWebサーバーを中央のClamAVサーバーを指すデーモンTCP/IPモードを使用するように設定し、各Webサーバーに ClamAVをインストールすることなく、すべてのノードで一貫したスキャンを確保します。
Tips
- パフォーマンスを大幅に向上させるため、実行可能ファイルモードの代わりにデーモンモード(UnixソケットまたはTCP/IP)を使用してください - デーモンモードは約10,000倍高速です。
- Unixソケットデーモンモードは、ネットワークオーバーヘッドを回避するため、TCP/IPモードよりわずかに高速ですが、TCP/IPモードは分散デプロイメントにより柔軟です。
- トラブルシューティング時に一時的に詳細ログを有効にして、感染したファイルだけでなくすべてのスキャンされたファイルのログを確認してください。
- 最新の脅威の検出を確保するため、freshclamを使用してClamAVウイルス定義を定期的に更新してください。
- 「未チェックファイルを許可」設定のセキュリティへの影響を考慮してください - ClamAVの障害に対処するための他のセキュリティ対策がある場合にのみ使用してください。
- Drushコマンドを定期的に使用して、特にウイルス定義の更新後に既存のファイルをスキャンしてください。
Technical Details
Admin Pages 1
/admin/config/media/clamav
スキャンモード、接続パラメータ、障害時の動作、ログオプションなど、ClamAVアンチウイルス統合設定を構成します。
権限 1
Hooks 1
hook_clamav_file_is_scannable
特定のファイルをClamAVでスキャンするかどうかをモジュールが制御できるようにします。モジュールはスキャンを強制、スキャンを防止、または判断に影響を与えないことができます。
Drush Commands 1
drush clamav:scan-files
ClamAVを使用して、システム内のすべての既存の管理対象永続ファイルをウイルススキャンします。タイムアウトの問題を回避するため、ファイルをバッチで処理します。
Troubleshooting 5
ClamAVデーモンが実行中でアクセス可能であることを確認してください。TCP/IPモードの場合は、ホスト名とポートが正しいことを確認してください。Unixソケットモードの場合は、ソケットファイルが存在し、適切な権限があることを確認してください。実行可能ファイルモードの場合は、clamscanへのパスが正しいことを確認してください。
これは通常、ClamAVが利用できず「未チェックファイルをブロック」が有効になっていることを示しています。Drupalのログで接続エラーを確認し、ClamAVサービスの状態を確認してください。
実行可能ファイルモードからデーモンモード(TCP/IPまたはUnixソケット)に切り替えてください。デーモンモードは、ウイルス定義がメモリに保持されるため、約10,000倍高速です。
Webサーバーユーザーが、ClamAVソケットファイル(Unixソケットモードの場合)へのアクセス権限、またはclamscanバイナリ(実行可能ファイルモードの場合)の実行権限を持っていることを確認してください。ファイル権限とSELinux/AppArmorポリシーを確認してください。
PHPのmax_execution_timeとpost_max_sizeを増やしてください。より高速なスキャンのためにデーモンモードの使用を検討してください。非常に大きなファイルの場合は、ファイルサイズに基づいてスキャンをスキップするようにhook_clamav_file_is_scannable()を実装してください。
Security Notes 5
- 最新の脅威から保護するため、freshclamまたはclamav-freshclamサービスを使用してClamAVウイルス定義を常に最新の状態に保ってください。
- 本番環境では、ClamAVが利用できないときに潜在的に感染したファイルがアップロードされるのを防ぐため、outage_actionを「未チェックファイルをブロック」に設定することを検討してください。
- モジュールはアップロード時にのみファイルをスキャンします - 保存後のファイルを継続的に監視するわけではありません。Drushコマンドを使用して定期的にバッチスキャンを実行してください。
- リモートストリームラッパー(S3やCDNストレージなど)に保存されたファイルは、デフォルトではスキャンされません。必要な場合にのみ、またスキャン機構をサポートしている場合にのみ、特定のリモートスキームを有効にしてください。
- ウイルススキャンはファイルアップロードに遅延を追加します。高トラフィックサイトでは、デーモンモードを使用し、必要に応じて水平にスケーリングすることで、ClamAVインフラストラクチャが負荷を処理できることを確認してください。