前記事でUbuntu Serverをインストールしたが、念の為、アンチウイルスソフトウェア ClamAV をインストールし、定期的にチェックするようにする。
追記(2020/9/6)
Ubuntu 20.04 LTS Serverでも動作する事を確認した。
追記(2018/6/2)
Ubuntu 18.04 LTS Serverでも動作する事を確認した。
準備
下記コマンドでインストール
$ sudo apt install clamav clamav-daemon
尚、clamav関連の設定ファイルは、/etc/clamav/
フォルダにインストールされる。
ウイルス定義の更新
$ sudo freshclam
上記コマンドで、ウイルス定義が更新できるが、下記のようなエラーが出る場合はlog設定を変更して、再度実行。
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!
デフォルト設定だと、freshclam(ウイルス定義更新)の際にログ関係でエラーが起こりやすい。したがって、一度ログファイルを削除し、ログロテートの設定を変更しておく。
$ sudo rm /var/log/clamav/freshclam.log
$ sudo touch /var/log/clamav/freshclam.log
$ sudo chown clamav:clamav /var/log/clamav/freshclam.log
下記設定ファイルをエディタで変更
$ sudo nano /etc/logrotate.d/clamav-freshclam
create 640 clamav adm
↓
create 640 clamav clamav
ウイルス定義の自動更新確認
clamav
パッケージをインストールすると、ウイルス定義の自動更新が行われるサービスが登録されてるが確認する。
$ sudo service clamav-freshclam status
● clamav-freshclam.service - ClamAV virus database updater
Loaded: loaded (/lib/systemd/system/clamav-freshclam.service; enabled; vendor preset: e
Active: active (running) since Fri 2019-08-16 02:00:32 JST; 2 days ago
Docs: man:freshclam(1)
man:freshclam.conf(5)
https://www.clamav.net/documents
Main PID: 888 (freshclam)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/clamav-freshclam.service
└─888 /usr/bin/freshclam -d --foreground=true
8月 18 07:25:02 server freshclam[888]: Sun Aug 18 07:25:02 2019 -> daily.cld is up to d
8月 18 07:25:02 server freshclam[888]: Sun Aug 18 07:25:02 2019 -> bytecode.cld is up t
8月 18 08:25:02 server freshclam[888]: Sun Aug 18 08:25:02 2019 -> Received signal: wak
8月 18 08:25:02 server freshclam[888]: Sun Aug 18 08:25:02 2019 -> ClamAV update proces
尚、/var/log/clamav/freshclam.log
ファイルにログが記録される。
手動でウイルスチェックの実行
下記コマンド、手動スキャン実行できるが、けっこう時間が掛かる(遅い)。
$ sudo clamscan --infected --remove --recursive /home
テストウイルスをダウンロードしてウイルス検出
お試し無害ウィルスをダウンロードして検出するかテストしてみる。
$ cd ←/home/<user> ディレクトリに移動
$ wget http://www.eicar.org/download/eicar.com
$ sudo clamscan --infected --remove --recursive /home
/home/hoge/eicar.com: Eicar-Test-Signature FOUND
/home/hoge/eicar.com: Removed.
----------- SCAN SUMMARY -----------
Known viruses: 6281795
Engine version: 0.100.3
Scanned directories: 206
Scanned files: 657
Infected files: 1
Data scanned: 25.92 MB
Data read: 12.33 MB (ratio 2.10:1)
Time: 59.342 sec (0 m 59 s)
このように「FOUND
」という表示と「Infected files: 1
」という表示でウイルスを通知してくれる。又、「--remove
」オプションを付けているので、テストウイルスは削除された。
フルスキャンするスクリプトファイルを作成
$ sudo nano /opt/script/clam-full.sh
#!/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 "ウイルス未検出."
else
echo "ウイルス検出!!"
fi
実行権限を与える
$ sudo chmod +x /opt/script/clam-full.sh
ウイルス隔離用フォルダを作成しておく(既にあればOKだが、無いと上記スクリプトで除外ディレクトリに指定しているので実行時エラーになる)
$ sudo mkdir /var/log/clamav/virus
試しに実行してみる
$ sudo /opt/script/clam-full.sh
完了までけっこう時間がかかる(1時間程度)
尚、/var/log/clamav/clamscan.log
ファイルにログが記録される。
cronでウイルススキャンの定期実行
$ sudo crontab -e
# m h dom mon dow command
0 2 * * mon /opt/script/clam-full.sh >> /var/log/clamav/clamav_scan.log
上記例では、毎週月曜日の夜中2時に定期的に実行。
スキャン結果をメールで通知する
ウイルス検出時にはメール通知があると便利である。
まずは、スクリプトからmail
コマンドが使えるようにしておく必要がある。mailコマンドやメールサーバの構築は下記記事の「mailコマンドをインストール」を参考に、下記コマンドでインストール。
$ sudo apt install postfix
$ sudo apt install bsd-mailx
インターネット宛てのメール送信も出来なくはないが、セキュリティー面で色々と大変なので、とりあえず「ローカルのみ」で設定して進める。
前述で作成したスクリプトの最後の箇所を、下記のようにローカルユーザ宛にmail送信するように変更。
if [ $? = 0 ]; then
echo "ウイルス未検出."
# cat /var/log/clamav/clamscan.log | mail -s "Clamav scan OK." hogeuser@localhost
else
echo "ウイルス検出!!"
cat /var/log/clamav/clamscan.log | mail -s "Clamav scan NG!" hogeuser@localhost
fi
これで、サーバにログインした時に、ウイルス検出時は「You have mail.
」表示でメールが届いている事が分かる。ちなみに、メールの内容は mail
コマンドで読む事ができる。
インターネット宛メールを送信
上記の例では、サーバのローカルユーザ宛にメール通知したが、インターネット経由でメール送信したい場合は、下記記事を参照。
clamdを使ってみる
clamav-daemon
パッケージをインストールすると、clamdのサービスが起動する。
clamdはサーバとして動作し、clamdscan
コマンドを用いてソケット通信を介してウイルス検査を実行する。clamscan
よりも実行速度は速いが、デーモンが必要な為、管理が複雑となる。
下記の値を調整する。
デフォルトでは、データベースファイルの更新を1時間毎(3600秒)にチェックする。
$ sudo nano /etc/clamav/clamd.conf
SelfCheck 3600
下記行を、コメントアウトしてClam AntiVirusをrootユーザーで実行する。clamavというユーザーで実行するとroot権限のファイルを検査できないため。
User clamav
↓
#User clamav
設定変更したら、下記コマンドでサービスを再起動
sudo service clamav-daemon restart
サービスの動作確認は下記。
sudo service clamav-daemon status
尚、/var/log/clamav/clamav.log
ファイルにログが記録される。
clamdscanコマンドで手動チェック実行
$ sudo clamdscan /root
尚、clamdscan
コマンドは実行が早いが、引数が一部使えない。
又、clamdscan
で、/home
フォルダなどスキャンすると「lstat() failed: Permission denied. ERROR」が発生する。調べてみたが、いまの所対策は判らないのでclamdscan
は単体ファイルのスキャンなどで利用する事にした。
補足
- Linuxにウイルス対策ソフトは不要?という議論はあるが、念の為 ClamAV をインストールした。
/sys
などのフォルダ下で「Permission denide」のエラーが発生するので、/sys、/dev、/proc フォルダはスキャンから除外。(参考 12. 参照)- 削除されると起動することができなくなるようなブート用のファイル
/boot
もスキャンから除外しておくと安心。(参考 3. 参照) --log
オプションを指定しても、結果は標準出力にも表示される。clamscan
コマンドの終了ステータス($?
)で、ウイルス検出したかどうか判断できる。clamdscan
コマンドを利用しないのであれば、clamav-daemon
パッケージのインストールは不要。
参考
- Ubuntu14.04LTSで出来るだけSecureなサーバを構築する
- Clam AntiVirus インストール – Server World
- 無料で使えるLinuxのアンチウイルスソフト「Clam AntiVirus」の導入と設定の解説
- ClamAV
- ClamAV – ubuntu documentation
- Installing And Scanning By ClamAV On Ubuntu 14.04 LTS
- clamavのスキャン中のメモリ使用量を抑える
- Clam Antivirusに関するメモ
- 新米Linuxユーザーへの一言アドバイス――アンチウイルスソフトは不要です
- Linuxにアンチウイルスソフトは不要なのか?
- Clam Antivirusに関するメモ
- clamav + cron フルスキャンを定期実行
- 4.1.3. clamscanの戻り値
- (Linux) ClamAVで起動時スキャン、結果のメール送信
- シェルスクリプト(bash)のif文とtestコマンド([])自分メモ
- linux / mail > コマンドラインからメールを送る > echo “test” | mail -s “subject” user@software.com | ファイル添付メールの送信
コメント