ClamAVでウイルス対策!定期スキャン設定と、Gmailへの通知メール設定【初心者向け】

記事内に広告を含みます

Almalinux のKVMを利用してVMを作成します。
そのVM上で、プリザンターを動作させる予定です。
構成については、プリザンターで作る!ローコード業務改善システムの構築方法:イントロを確認してくださいね。

Almalinuxには、KVMを簡単管理できるツール、Cockpitがあります。
ブラウザアクセスで、仮想ネットワークスイッチの作成、VMの追加・起動・停止など簡単に操作できます。

Cockpitの前に、ウイルス対策を行います。ホストPC、VMともにです。
事業や会社で使用するPCには、ウイルス対策は必須!っとしていることが多いと思います。
有料のサービスもたくさんありますが、今回は無料のClamAVをセットアップし、定期的に指定場所をスキャンすることにします。

今回は、まだVMは作成していませんので、ホストPCの設定のみ、VMは作成したら設定しますね。
ClamAVインストールからウイルス定義自動更新までは、ClamAVでウイルス対策!AlmaLinuxへの導入と自動更新設定手順【初心者向け】を確認してくださいね。

この記事でわかること。

  • 指定場所のウイルススキャン定期実行設定。
  • ウイルス検知時の通知設定(Gmailに送信するよ)。
  • ウイルススキャンログの設定。

Step1

まずは設計、なにをどうするかを決めます。
ClamAVでウイルス対策!AlmaLinuxへの導入と自動更新設定手順【初心者向け】で設計していますので再掲載です。

ウイルス対策設計

定義ファイルの更新は、ホストPC/VMともに1日1回とします。
ダウンロード先は、ホストPCがClamAV公式サイト。VMはホストPCとします。

ウイルス検索周期

ホストPC/VMともに1週間に1回とします。

検出した時の対策

ホストPC/VMともに、指定した管理者のメールアドレスにメール通知、対象のファイルは駆除せずそのままとします。

検出した際、管理者にメール通知します。
事業や会社にメールサーバーがあれば、そのメールサーバーに転送するように設定しますが、今回はGmailのアカウントにメール通知するように設定します。

管理者のメールアドレス = Gmail

Step2

詳細な動作を決めます。

ウイルススキャンに利用するソフト

ClamAVは、clamscanと、clamdscanがあります。
シングルスレッド動作をするclamscanコマンドを採用。
(ホストPC、VM同時にスキャンした時のことを考慮してシングルスレッド方式を採用。)

ウイルススキャンのスキャン周期

週1回、日曜日の午前3:13にスキャン開始。

ウイルススキャン実行ユーザー

root
※推奨されていませんが、root以外アクセスできないファイルもスキャン対象にするため。

ウイルススキャンの動作

除外ファイルを利用、検索対象外を指定できる。
ログに検索動作を記録。
ウイルス検知したら、その旨をログに記載し、管理者にメール通知する。

※除外ファイル利用について
VMのディスク(仮想ディスク)をウイルススキャンすると警告が出るので、VMのディスクは象外にします。

Step3

VMのディスク(仮想ディスク)をウイルススキャンしてしまうと、エラーが発生するようです。本当にウイルスを検知したのか、判断するのが大変になりますので、スキャン対象から除外できるようにします。
ウイルススキャン対象外を指定するファイル「除外ファイル」を作成します。

sh
$ sudo mkdir /root/bin/
$ sudo vim /root/bin/scanvirus_exclude_list.txt

下記を記載します。

/root/bin/scanvirus_exclude_list.txt
/sys/
/proc/
/dev/
/var/lib/libvirt/images/

スキャン実行スクリプトを作成します。

sh
$ sudo vim /root/bin/scanvirus.sh

こちらがスクリプト本体です。

/root/bin/scanvirus.sh
#!/usr/bin/sh
#   ClamAVによるウイルススキャンスクリプト scanvirus.sh
#     ウイルススキャンを実行し、ウイルスを検知したときのみ、指定した宛先にアラートメールを送信する。
#     誤検知もあり得るため、検知しても駆除(削除)は実施しない。
#
#     スキャンの実行前には、ClamAVプログラムおよびウイルス定義をアップデートする。
#
#     スキャンの除外対象ディレクトリ、ファイルは、${EXCLUDE_LIST_FILE}ファイルに1行ずつ記載すること。ディレクトリの末尾には、/ をつける。
#
EXCLUDE_LIST_FILE=/root/bin/scanvirus_exclude_list.txt
LOGFILE=/var/log/clamav/scanvirus.log
SCAN_RESULT=/var/log/clamav/scanresult.txt

MAX_FILESIZE=200M
MAX_SCANSIZE=200M
# メール通知
MAILTO='aaa@bbb.co.jp'
MAILFROM='aaa@bbb.co.jp'

export LANG=C

echo "===== Scan Virus =====" >> ${LOGFILE}
echo "`date` Scan Virus start" >> ${LOGFILE}

# 1. ClamAVプログラムのアップデート
echo "`date` Update ClamAV start" >> ${LOGFILE}

dnf -y --enablerepo=epel update clamav 1>> ${LOGFILE} 2>&1

echo "`date` Update ClamAV end" >> ${LOGFILE}

# 2. ウイルススキャンの実施
echo "`date` Do Scan Virus start" >> ${LOGFILE}

## スキャン除外リストの展開
while read LINE
do
    if [ $(echo "${LINE}"|grep \/$) ]; then
        i=`echo ${LINE}|sed -e 's/^\([^ ]*\)\/$/\1/p' -e d`
        excludeopt="${excludeopt} --exclude-dir=^${LINE}"
    else
        excludeopt="${excludeopt} --exclude=^${LINE}"
    fi
done < ${EXCLUDE_LIST_FILE}

echo "excludeopt: ${excludeopt}" >> ${LOGFILE}

## ウイルススキャンの実行
/usr/bin/clamscan \
--max-filesize=${MAX_FILESIZE} --max-scansize=${MAX_SCANSIZE} \
--infected --recursive ${excludeopt} / 1> ${SCAN_RESULT} 2>> ${LOGFILE}

## ウイルスを検知したときのみ、アラートメールで通知する
[ ! -z "$(grep FOUND$ ${SCAN_RESULT})" ] && \
cat ${SCAN_RESULT} | mail -s "Virus Found in `hostname`" -r ${MAILFROM}  ${MAILTO}

cat ${SCAN_RESULT} >> ${LOGFILE}

echo "`date` Do Scan Virus end" >> ${LOGFILE}

echo "`date` Scan Virus complete" >> ${LOGFILE}

※画像はほんの一部のみです。
※メール通知にある、MAILTO、MAILFROMへの設定は、適宜変更してくださいね。

Step4

メール通知を行うには、追加のツールと設定が必要になります。
スキャン実行スクリプトが使用している「mail」コマンドが動作するように追加、設定が必要なんです。

メールクライアントとメールサーバーの s-nail、 postfix をインストールします

sh
$ sudo dnf install s-nail
$ sudo dnf install postfix

メールサーバーの自動起動+起動を行います。

sh
$ sudo systemctl enable postfix
$ sudo systemctl start postfix

postfixの設定です。

sh
$ sudo vim /etc/postfix/main.cf
/etc/postfix/main.cf
#変更箇所のみ表示
myhostname = almalinux

inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks = 192.168.100.0/24, 127.0.0.0/8
relayhost = [smtp.gmail.com]:587
smtpd_banner = ESMTP MTA
# Postfix SMTPサーバの SASL 認証を有効
smtpd_sasl_auth_enable = yes
# SMTPサーバのアクセス制限設定
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
#メールのサイズを制限
message_size_limit = 10485760
# Gmailを使用する際のSASL認証設定
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain

※mynetworks = 192.168.100.0/24, 127.0.0.0/8 の「192.168.100.0/24」については、会社環境など、ご自身の環境に併せて変更してください。

sh
$ sudo vim /etc/postfix/master.cf
/etc/postfix/master.cf
#変更箇所のみ表示
  -o smtpd_sasl_auth_enable=yes

Gmailへ転送するためGmailのアプリパスワードを設定・取得します。
ブラウザを開き、Googleアカウント管理に進みます。


セキュリティをクリック。


検索マドに「アプリパスワード」を入力、「アプリ パスワード」をクリックします。


アプリ名に「AlmalinuxMail」を入力、「作成」をクリック。

パスワードが生成されるので、メモし、「完了」をクリック。

SALSをインストール、取得したアプリパスワードを設定していきます。

sh
$ sudo dnf install cyrus-sasl cyrus-sasl-plain

sasle_passwdファイルに取得したアプリパスワードを記載します。

sh
$ sudo vim /etc/postfix/sasl_passwd
/etc/postfix/sasl_passwd
[smtp.gmail.com]:587 アカウント名@gmail.com:<アプリパスワード>

作成したファイルを元に下記コマンドにてパスワードDBを作成します。

sh
sudo chmod 640 /etc/postfix/sasl_passwd
sudo postmap hash:/etc/postfix/sasl_passwd

postfix の設定チェックを実施します。

sh
sudo postfix check

エラーなど出ませんでしたね。
postfix を再起動します。

sh
$ sudo systemctl restart postfix
$ sudo systemctl status postfix

確認のため、管理者のメールアドレス=Gmailにメールしてみましょう。

sh
$ echo "testmessage" | mail -s "TEST" "メールアドレス=Gmail"

posftix がメール転送したかチェックします。

sh
$ sudo vim -R /var/log/maillog

赤枠の部分が、メール転送部分のログです。

さぁ、Gmailに届いているかチェックします。

届いていましたね。

Step5

スキャンスクリプトの実行と、定期実行設定を行います。
スキャンスクリプトに実行権を付けます。

sh
$ sudo chmod u+x /root/bin/scanvirus.sh

では、一度スクリプトスクリプトを動かしてみます。

sh
$ sudo su -
$ /root/bin/scanvirus.sh

※スクリプト実行終了後、Ctrlキー+Dキーを押して、rootからログアウトするか、「exit」コマンドを実行してrootからログアウトしてください。

それぞれのログをチェックしてみます。

sh
sudo vim -R /var/log/clamav/scanvirus.log
sudo vim -R /var/log/clamav/scanresult.txt

動作確認はできましたが、メール通知の確認ができていません。
ダミーのウイルスファイルを設置して、確認する方法もありますが気が進みませんので、通知部分のコマンドだけ実行するスクリプトを作成、実施することにします。

通知部分確認スクリプトを作成。

sh
$ sudo vim /root/bin/checkAlerts.sh
/root/bin/checkAlerts.sh
#!/usr/bin/sh
LOGFILE=/var/log/clamav/scanvirus.log
SCAN_RESULT=/var/log/clamav/scanresult.txt
# メール通知
MAILTO='aaa@bbb.co.jp'
MAILFROM='aaa@bbb.co.jp'

export LANG=C
## ウイルスを検知したときのみ、アラートメールで通知する
cat ${SCAN_RESULT} | mail -s "Virus Found in `hostname`" -r ${MAILFROM}  ${MAILTO}

※メール通知にある、MAILTO、MAILFROMへの設定は、適宜変更してくださいね。
通知部分確認スクリプトに実行権を付け、実行します。

sh
$ sudo chmod u+x /root/bin/checkAlerts.sh

通知チェックを行います。

sh
$ sudo /root/bin/checkAlerts.sh

メールログをチェックします。

sh
$ sudo vim -R /var/log/maillog

ちゃんと転送しています。

確認ができましたので、週1回動作させるための設定をします。
定期実行には、crontab を用います。
実行タイミングは、毎週 日曜 3:13(午後じゃないです午前です。。)。
下記コマンドにて設定。

sh
$ sudo su -  
$ crontab -e
crontab
13 3 * * sun /root/bin/scanvirus.sh

※crontab編集の終了方法はvimと同じ、「:wq」です。

設定内容確認します。

sh
$ crontab -l

これで、設定は終わりです。
実際に設定した日曜に、動作したかチェックするのを忘れないでください。
手動実行は動作するのに、crontab では実行できなかった。。。ということがありますので、確認は大切です。

ClamAVのスキャンスクリプトは下記サイトを参考にしました。
参考サイト

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA