Clam Antivirus でウィルス対策(CentOS7)

ウィルス対策ソフト「Clam AntiVirus」を自宅サーバー(CentOS7)にインストールします。

Clam AntiVirus

例によってOS標準のリポジトリには存在しません。

RPMforgeリポジトリは終了したのかアクセスできず。

EPELリポジトリでは導入できるらしいです。

以下のサイトを参考に導入しました。
ありがとうございました。
CentOS7へclamavインストール(epelリポジトリ使用) | server-memo.net


「RPMforge」にあるclamdとは異なり、「epel」のリポジトリのClamAVはその機能ごとに色々なパッケージに分かれてるようです。複数のパッケージをインストールします。
■clamavパッケージのインストール

# yum -y install --enablerepo=epel clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd

■clamd@scan設定
デーモンとして常時動作させるためclamd@scanの設定を行っていきます。
設定ファイル「/etc/clamd.d/scan.conf」を編集します。

# cp -p /etc/clamd.d/scan.conf /etc/clamd.d/scan.conf.bak
# nano -K /etc/clamd.d/scan.conf

各項目を検索し、変更・追加します。

#Example     ←Exampleのコメント化
LogFile /var/log/clamd.scan     ←ログファイル設定
LogFileMaxSize 2M     ←ログファイルサイズ設定
LogTime yes     ←ログに時間を表示
LogRotate yes     ←ログローテーション設定
LocalSocket /var/run/clamd.scan/clamd.sock     ←ローカルソケット使用設定(1行での設定となります)
FixStaleSocket yes      ←異常終了時にソケットを削除
ExcludePath ^/proc/      ←スキャン除外ディレクトリ設定
ExcludePath ^/sys/
ExcludePath ^/dev/
ExcludePath ^/home/satoh163/mondo/
#User clamscan
User root      ←実行ユーザ設定

■clamd@scan起動、ステータス確認、有効化(自動起動化)

# systemctl start clamd@scan
# systemctl status clamd@scan
# systemctl enable clamd@scan



■ウィルスデータベースの自動更新設定
「freshclam」の設定ファイル「/etc/freshclam.conf」を編集。

# cp -p /etc/freshclam.conf /etc/freshclam.conf.bak
# nano -K /etc/freshclam.conf

各項目を検索し、変更・追加します。

#Example     ←Exampleのコメント化
UpdateLogFile /var/log/freshclam.log     ←ログファイル設定
LogFileMaxSize 2M     ←ログファイルサイズ設定
LogTime yes     ←ログに時間を表示
LogRotate yes     ←ログローテーション設定
#DatabaseMirror database.clamav.net     ←コメント化
DatabaseMirror db.jp.clamav.net     ←ミラーデータベース設定
#NotifyClamd /path/to/clamd.conf
NotifyClamd /etc/clamd.d/scan.conf      ←clamd@scanへの更新通知

●「/etc/sysconfig/freshclam」を編集しておく必要がありました。

# nano -K /etc/sysconfig/freshclam
#FRESHCLAM_DELAY=disabled-warn # REMOVE ME     ←コメント化

● clamd デーモンを起動しておく必要がありました。

# systemctl enable clamav-daemon.service
# systemctl start clamav-daemon.service
# systemctl status clamav-daemon.service

●また、clamscanがclamdの設定ファイルを/etc/に求めるようなので、シンボリックリンクを張ります。

# ln -s /etc/clamd.d/scan.conf /etc/clamd.conf

●それと、clamavというユーザーが存在するか確認(# cat /etc/passwd)し、無ければ作成します。
 *ログインの必要がないのでnologinで。

# useradd -s /sbin/nologin clamav -m -d /usr/local/share/clamav -k /dev/null

●手動で「freshclam」を実行してウイルスデータベースが更新できることを確認。

# freshclam -u root
ClamAV update process started at Mon Dec 26 19:34:13 2016
Downloading main.cvd [100%] main.cvd updated (version: 57, sigs: 4218790, f-level: 60, builder: amishhammer)
Downloading daily.cvd [100%] daily.cvd updated (version: 22779, sigs: 1187394, f-level: 63, builder: neo)
Downloading bytecode.cvd [100%] bytecode.cvd updated (version: 285, sigs: 57, f-level: 63, builder: bbaker)
Database updated (5406241 signatures) from database.clamav.net (IP: 193.1.193.64)
Clamd successfully notified about the update.
#

●ウィルスデータベースの自動更新設定は、cron 設定ファイル「/etc/cron.d/clamav-update」にあります。
デフォルトで、3時間おきにウイルスデータベースの更新がチェックされます。

# nano -K /etc/cron.d/clamav-update

通知先を変えたい場合、MAILTO=rootを変更します。

## Adjust this line…
#MAILTO=root
MAILTO=info@a21-hp.com

## It is ok to execute it as root; freshclam drops privileges and becomes
## user ‘clamupdate’ as soon as possible
0 */3 * * * root /usr/share/clamav/freshclam-sleep

処理が完了するとメールが送られてくるはずなのですが、うまく機能していない節がある・・・。
(clamav-freshclam.serviceを起動していないのが原因か?・・・起動すると手動テストが通らない???)

・・・そこで、clamav-freshclam.serviceは停止のまま、とりあえずの代替案として

●crontabでウィルスデータベースの自動更新設定をします。
まず、ウイルスデータベース更新用スクリプトを作成します。(/scriptsディレクトリは昨日作成済み。)

    # nano -K /scripts/clamav-update.sh
    

以下の内容をコピー&ペーストします。

    #!/bin/bash
    /usr/local/bin/freshclam -u root
    

●作成したファイルに実行権限を付加します。

    # chmod +x /scripts/clamav-update.sh
    

●cronに登録する前に、手動で実行し、動作を確認します。

    # sh -x /scripts/clamav-update.sh
    

処理結果の情報は標準出力のみです。

●クーロンタブ(crontab)で、ジョブを追加します。

    # crontab -e
    

●ファイルの最後にclamav-update.shを追加します。

    MAILTO=info@a21-hp.com
    00 03 * * * /scripts/do_backup.sh
    30 02 * * * /scripts/clamav-update.sh
    

毎日2:30に、/scripts/clamav-update.sh を自動実行するように追加しました。

ウィスルデータベース更新の通知メールが届きました。



■ウィルス検出テスト
先に、ウイルスチェックテスト用ファイル(無害)である「eicar.com」をダウンロード。

# cd /root
# wget http://www.eicar.org/download/eicar.com

clamdscan を手動で実行し、動作確認します。

# clamdscan /root
/root/eicar.com: Eicar-Test-Signature FOUND

———– SCAN SUMMARY ———–
Infected files: 1
Time: 0.017 sec (0 m 0 s)
#

/root ディレクトリ以下のスキャンなので、すぐ終わります。
「Infected files: 1」となっていれば、検出成功です。


■定期ウィルスチェックの設定
まず、ウイルススキャン用スクリプトを作成します。(/scriptsディレクトリは昨日作成済み。)

# nano -K /scripts/do_virusscan.sh

以下の内容をコピー&ペーストします。

#!/bin/bash
 
SCANDIR=/
VIRUS_MVDIR=/root/virus
MAILADDR=info@a21-hp.com
 
CLAMDSCAN=/bin/clamdscan
HOSTNAME=a21-hp.com
RUNDATE=`date +%Y%m%d-%H%M%S`
SCANTMP=/tmp/clamdscan_$RUNDATE
 
CLAMUPDATE="clamav-server \
clamav-data \
clamav-update \
clamav-filesystem \
clamav \
clamav-scanner-systemd \
clamav-devel \
clamav-lib \
clamav-server-systemd"
 
 
# ClamAV update
 
yum -y update $CLAMUPDATE
 
 
# Virus scan
 
#$CLAMDSCAN $SCANDIR > $SCANTMP 2>&1
#$CLAMDSCAN $SCANDIR --move=$VIRUS_MVDIR > $SCANTMP 2>&1
$CLAMDSCAN $SCANDIR --remove > $SCANTMP 2>&1
 
 
# Mail notification
 
[ ! -z "$(grep FOUND$ $SCANTMP)" ] && \
cat $SCANTMP | mail -s "[Virus Found] $HOSTNAME $RUNDATE" $MAILADDR
 
[ -z "$(grep FOUND$ $SCANTMP)" ] && \
cat $SCANTMP | mail -s "[Virus Not Found] $HOSTNAME $RUNDATE" $MAILADDR
 
rm -f $SCANTMP

必要な部分を修正します。

5行目で、結果の通知先メールアドレスを指定します。

8行目に、ホスト名を指定します。

30~32行目で、ウィルスの対処を選択します。コメントアウトした行により動作が変わります。
30行目は「通知のみ」、31行目は4行目のVIRUS_MVDIRで指定したディレクトリに「移動(隔離)」、32行目は「削除」です。

●作成したファイルに実行権限を付加します。

    # chmod +x /scripts/do_virusscan.sh
    

●cronに登録する前に、手動で実行し、動作を確認します。

    # sh -x /scripts/do_virusscan.sh
    

処理が完了するとメールが送られてきます。
ルート(/)からのスキャンなので、終了まで15分ほどかかりました。

●クーロンタブ(crontab)で、ジョブを追加します。

    # crontab -e
    

●ファイルの最後から2番目にvirus_check.shを追加します。

    MAILTO=info@a21-hp.com
    00 03 * * * /scripts/do_backup.sh
    40 02 * * * /scripts/do_virusscan.sh
    30 02 * * * /scripts/clamav-update.sh
    

毎日2:40に、/scripts/do_virusscan.sh を自動実行するように追加しました。

2:40ウィルスチェック開始後、パッケージのアップデートに関するメールが届きました。


2:57ウィルスチェックが完了し、再度、シェルスクリプトからの通知メールが届きました。

「Infected files: 0」となっており、ウィルスは検出されず。

    先頭行の「/run/user/1000/gvfs: lstat() failed: Permission denied. ERROR」は、GVFS(GNOMEデスクトップの仮想ファイルシステム)の権限が無いらしい。
    実際、# ls -la /run/user/1000 を実行してみると、gvfs のパーミッション、ユーザ、グループ、サイズ、作成日が「?」と表示さます。要は、/run/user/1000/gvfsディレクトリに対して、ウィルススキャン実行ユーザであるrootにアクセス権が無い状態です。
    このエラーが出ないようにするには、アンマウントします。
    ただし、再起動のたびにマウントされるので、.bashrc 内にumountの記述を追加してみました。

      # nano -K ~/.bashrc
      

    最終行にでも以下を追加。オプション「-l」を付けると、正常にアンマウントされます。

      umount -l /run/user/1000
      

    再起動したら、今後はエラー表示されない筈です。

それより、ウィルスチェックが開始2:40で完了2:57でした。
続いて3:00からバックアップ処理開始だと少し、時間の余裕が足りなかったようです。
・・・のちほど、見直しましょう。


・・・これで、何とかウィルス対策ソフトも導入完了しました。