Debian 9.3 Stretchでウイルス対策の設定を行っていきます。

本記事では常時稼働するディープラーニング用マシンにウイルス対策としてrootkit対策とClamAVの導入を行います。

前回にパケットフィルタの設定を行った続きとなります。

Rootkit検出ツールchkrootkit

chkrootkitを使います。

$ sudo apt install chkrootkit
$ sudo chkrootkit | grep INFECTED

INFECTEDが検出されなければとりあえずOKです。インストール直後にやっていれば問題ないでしょうが、運用からしばらくたっていると非感染を保証できないので注意しましょう。

自動実行は/etc/cron.daily/chkrootkitで自動で行われます。 何か問題があればroot当てにメールが届きます。

メールの転送設定についてはまた別の記事で行います。

以下参考です。

アンチウイルスソフトClamAV

ウイルス対策のソフトウェアとして、ClamAVを使用します。インストールは公式の手順に従って行います。

$ sudo apt install clamav

自動でclamav-freshclamが入るせいか、ウイルス定義ファイルの更新を行うfreshclamを自分で実行してもエラーが出ます。 自分で確認するには、一度clamav-freshclamを停止する必要があります。

$ sudo systemctl stop clamav-freshclam
$ sudo freshclam
$ sudo systemctl start clamav-freshclam

freshclam.confでデータベース更新間隔を確認できます。 デフォルトでは24Hとなっています。

$ grep Checks /etc/clamav/freshclam.conf

clamav-daemonの設定

自動スキャンを行うにはclamav-daemonが必要です。

$ sudo apt install clamav-daemon

スキャンにはclamdscanを使用します。メモリ消費が多い代わりに標準のclamscanよりはるかに高速みたいです。

また、clamavのdeamonはclamavのユーザーレベルで走るので、すべてのファイルの検索などではパーミッションエラーが出てしまいます。

ちなみにclamscanはsudoでやればアクセス可能だが、clamdscanはアクセス不可。daemon使う関係のせいやくでしょう。

すべてのファイルのスキャンに手っ取り早いのはrootユーザーでClamAVを実行することです。以下のように設定ファイル/etc/clamav/clamd.confに設定を追加します。

# 除外ディレクトリを追加
ExcludePath ^/dev/
ExcludePath ^/proc/
ExcludePath ^/sys/

User clamav
↓
User root

サービスの再起動を行って設定を反映させます。

$ sudo systemctl restart clamav-daemon
$ sudo systemctl status clamav-daemon

ClamAVの自動実行スクリプトの作成

さて、スキャンの設定を行いましたが、このままでは自動でスキャンの実行は行われません。 そこで、自前のスクリプトを用意して定期実行させることにします。

まずは次のようなシェルスクリプト/root/clam-full.shを作成します。

#!/bin/bash

PATH=/usr/bin:/bin
TITLE=""
TO="To: root\n"
SENDMAIL=/usr/sbin/sendmail
#SENDMAIL=echo

# update definition
# freshclam > /dev/null

# full scan (multi-thread)
#clamdscan --multiscan --verbose --move=/var/log/clamav/virus /

# full scan (single-thread)
clamdscan --verbose --move=/var/log/clamav/virus /

# report
if [ $? = 0 ]; then
    echo "virus not found"
    TITLE="Subject: ClamAV scan OK"
    echo -e $TO$TITLE | cat - /var/log/clamav/clamav.log | $SENDMAIL -t
elif [ $? = 1 ]; then
    echo "virus found"
    TITLE="Subject: ClamAV scan NG"
    echo -e $TO$TITLE | cat - /var/log/clamav/clamav.log | $SENDMAIL -t
else
    echo "error occured"
    TITLE="Subject: ClamAV scan Error"
    echo -e $TO$TITLE | cat - /var/log/clamav/clamav.log | $SENDMAIL -t
fi

そして実行権限を付与します。

$ sudo chmod +x clam-full.sh

Crontabへの登録(誤設定)

このCrontabの設定には誤りがあります。次のセクションが修正したものです。

また、crontabを使って定期実行の登録を行います。

$ sudo crontab -e
* 2 * * 1 /root/clam-full.sh

ここでは月曜日の2時に定期実行するものとしました。 後はメール設定でsendmailコマンドが実行できるようにする必要がありますが、それはまた後程行います。

Crontabへの登録(修正版: 2018/01/09)

上記の設定だと月曜2時00~59分の毎分スキャンすることになって負荷が非常に大きくなります。想定通り月曜日の2時に定期実行を行うcrontabの設定は次のようになります。

$ sudo crontab -e
0 2 * * 1 /root/clam-full.sh

所有者権限の変更

/var/log/clamav/以下のファイルの所有権はclamav:admで所有者変更をしておきます。

追記(2018/01/01, 2018/01/09)

フルスキャンの定期実行において、CPU高負荷の問題が発生したため、以下の記事でその問題に対処しています。詳しくはそれらをご覧ください。

参考

ClamAVの設定は次のページを参考にしました。

今後

GPUの設置前にまだいくつか設定しておきます。もうしばらくお付き合いください。