ウイルス対策
動作確認済みシステム Debian 11
ウイルス対策のために、ClamAVを導入し、定期スキャンを設定します。
リポジトリにあるClamAVは、バージョンが古いことがあるので、ソースコードからインストールする方法を説明します。今回インストールするClamAVのバージョンは、1.2.0です。
まず、稼働中のサーバーのカーネルが fanotify をサポートしていることを確認します。
CONFIG_FANOTIFY=y
CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
の2行が確認できればOKです。
ls /boot/config*
/boot/config-5.10.0-9-amd64
cat /boot/config-5.10.0-9-amd64 | grep FANOTIFY
CONFIG_FANOTIFY=y
CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
必要なパッケージをインストールします。
apt install gcc make pkg-config python3 python3-pip python3-pytest valgrind check libbz2-dev libcurl4-openssl-dev libjson-c-dev libmilter-dev libncurses5-dev libpcre2-dev libssl-dev libxml2-dev zlib1g-dev libsystemd-dev
python3でcmakeをインストールします。
python3 -m pip install cmake
Rustもインストールする必要があります。こちらを参考にインストールしてください。
Rustツールチェーンのインストール
clamav用のグループ、ユーザーを作成します。
groupadd clamav
useradd -g clamav -s /bin/false -c "Clam Antivirus" clamav
clamavのソースコードをダウンロードします。
cd /usr/local/src/
wget https://www.clamav.net/downloads/production/clamav-1.2.0.tar.gz
ダウンロードしたtar.gzファイルを展開します。
tar zxvf clamav-1.2.0.tar.gz
展開したディレクトリの中にbuildディレクトリを作成し、その中に入ります。
cd clamav-1.2.0
mkdir build && cd build
cmake .. -D CMAKE_INSTALL_PREFIX=/usr -D CMAKE_INSTALL_LIBDIR=lib -D APP_CONFIG_DIRECTORY=/etc/clamav -D DATABASE_DIRECTORY=/var/lib/clamav -D ENABLE_JSON_SHARED=OFF
cmake --build .
ctest
cmake --build . --target install
ウイルススキャンを定期的に実行するためのスクリプトファイルと、リアルタイムスキャンでウイルスが見つかった場合に実行するためのスクリプトファイルを置くフォルダを作成し、その中に入ります。
cd /root/
mkdir bin
cd bin
ウイルススキャンの定期実行スクリプトを作成します。
vi virus_scan.sh
#!/bin/bash
SCANDIR=/
VIRUS_MVDIR=/root/virus
MAILADDR=administrator@example.com
CLAMDSCAN=/bin/clamdscan
HOSTNAME="example.com"
RUNDATE=`date +%Y%m%d-%H%M%S`
SCANTMP=/var/tmp/clamdscan-cron_$RUNDATE
LOGFILE=/var/log/clamav/clamdscan-cron_$RUNDATE.log
$CLAMDSCAN -l $LOGFILE $SCANDIR > $SCANTMP 2>&1
# Mail notification
[ ! -z "$(grep FOUND$ $SCANTMP)" ] && \
cat $SCANTMP | mail -s "[$HOSTNAME] Virus Found $RUNDATE" $MAILADDR
[ -z "$(grep FOUND$ $SCANTMP)" ] && \
cat $SCANTMP | mail -s "[$HOSTNAME] Virus Not Found $RUNDATE" $MAILADDR
rm -f $SCANTMP
リアルタイムスキャンでウイルスが見つかった場合に実行するスクリプトファイルを作成します。
cd /root/bin/
vi found_virus.sh
#!/bin/bash
HOSTNAME="example.com"
MAILADDR=administrator@example.com
export LANG=C
message="Virus Found: $CLAM_VIRUSEVENT_VIRUSNAME in $CLAM_VIRUSEVENT_FILENAME"
echo "$message" | mail -s "[$HOSTNAME] Virus Found" $MAILADDR
作成したそれぞれのスクリプトに実行権限を与えます。
chmod +x virus_scan.sh
chmod +x found_virus.sh
作成したスクリプトを文法チェックします。
/bin/bash -n virus_scan.sh
/bin/bash -n found_virus.sh
何も表示されなければ、文法チェックOKです。
設定ファイルをコピーします。
cd /etc/clamav/
cp clamd.conf.sample clamd.conf
cp freshclam.conf.sample freshclam.conf
設定を行います。
vi /etc/clamav/clamd.conf
# コメント化
#Example
# コメント解除
LogFile /var/log/clamav/clamav.log
# コメント解除
LogFileMaxSize 2M
# コメント解除
LogTime yes
# コメント解除
LogRotate yes
# コメント解除
PidFile /var/run/clamd.pid
# コメント解除
TemporaryDirectory /var/tmp
# 追記
LocalSocket /var/run/clamav/clamd.ctl
# コメント解除
LocalSocketMode 660
# コメント解除
FixStaleSocket yes
# コメント解除
TCPSocket 3310
# コメント解除
TCPAddr localhost
# 追記
ExcludePath ^/proc/
ExcludePath ^/sys/
ExcludePath ^/dev/
ExcludePath ^/var/lib/
ExcludePath ^/var/log/
ExcludePath ^/etc/
ExcludePath ^/run/
# 追記
VirusEvent /root/bin/found_virus.sh
# 変更
#User clamscan
User root
# 追記
OnAccessIncludePath /home
OnAccessIncludePath /var/www
# コメント解除
OnAccessExtraScanning yes
# 追記
OnAccessExcludeRootUID yes
# コメント解除
OnAccessExcludeUname clamav
vi /etc/clamav/freshclam.conf
# コメント化
#Example
# 追記
UpdateLogFile /var/log/clamav/freshclam.log
# コメント解除
LogFileMaxSize 2M
# コメント解除
LogTime yes
# コメント解除
LogRotate yes
# コメント解除
DatabaseOwner clamav
# 修正
DatabaseMirror database.clamav.net
DatabaseMirror db.jp.clamav.net
# 追記
NotifyClamd /etc/clamav/clamd.conf
clamavのログディレクトリを作成し、所有ユーザ・所有グループを設定します。
mkdir /var/log/clamav/
chown clamav:clamav /var/log/clamav
ウイルス定義ファイルを更新します。
freshclam
サービスの起動、自動起動設定を行います。
systemctl enable clamav-daemon.service
systemctl start clamav-daemon.service
systemctl enable clamav-freshclam.service
systemctl start clamav-freshclam.service
systemctl enable clamav-clamonacc.service
systemctl start clamav-clamonacc.service
インストール直後は、テストファイルが存在しているので、テストファイルを検出しながら、削除します。
cd /usr/local/src/clamav-0.104.1/build/unit_tests/input/
clamdscan ./ --remove
定期実行の設定を行います。
vi /etc/cron.d/virus_scan
MAILTO=root
00 4 * * 0 root /root/bin/virus_scan.sh
毎週日曜日の4時にrootユーザで/root/bin/virus_scan.shを実行する、という設定です。
これで、ClamAVを使って、定期ウイルススキャンとリアルタイムスキャンができるようになりました。