Ubuntu 20.04にClamAVというアンチウイルスソフトをインストールする
- ClamAVとは
- インストール
- ウイルス定義ファイルの更新
- 手動でウイルススキャン
- オンアクセススキャンの設定を行う
- clamdscanを使った方法
- 自動でウイルススキャンを実行させる
- GUIであるClamTkのインストール
ClamAVとは
ClamAVは、OSSのアンチウイルスソフトウェアです。 オフィシャルサイトはこちらになります。
元々はメールゲートウェイでE-Mailのウイルススキャンを行うことを主目的として開発されていたそうです。 しかし、Windowsで使うような一般的なアンチウイルスソフトと同様に、ウイルス定義ファイル(パターンファイル)を基に、ファイルを検査するウイルススキャン機能もあります。
ウイルス定義ファイルは、インターネット上の配布サーバーで随時更新・配布されており、最新のウイルス定義を取得できます。 マルウェアをリアルタイムで検知する常駐監視機能(オンアクセススキャン、リアルタイムスキャン)も設定することができます。
インストール
以下のコマンドでapt経由でclamav
をインストールする。
$ sudo apt update $ sudo apt install clamav clamav-daemon
clamavのデーモンの状態を見てみる。
$ sudo systemctl status clamav-daemon
以下のような表示がされており、正しく動作していない場合がある。
Condition: start condition failed Condition check resulted in Clam AntiVirus userspace daemon being skipped.
その場合は、clamav-freshclam
を再起動した後に、再度clamav-daemon
を再起動するとうまく動作するらしいです。
$ sudo systemctl restart clamav-freshclam $ sudo systemctl restart clamav-daemon
ウイルス定義ファイルの更新
デーモンとして動作しているclamav-freshclam
は何をしているのか。
これが起動していれば、自動的にウイルス定義ファイルを更新してくれる。
$ sudo systemctl start clamav-freshclam.service $ sudo systemctl status clamav-freshclam.service Loaded: loaded (/lib/systemd/system/clamav-freshclam.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2021-11-27 18:34:52 JST; 13min ago Docs: man:freshclam(1) man:freshclam.conf(5) https://www.clamav.net/documents Main PID: 967962 (freshclam) Tasks: 1 (limit: 18770) Memory: 2.0M CGroup: /system.slice/clamav-freshclam.service └─967962 /usr/bin/freshclam -d --foreground=true
以下のコマンドでバックグラウンドで動作していることがわかる。
-d
などのコマンドオプションは何なのかを調べてみる。
man
コマンドで詳細が分かる。
$ freshclam -d --foreground=true $ man freshclam
-d
のオプションについて見てみると、以下のように書かれている。
デーモンモードで動作し、デフォルトでは1日12回更新のチェックを行う。
freshclam.conf
で詳細の設定が行え、ファイルの場所は/etc/clamav/freshclam.conf
にある。
-d, --daemon Run in a daemon mode. Defaults to 12 checks per day unless otherwise specified by --checks or fresh‐clam.conf.
ログは通常であれば、/var/log/clamav/freshclam.log
にある。
$ tail -f /var/log/clamav/freshclam.log
ウイルス定義の更新設定
ウイルス定義ファイルの更新を行うためのサーバーを設定できる。 ここれでは日本のミラーサーバーを追加登録する。
DatabaseMirror db.local.clamav.net
はコメントアウトして、DatabaseMirror db.jp.clamav.net
を追加する。
DatabaseMirror db.jp.clamav.net # DatabaseMirror db.local.clamav.net DatabaseMirror database.clamav.net
手動更新を行ってみる
以下のコマンドを打つと手動でウイルス定義ファイルを更新できるが、以下のようなエラーが表示される場合がある。
$ 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
次にログロテートの設定を変更する。
$ sudo vim /etc/logrotate.d/clamav-freshclam
以下の箇所を見つけて変更を行う。
create 640 clamav adm ↓ create 640 clamav clamav
再度、手動実行のコマンドを実行して、以下のような表示が出れば成功となる。
$ sudo freshclam Sat Nov 27 19:11:04 2021 -> ClamAV update process started at Sat Nov 27 19:11:04 2021 Sat Nov 27 19:11:04 2021 -> ^Your ClamAV installation is OUTDATED! Sat Nov 27 19:11:04 2021 -> ^Local version: 0.103.2 Recommended version: 0.103.4 Sat Nov 27 19:11:04 2021 -> DON'T PANIC! Read https://www.clamav.net/documents/upgrading-clamav Sat Nov 27 19:11:04 2021 -> daily.cvd database is up-to-date (version: 26366, sigs: 1948040, f-level: 90, builder: raynman) Sat Nov 27 19:11:04 2021 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr) Sat Nov 27 19:11:04 2021 -> bytecode.cvd database is up-to-date (version: 333, sigs: 92, f-level: 63, builder: awillia2)
手動でウイルススキャン
--infected
(-i)で感染したファイルのみを出力し、
--removeで感染したファイルを削除する。(
--removeは
=を付けることで
yes/noで選択することが可能だが、デフォルトでは
yes`になっている)
--recursive
(-r)でディレクトリを再帰的にスキャンされ、指定されたディレクトリ内のすべてのサブディレクトリがスキャンされる。
$ sudo clamscan --infected --remove --recursive <target_directory>
例えば、以下のコマンドでは/home
ディレクトリ配下に対してウイルススキャンを行い、感染したファイルを削除する。
$ sudo clamscan --infected --remove --recursive /home
以下のコマンドでアンチウイルスソフト用の無害なマルウェアをダウンロードすることができるので、これを使ってclamscan
で動作確認をする。
$ wget http://www.eicar.org/download/eicar.com $ ls -la|grep eicar -rw-rw-r-- 1 user user 68 7月 2 2020 eicar.com
実際に以下のコマンドでスキャンを行ってみる。(今回は削除をしないため、--remove
オプションはつけない。)
FOUND
と表示とされるのがマルウェアとして検出されたファイルとなる。
Infected files: 1
という表示で検出されたのは一つだけとなる。
$ clamscan --infected --recursive ./eicar.com /home/user/workspace/eicar.com: Win.Test.EICAR_HDB-1 FOUND ----------- SCAN SUMMARY ----------- Known viruses: 8580206 Engine version: 0.103.2 Scanned directories: 0 Scanned files: 1 Infected files: 1 Data scanned: 0.00 MB Data read: 0.00 MB (ratio 0.00:1) Time: 21.520 sec (0 m 21 s) Start Date: 2021:11:27 19:46:59 End Date: 2021:11:27 19:47:21
スキャン結果の詳細
スキャン結果の各項目について解説します。
----------- SCAN SUMMARY ----------- Known viruses: 8580206 Engine version: 0.103.2 Scanned directories: 0 Scanned files: 1 Infected files: 1 Data scanned: 0.00 MB Data read: 0.00 MB (ratio 0.00:1) Time: 21.520 sec (0 m 21 s) Start Date: 2021:11:27 19:46:59 End Date: 2021:11:27 19:47:21
- Known viruses: ウイルス定義数
- Engine version: ClamAVのバージョン
- Scanned directories: スキャンしたディレクトリ数
- Scanned files: スキャンしたファイル数
- Infected files: ウイルス検知数
- Data scanned: スキャンしたファイルサイズの合計
- Data read: スキャン走査したデータサイズ(圧縮データの展開分含む?)の合計
- Time: スキャン処理時間
オンアクセススキャンの設定を行う
ファイルアクセスの度にウイルススキャンを実行するオンアクセススキャンという機能があるが、デフォルトでは無効になっている。
自分の場合は重くなるのが嫌であるため、通常はOFFにしている。 ファイルの読み書きのたびにスキャン処理を行うため、各プロセスの処理が遅くなったり、常時、CPUおよびメモリリソースを使用してしまいます。
もし、ファイルサーバーなどを構築した際には、ファイルをアップロードする度にウイルススキャンを実行するなどにもなるため、有効になるかもしれない。
もし定期的に全体のウイルススキャンなどを行いたい場合は、cronなどを利用した1日1回または2回などの定期スキャンがおすすめです。
以下の設定で、このオンアクセススキャンを有効にすることができる。
# 設定ファイルをエディタで開く $ vim /etc/clamav/clamd.conf
# 以下の箇所を変更 ScanOnAccess true User root # 以下を追記する OnAccessMountPath / OnAccessPrevention false OnAccessExtraScanning true OnAccessExcludeUID 0 VirusEvent /opt/clamav-utils/clamd-response.sh
上記の設定では、オンアクセススキャン対象とするディレクトリをルートディレクトリ以下全て(OnAccessMountPath
)に設定している。
全てのファイルへの読み取り権限が必要なため、実行ユーザーはroot
に設定する必要がある。
一番最後のVirusEvent
という設定は、マルウェアが見つかった時に任意のスクリプトを実行させることができる。ここでは/opt/clamav-utils/clamd-response.sh
というスクリプトを実行させるように設定している。
clamdscanを使った方法
clamav-daemon
パッケージを上記のapt経由でインストールしたが、これをインストールすることでclamd
のサービスが起動する。
clamd
はサーバとして動作し、clamdscan
コマンドを用いる。(先程実行したのはclamscan
コマンド)
clamdscan
コマンドは、ソケット通信を介してウイルス検査を実行する。デーモンが必要で管理が複雑となるが、clamscan
よりも実行速度は速い。
他にもマルチスレッド実行が可能となる。(-m
オプションをつけることでマルチスレッド実行が可能となる)
デフォルトでは、データベースファイルの更新を1時間毎(3600秒)にチェックしている。 下記コマンドで更新の時間を変更することができる。
$ vim /etc/clamav/clamd.conf
SelfCheck 3600
実際にclamdscan
コマンドを使って手動チェック実行してみる。clamscan
よりも高速なため、すぐに結果が表示されるはず。問題点としては、clamscan
よりも一部の引数が使えない。
$ sudo clamdscan ./eicar.com /home/user/workspace/eicar.com: Win.Test.EICAR_HDB-1 FOUND ----------- SCAN SUMMARY ----------- Infected files: 1 Time: 0.003 sec (0 m 0 s) Start Date: 2021:11:27 20:13:55 End Date: 2021:11:27 20:13:55
自動でウイルススキャンを実行させる
#!/bin/sh echo ========================================= date hostname clamscan / \ --infected \ --recursive \ --log=/var/log/clamav/clamscan.log \ --move=/var/log/clamav/virus \ --exclude-dir=^/boot \ --exclude-dir=^/sys \ --exclude-dir=^/proc \ --exclude-dir=^/dev \ --exclude-dir=^/var/log/clamav/virus # --infected 感染を検出したファイルのみを結果に出力 # --recursive 指定ディレクトリ以下を再帰的に検査 圧縮ファイルは解凍して検査 # --log=FILE ログファイル # --move=DIR 感染を検出したファイルの隔離先 # --remove 感染を検出したファイルを削除 # --exclude=FILE 検査除外ファイル(パターンで指定) # --exclude-dir=DIR 検査除外ディレクトリ(パターンで指定) if [ $? = 0 ]; then echo "ウイルス未検出." # cat /var/log/clamav/clamscan.log | mail -s "Clamav scan OK." username@localhost else echo "ウイルス検出!!" cat /var/log/clamav/clamscan.log | mail -s "Clamav scan NG!" username@localhost fi
ウイルススキャン実行スクリプトのファイルを移動して実行権限を与える
$ cp clamav-full.sh /opt/script/clamav-full.sh $ chmod +x /opt/script/clamav-full.sh
cronでウイルススキャンの定期実行を設定する
crontab -e # m h dom mon dow user command # 分 時 日 月 曜日 ユーザー コマンド # example: 毎日18時に定期的に実行。 # m h dom mon dow command 0 18 * * * /opt/script/clamav-full.sh >> /var/log/clamav/clamav_scan.log # example: 毎週月曜日の18時に定期的に実行。 # m h dom mon dow command 0 18 * * mon /opt/script/clamav-full.sh >> /var/log/clamav/clamav_scan.logCopy
GUIであるClamTkのインストール
ClamTkを入れれば、ウイルスキャンの定期実行などの設定をGUIで行うことができる。
$ sudo apt install clamtk
ClamTkを起動すると、以下の画像のようなものが表示される。
まず最初に「設定」を開いてみると、以下のような表示がされるはず。
詳細な設定は以下に詳しく載っています。
ClamAVのGUI版ClamTkがLinuxの最適ウイルス対策ソフトだった|ざっくりLinux!- 46 | ウラの裏