注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。
ウェブサーバーを運営していると、ウィルス対策が求められることも多いが、そのためにわざわざコンソールを触ってウィルスチェックを行うのはあまりにも効率が悪いので、自動的にウィルスチェックを行うようにした方が良い。その上でしばしば使われるのがClamAVである。とはいえ、メインメモリの容量の小さいインスタンスでは、ClamAVをデーモンとして使うとメモリが枯渇するので、今回は非デーモン形式の方法で記載を行いたい。
今回、私が行った方法は以下の通りである。
- ウィルススキャンソフトはClamAVを使用。
- 一連の記録を
/var/log/clamscan
に保存 - メッセージ送信(今回はAmazon SNSを使う)を想定していたので、スキャン結果をSNSに通知した。
まず、以下の対応を行う。
- Amazon SNSに任意のトピックを追加、サブスクライブも任意のメールアドレスなどを登録しておく。 ((cf. Amazon SNS トピックとサブスクリプションの作成 – AWS IoTコア 開発者ガイド))
- 実行させるサーバーでAWS CLIの設定を完了しておく。 ((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
上記のコマンドでエラーが表示されず問題なく動いたら、対応完了である。
ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。主にスマートフォン向けアプリやウェブアプリの開発を携わっています。ご用の方はコメントかコンタクトフォームにて。