2024 Sep. 29.
2024 May. 04.
2024 Feb. 25.
2022 Feb. 11.
2021 Nov. 21.
2021 Jun. 05.
2021 May 02.
2021 Apr. 27.
2021 Mar. 28.
2021 Jan. 31.
2020 Sep. 21.
参考元
Ubuntu Desktop 18.04でClamAVによるウィルスチェックを実行する!
Ubuntu 20.04 LTS : Clamav アンチウィルス : Server World
https://www.hiroom2.com/2018/05/06/ubuntu-1804-clamav-ja/
【Ubuntu 20.04/18.04 LTS Server】ClamAVで定期的にウイルスチェックし、メール通知する | The modern stone age.
clamscanによるウイルススキャンは低速だが高機能。
clamdデーモンを使うclamdscanによるウイルススキャンは高速だが低機能。
この記事ではclamdscanを利用する。
準備作業
パッケージをインストール
(Ubuntu)
$ sudo apt update && sudo apt install clamav clamav-daemon
(Arch系Manjaro Linux)
# pacman -S clamav
ウイルス定義更新
出典 【Ubuntu 20.04/18.04 LTS Server】ClamAVで定期的にウイルスチェックし、メール通知する | The modern stone age.
$ sudo freshclam
上記freshclamで次のエラーが出たら、下記のログ設定を行う
(エラー出力例)
$ sudo freshclam WARNING: Ignoring deprecated option SafeBrowsing at /etc/clamav/freshclam.conf:22 ERROR: /var/log/clamav/freshclam.log is locked by another process ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log). ERROR: initialize: libfreshclam init failed. ERROR: Initialization error!
(エラー対応ログ設定)
$ sudo rm /var/log/clamav/freshclam.log $ sudo touch /var/log/clamav/freshclam.log $ sudo chown clamav:clamav /var/log/clamav/freshclam.log /etc/logrotate.d/clamav-freshclamもしくは/etc/logrotate.d/clamavを修正する 変更前:create 640 clamav adm 変更後:create 640 clamav clamav
(確認)
$ sudo freshclam
ウイルス定義の自動更新起動状況確認
$ systemctl status clamav-freshclam.service (clamav-freshclam.serviceが動いていなかったら) $ sudo systemctl enable clamav-freshclam.service $ sudo systemctl start clamav-freshclam.service
clamdscanに必要なclamav-daemonの設定
ウイルスを移動する設定の時の移動先ディレクトリの作成
$ sudo mkdir /var/moved_virus $ sudo chmod 777 /var/moved_virus
/etc/clamav/clamd.conf を編集
設定項目リスト CentOS6:ClamAV(Clam AntiVirus)のインストール及び設定(1) | Engineer Log
## rootなファイルをスキャンできるようにユーザーをrootにする # User clamav User root ### スキャンするファイルサイズを無制限にする ## スキャンされるデータの最大量 #MaxScanSize 100M MaxScanSize 0 ## 通常のファイルと、アーカイブから展開されたファイルの最大サイズ #MaxFileSize 25M MaxFileSize 0 ## ディレクトリ深さ #MaxDirectoryRecursion 15 MaxDirectoryRecursion 20 ## スキャンしないファイル・ディレクトリ ExcludePath ^/dev/ ExcludePath ^/proc/ ExcludePath ^/sys/ ExcludePath ^/var/moved_virus/ ## ScanOnAccessは廃止されたので設定しない。clamAVでのオンアクセススキャンにはfanotifyを利用する。
(Ubuntuでは)ClamAV をrootで実行できるようにAppArmorによる制限を外す。
参考元 Linuxでウイルス対策 – ClamAVのインストールと初期設定 (2018年版) | 如是我聞 - a blog about life and tech
(Ubuntu)
AppArmor Utilsをインストールし、ClamAVへのAppArmorによる制限を外す
$ sudo apt install apparmor-utils $ sudo aa-complain clamd
(Arch系Manjaro Linux)
# aa-complain clamd
CPUへの高負荷対策
参考元 Debian 9.3 ClamAV高負荷問題の対処2 (Linux自作PC)
/lib/systemd/system/clamav-daemon.service の [Service]セクションに CPUQuota=50% と記述する。
設定反映
$ sudo systemctl daemon-reload $ systemctl status clamav-daemon.service (動いていなかったら) $ sudo systemctl enable clamav-daemon.service $ sudo systemctl start clamav-daemon.service (動いていたら) $ sudo systemctl restart clamav-daemon.service
データベースを更新する
$ sudo systemctl stop clamav-freshclam.service $ sudo freshclam
上記での出力を確認しておく
データベースの自動更新設定
/etc/clamav/freshclam.conf内のChecks設定が1日の更新回数
$ sudo systemctl enable clamav-freshclam.service $ systemctl status clamav-freshclam.service (動いていなかったら) $ sudo systemctl start clamav-freshclam.service
clamav-daemonを利用したclamdscanによるスキャンを試しに実行する
無害ウイルスをダウンロードして、スキャンしてみて、リターンコードを確認する。
$ sudo chmod 744 /var/log/clamav/clamav.log $ cd YOUR/WORKING/DIR $ wget https://secure.eicar.org/eicar.com.txt クライアントツールのclamdscanが接続するデーモンclamdを実行する $ sudo clamd -c /etc/clamav/clamd.conf スキャン実行 $ sudo clamdscan --multiscan --fdpass --move VIRUS/MOVED/DIR YOUR/WORKING/DIR > OUTPUT.txt ## --multiscan 複数のスレッドを使用するため、処理速度が向上 ## --move VIRUS/MOVED/DIR ウイルスファイルの移動先ディレクトリ ## YOUR/WORKING/DIR スキャンするディレクトリ。子ディレクトリもスキャンされる ## --remove ウイルスファイルを削除する ## --quiet 出力を抑制 ## --log=FILE ファイルに保存。デフォルトは/etc/clamav/clamd.conf内のLogFile指定 ## --fdpass ## 他のユーザが実行しているclamdデーモンでスキャン。 ## clamav-daemon.serviceを実行するclamdユーザーとしてファイルをスキャン。 ## Pass the file descriptor permissions to clamd. This is useful if clamd is running as a different user as it is faster than streaming the file to clamd. Only available if connected to clamd via local(unix) socket. $ echo $? ## clamdscanの返り値(リターンコード) ## 0 : No virus found ## 1 : Virus(es) found ## 2 : An error occurred
返り値を確認する
画面出力と/var/log/clamav/clamav.logでeicar.com.txt(無害ウイルス)の検知を確認する。
ログ(OUTPUT.txt)で「ウイルスファイルのrenameに失敗」「ハードリンクはできない」とか出力されるが、ウイルスファイルが移動先ディレクトリに移動されていた。
(OUTPUT.txt)
eicar.com.txt: Win.Test.EICAR_HDB-1 FOUND traverse_rename: Failed to rename: eicar.com.txt to: moved_virus/eicar.com.txt.001 Error:Invalid cross-device link eicar.com.txt: moved to 'moved_virus/eicar.com.txt.001' ----------- SCAN SUMMARY ----------- Infected files: 1 Time: 1.165 sec (0 m 1 s) Start Date: 2024:02:25 18:29:04 End Date: 2024:02:25 18:29:05
2021 Apr. 23. Ubuntuで、--multiscanを付けるとリターンコードが139となり動作しなくなった。
2022 Feb. 10. Ubuntuで、--multiscanを付けても動作した。
clamdscanをcron設定しておく
(Arch系のManjaro Linuxではsystemd/タイマーを利用するのが標準)
CRONに設定する。
$ sudo crontab -e
@reboot /usr/sbin/clamd -c /etc/clamav/clamd.conf 23 1 * * * /usr/bin/clamdscan --log=/var/log/clamav/clamdscan.log --multiscan --fdpass --quiet --move /var/moved_virus /
上記の定期設定で動作したので、サーバーPCはこの設定とした。
デスクトップPCで、システム起動時の実行としてcronで@reboot設定にすると
ERROR: Could not connect to clamd on LocalSocket /var/run/clamav/clamd.ctl: No such file or directory
となったので、下記の "systemd/タイマーへの定期実行設定" に変更した。
@reboot clamdscan --log=/var/log/clamav/clamdscan.log --multiscan --fdpass --quiet --move /var/moved_virus /
systemd/タイマーへの定期実行設定
参考ページ
systemdでtimerの作り方(最小限のサンプル) #systemd - Qiita
systemd/タイマー - ArchWiki
systemd .timerについて調べた事を記事にしておく | そう備忘録
実行するスクリプト作成
( /YOUR/SCRIPT/myclamdscan.sh)
#!/bin/bash /usr/sbin/clamd -c /etc/clamav/clamd.conf /usr/bin/clamdscan --log=/var/log/clamav/clamdscan.log --multiscan --fdpass --quiet --move /var/moved_virus /
systemdサービスファイル作成
/etc/systemd/system/myclamdscan.service
[Unit] Description=myClamdScan [Service] Type=simple ExecStart=/YOUR/SCRIPT/myclamdscan.sh [Install] WantedBy=multi-user.target
myclamdscan.serviceの有効化
$ sudo systemctl enable myclamdscan.service
systemdタイマーファイル作成
/etc/systemd/system/myclamdscan.timer
[Unit] Description=Runs myclamdscan.service [Timer] # ブート後、この時間後にこのタイマーを開始する。1minでは動作しなかったので2minにした。 OnBootSec=2min # 実行する時間の間隔 OnUnitActiveSec=4d Unit=myclamdscan.service [Install] WantedBy=multi-user.target
myclamdscan.timerの有効化
$ sudo systemctl enable myclamdscan.timer $ sudo systemctl start myclamdscan.timer
clamdscanの返り値をメールするようにしたらよいかも。
以下は参考程度に
ウイルス定義ファイル更新設定変更
/etc/clamav/freshclam.conf を修正する
ウイルス定義ファイル更新時のclamdサービスへの通知を非通知に設定する
# NotifyClamd // NotifyClamd行をコメント行にする
DatabaseMirror のドメインをjp に(db.XY.clamav.net→ db.jp.clamav.net)
ウイルス定義ファイル更新時にclamav-freshclam(ウイルス定義ファイル自動更新プログラム)が稼働しているとエラーを吐くので止める
# systemctl stop clamav-freshclam.service
ウイルス定義ファイル更新
# freshclam
画面出力とログ/var/log/clamav/freshclam.logを確認する
手動ウイルススキャン設定
ウイルス定義ファイル自動更新を起動
# systemctl start clamav-freshclam.service
デフォルトでは各種ファイル属性がclamavなのでrootに変更(この属性変更は不要か)
# chown root:clamav /var/log/clamav/freshclam.log
# chown root:clamav /var/lib/clamav
# chown root:clamav /var/lib/clamav/*
手動動作確認
お試し無害ウィルスをダウンロード
$ cd YOUR/WORKING/DIR
$ wget http://www.eicar.org/download/eicar.com
汚染ファイル隔離先ディレクトリを作成
$ mkdir ~/virus
手動ウイルススキャン実行
$ clamscan --infected --remove --recursive --move=${HOME}/virus --exclude-dir="^/dev/" --exclude-dir="^/proc/" --exclude-dir="^/sys/" DIR/TO/BE/SCANNED
結果が画面出力(標準出力か標準エラー出力か未確認)
clamdデーモンによる高速手動ウイルススキャン設定
clamdはサーバとして動作し、clamdscanコマンドを用いてソケット通信を介してウイルス検査を実行する。
clamscanよりも実行速度は速い
( 【Ubuntu 20.04/18.04 LTS Server】ClamAVで定期的にウイルスチェックし、メール通知する | The modern stone age. より )
データベース更新の間隔設定
/etc/clamav/clamd.confのSelfCheckの値の秒数間隔で更新される
スキャン実行者をrootにする
/etc/clamav/clamd.confのUser設定行をコメント行にする
# User clamav (clamavユーザーのままだとroot属性のファイルをスキャンできない)
ウイルススキャン時に"Directory recursion limit reached"と出るなら
/etc/clamav/clamd.confのMaxDirectoryRecursionを25にしてみる
MaxDirectoryRecursion 25
( Debian 9.3 ClamAV高負荷問題の対処 (Linux自作PC) より)
システムに高負荷がかかっているようなら
/lib/systemd/system/clamav-daemon.service の [Service]セクションに CPUQuota=50% と設定してみる
( Debian 9.3 ClamAV高負荷問題の対処2 (Linux自作PC) より)
ウイルススキャン
参考元
clamav - 「clamdscan」でフォルダを除外し、「-infected」のみをログに記録する方法は? - 初心者向けチュートリアル
オープンソースのアンチウイルスソフトウェア、ClamAVをCentOS 7にインストールする #clamav - Qiita
設定
/etc/clamav/clamd.confの編集(正規表現可能)
# Example // Exampleはコメント行にする User root ExcludePath ^/dev/ ExcludePath ^/proc/ ExcludePath ^/sys/
ウイルススキャン実行とオプション
# clamdscan --multiscan --fdpass --quiet /DIR/TO/BE/SCANNED > OUTPUT.txt
--multiscan 複数のスレッドを使用するため、処理速度が向上
--quiet 感染ファイルを除くすべての出力を抑制
--log=FILE ファイルに保存(出力リダイレクトでも可能)
--fdpass
clamav-daemon.serviceを実行するclamdユーザーとしてファイルをスキャン。
他のユーザが実行しているclamdデーモンでスキャン。
Pass the file descriptor permissions to clamd. This is useful if clamd is running as a different user as it is faster than streaming the file to clamd. Only available if connected to clamd via local(unix) socket.
clamdscanの返り値(リターンコード)
0 : No virus found.
1 : Virus(es) found.
2 : An error occurred.
参考 clamscanとclamdscanの使用方法 - tech.farend
clamdscan lstat() failed: Permission denied | まあのぶつぶつ
Configure clamdscan to scan all files on a system on Ubuntu 12.04 - Stack Overflow
clamav - 「clamdscan」でフォルダを除外し、「-infected」のみをログに記録する方法は? - 初心者向けチュートリアル
clamdscanで再起的なスキャン実行
# ls -R DIR/TO/BE/SCANNED | grep / | tr -d : | xargs clamdscan
( clamscanとclamdscanの使用方法 - tech.farend より)