Nextcloud には、files_antivirus というアプリがあり、ファイルアップロード時や、定期的なタイミングでウィルススキャンを行うことが可能です。ウィルスの検出処理はClamAV等のバックエンドで動作するアンチウィルスソフトにより行われます。
files_antivirus アプリについては下記リンク先を参照ください。
https://github.com/nextcloud/files_antivirus
インストールや設定方法は下記リンク先をご参照ください。
https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/antivirus_configuration.html
今回は Ubuntu OSでの利用例を紹介したいと思います。
ClamAVのインストール
apt-get install clamav clamav-daemon
files_antivirus アプリを有効化
Nextcloud で files_antivirus アプリを有効化します。
未インストール状態で app:enable を実行した場合でも appストアから自動でダウンロードしてinstallしてくれます。
./occ app:enable files_antivirus
files_antivirus アプリの設定
Nextcloudの管理画面から下記の設定項目を開きます。
管理 => セキュリティ => ファイルのウイルス対策
動作動作モードにはいくつかの種類があります。
1. ローカルのClamAV実行ファイルを読みだしてスキャン(都度実行)
2. ローカルで実行しているClamAV デーモンへのUNIX Socket接続
3. ローカルもしくはリモートで実行しているClamAV デーモンへのTCP/IP接続
今回はローカルマシン上で動作しているClamAVデーモンに UNIX Socket で接続する方法で設定します。
モード:ClamAVデーモン(ソケット)
ソケット:/var/run/clamav/clamd.ctl
を設定
files_antivirus アプリの動作確認
EICAR.com のサイトからテストファイルをダウンロードして、Nextcloudへアップロードしてみます。弊社環境上の制約でブラウザからテストファイルのアップロードができないため、curl コマンドでのWebDAV接続でファイルアップロードしています。
テストファイルのアップロード
curl -u "$USERID:$USERPW" -T EICAR.TXT https://$HOST/remote.php/dav/files/$USERID/Documents/EICAR.TXT
レスポンス内容
<?xml version="1.0" encoding="utf-8"?>
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">
<s:exception>OCA\DAV\Connector\Sabre\Exception\UnsupportedMediaType</s:exception>
<s:message>ウイルス Win.Test.EICAR_HDB-1 がファイル内で検出されました。 アップロードを完了できません。</s:message>
</d:error>
テストファイルが検出され、アップロードがブロックされました。
nextcloud.log には次のようなログが記録されます。
{
"reqId":"XKlAoaEZeBcdmuQPRn3e",
"level":3,
"time":"2024-08-16 14:50:04",
"remoteAddr":"127.0.0.1",
"user":"USERID",
"app":"files_antivirus",
"method":"PUT",
"url":"/remote.php/dav/files/USERID/Documents/EICAR.TXT",
"message":"Infected file deleted. Win.Test.EICAR_HDB-1 File: files/Documents/EICAR.TXT.ocTransferId1578600796.part Account: USERID",
"userAgent":"curl/7.81.0",
"version":"28.0.8.2",
"data":{
"app":"files_antivirus"
}
}
files_external アプリでS3やSMB外部ストレージを連携している場合にも、ファイルアップロード完了前に検出してくれます。
以上、現場からお届けしました。