サーバーで定期的にウィルスチェックを行う

ウェブサーバーを運営していると、ウィルス対策が求められることも多いが、そのためにわざわざコンソールを触ってウィルスチェックを行うのはあまりにも効率が悪いので、自動的にウィルスチェックを行うようにした方が良い。その上でしばしば使われるのがClamAVである。とはいえ、メインメモリの容量の小さいインスタンスでは、ClamAVをデーモンとして使うとメモリが枯渇するので、今回は非デーモン形式の方法で記載を行いたい。

今回、私が行った方法は以下の通りである。

  • ウィルススキャンソフトはClamAVを使用。
  • 一連の記録を/var/log/clamscanに保存
  • メッセージ送信(今回はAmazon SNSを使う)を想定していたので、スキャン結果をSNSに通知した。

まず、以下の対応を行う。

  • Amazon SNSに任意のトピックを追加、サブスクライブも任意のメールアドレスなどを登録しておく。 [1]cf. Amazon SNS トピックとサブスクリプションの作成 – AWS IoTコア 開発者ガイド
  • 実行させるサーバーでAWS CLIの設定を完了しておく。 [2]cf. 設定の基本 – AWS Command Line Interfaceユーザーガイド
  • ClamAVが必要であるため、もしインストールが完了していない場合は、パッケージ管理ツールなどを使用してインストールする。また、ClamAVの設定を行う必要がある場合もあるので、その点については注意が必要。

その後、以下のスクリプトを「/etc/cron.daily/clamscan.cron」などのパスで作成する(root権限必須)。

#!/bin/sh
LOG_TEMP=/tmp/clamscan.log
LOG_OUTPUT=/var/log/clamscan.log
TOPIC_ARN=(送信先のトピックのARNをここに指定する)
SCAN_PATH=(ここにスキャンする対象のパスを指定する)

echo "ClamAV result for $(hostname)" > $LOG_TEMP
echo "Begin date: $(date)" >> $LOG_TEMP
freshclam --user=root --log=$LOG_TEMP > /dev/null 2>&1
clamscan --recursive --log=$LOG_TEMP $SCAN_PATH > /dev/null 2>&1

aws sns publish --topic-arn $TOPIC_ARN --message "$(cat $LOG_TEMP)"

cat $LOG_TEMP >> $LOG_OUTPUT

rm $LOG_TEMP

スクリプトを作成したら、以下のコマンドでパーミッションを変更する。

sudo chmod 700 /etc/cron.daily/clamscan.cron

上記の対応が完了したら、問題なく動くことを確認するため、以下のコマンドで走らせる。

sudo /etc/cron.daily/clamscan.cron

上記のコマンドでエラーが表示されず問題なく動いたら、対応完了である。

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