【Ubuntu 20.04/18.04 LTS Server】ClamAVで定期的にウイルスチェックし、メール通知する

スポンサーリンク

前記事でUbuntu Serverをインストールしたが、念の為、アンチウイルスソフトウェア ClamAV をインストールし、定期的にチェックするようにする。

追記(2020/9/6)

Ubuntu 20.04 LTS Serverでも動作する事を確認した。

【Ubuntu 20.04 LTS Server】新規にインストールする
Ubuntu 20.04 LTS が、2020年4月24日にリリースされた。 先日の記事では Ubuntu 18.04 LTS Server からのアップグレードだったが、新規に「Ubuntu 20.04 LTS Server」をインストー...

追記(2018/6/2)

Ubuntu 18.04 LTS Serverでも動作する事を確認した。

【Ubuntu 18.04 LTS Server】インストールする
Ubuntu 18.04 LTS が、2018年4月26日(日本時間27日)にリリースされた。 そこで、新規に「Ubuntu 18.04 LTS Server」をインストールしたので備忘録を残す。 インストール媒体の入手 下記URLから、イ...

準備

下記コマンドでインストール

$ 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

インターネット宛てのメール送信も出来なくはないが、セキュリティー面で色々と大変なので、とりあえず「ローカルのみ」で設定して進める。

画像05

【Ubuntu 18.04/16.04 LTS Server】postfix メールサーバをサクッと使う
Ubunt Serverを独自ドメインで運用しているが、SSLボックス(CoreSSL) の公式SSL証明書を発行して貰うには、ドメイン所有者である事を証明するために、ドメイン名を含むメールアドレスへの確認メールを受け取る必要がある。そこで...

前述で作成したスクリプトの最後の箇所を、下記のようにローカルユーザ宛に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コマンドで読む事ができる。

インターネット宛メールを送信

上記の例では、サーバのローカルユーザ宛にメール通知したが、インターネット経由でメール送信したい場合は、下記記事を参照。

【Ubuntu】RubyでSMTP over SSLメールを送る
以前の記事で、Ubuntu Serverで「ClamAV」によるウイルスチェック結果を、ローカルユーザ宛てにメール通知するようにした。今回、インターネットメールを送信できるように、Rubyスクリプトを使ってメール送信するようにしたので備忘録...

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パッケージのインストールは不要。

参考

  1. Ubuntu14.04LTSで出来るだけSecureなサーバを構築する
  2. Clam AntiVirus インストール – Server World
  3. 無料で使えるLinuxのアンチウイルスソフト「Clam AntiVirus」の導入と設定の解説
  4. ClamAV
  5. ClamAV – ubuntu documentation
  6. Installing And Scanning By ClamAV On Ubuntu 14.04 LTS
  7. clamavのスキャン中のメモリ使用量を抑える
  8. Clam Antivirusに関するメモ
  9. 新米Linuxユーザーへの一言アドバイス――アンチウイルスソフトは不要です
  10. Linuxにアンチウイルスソフトは不要なのか?
  11. Clam Antivirusに関するメモ
  12. clamav + cron フルスキャンを定期実行
  13. 4.1.3. clamscanの戻り値
  14. (Linux) ClamAVで起動時スキャン、結果のメール送信
  15. シェルスクリプト(bash)のif文とtestコマンド([])自分メモ
  16. linux / mail > コマンドラインからメールを送る > echo “test” | mail -s “subject” user@software.com | ファイル添付メールの送信

コメント

タイトルとURLをコピーしました