clamAV + clamSMTP インストールメモ −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− # 概要 #--------------------------------------------------------------------------------------------- clamAV はウィルスチェックを行うエンジンそのものです。サーバー上のあらゆるリソースについて、ウィルスデータベースとマッチングさせ、ウィルスチェックを行います。 clamSMTP はclamAV を使うことを前提としたSMTP ウィルスフィルターです。SMTP 接続を受け入れ、clamAV にてメールの本文のウィルスチェックを行った上で、他のSMTP サーバーにSMTP 接続します。 clamSMTP とclamAV を連携させることによってゲートウェイ型のウィルスチェック環境が構築することができます。 # インストール方法 #--------------------------------------------------------------------------------------------- + clamAV のインストール +---------------------------------------------------------------------------------------------- clamAV 専用のユーザー/グループを作成します。専用のユーザーはホームディレクトリをなしとし、ログインする必要もないので、シェルを無効としてください。 # groupadd clamav # useradd -g clamav -d /dev/null -s /bin/false clamav clamAV のソースをインターネットよりダウンロード後、ソースを解凍します。 # su root # cd /usr/local/src/ # wget clamav-0.93.3.tar.gz # tar jxvf clamav-0.93.3.tar.gz clamAV を解凍後、ディレクトリに入りインストール作業を行います。 # cd clamav-0.93.3 # ./configure --prefix=/usr/local/clamav # make # make install clamAV が使用する動的リソースはすべて/var 配下に格納するため、必要なディレクトリを作成します。 # mkdir /var/run/clamav # mkdir /var/log/clamav # chown clamav:clamav /var/run/clamav /var/log/clamav clamAV の基本設定を行います。 # cd /usr/local/clamav/etc # vi clamd.conf 編集 → #Example 編集 → LogFile /var/log/clamav/clamd.log clamav のログファイルの場所を指定する 編集 → LogTime yes ログファイルに時間を記憶する 編集 → LogFileMaxSize 0 ログファイルのサイズ制限をなしとする 編集 → LogClean yes 起動するたびにログをクリアする 編集 → PidFile /var/run/clamav/clamd.pid PID ファイルの場所を指定する 編集 → LocalSocket /var/run/clamav/clamd.sock ソケットによりclamSMTP と通信する 編集 → User clamav clamAV をclamav 権限で起動します # vi freshclam.conf 編集 → #Example 編集 → UpdateLogFile /var/log/clamav/freshclam.log DB の更新ログを記憶する場所を指定する 編集 → LogFileMaxSize 0 ログファイルのサイズ制限をなしとする 編集 → LogTime yes ログファイルに時間を記憶する 編集 → PidFile /var/run/clamav/freshclam.pid PID ファイルの場所を指定する 編集 → DatabaseDirectory /usr/local/clamav/share/clamav DB の格納場所を指定する clamAV はclamSMTP からソケット経由で利用されるのでデーモンとして起動するための起動スクリプトをソースツリーより所定の場所へとコピーします。 # cp contrib/init/RedHat/clamd /etc/rc.d/init.d/clamd # vi /etc/rc.d/init.d/clamd 編集 → progdir="/usr/local/clamav/sbin" ウィルスチェックを行うにはウィルスチェックデータベースの更新がかかせません。データベースの更新はfreshclam ユーティリティーを利用しますが、定期的に更新するようCRON に登録します。 # crontab -e root 追加 → 10 * * * * /usr/local/clamav/bin/freshclam < /dev/null 2>&1 DB 更新ログ、clamd 起動ログなどは日々の運用で肥満していきます。これをロテーションする設定をシステムに追加します。 ↓ /etc/logrotate.d/clamav --------------------------------- /var/log/clamav/clamd.log { missingok weekly compress rotate 5 create 640 clamav clamav postrotate /bin/kill -HUP `cat /var/run/clamav/clamd.pid 2> /dev/null` 2> /dev/null endscript } /var/log/clamav/freshclam.log { missingok weekly compress rotate 5 create 640 clamav clamav } ↑ ココまで------------------------------------------------- clamav デーモンが頻繁に停止してしまうようではウィルスチェックサービスの品質に問題が出ます。そこで、clamav デーモンを監視し、停止したら自動起動するようなスクリプトを次の手順で用意し、CRON で監視させます。 # cd /usr/local/src/clamav-0.93.3/contrib/clamdwatch # tar zxvf clamdwatch.tar.gz # wget http://mikecathey.com/code/clamdwatch/clamdwatch.txt # chmod +x clamdwatch.txt # mv clamdwatch.txt /usr/local/clamav/bin/clamdwatch.pl # vi /usr/local/bin/clamdwatch.pl 編集 → my $Socket = $options{s} || "/var/run/clamav/clamd.sock"; # crontab -e 追加 → * * * * * /usr/local/clamav/bin/clamdwatch.pl -q && ( /usr/bin/killall -9 clamd; /bin/rm -fr /var/run/clamav/clamd.sock; /etc/rc.d/init.d/clamd start 2>&1 ) + clamSMTP のインストール +---------------------------------------------------------------------------------------------- clamSMTP のソースをインターネットよりダウンロード後、ソースを解凍します。 # su root # cd /usr/local/src/ # wget clamsmtp-1.8.tar.gz # tar jxvf clamsmtp-1.8.tar.gz clamAV を解凍後、ディレクトリに入りインストール作業を行います。 # cd clamsmtp-1.8 # ./configure --prefix=/usr/local/clamsmtp # make # make install clamSMTP の基本設定を行います。設定ファイルは標準ではインストールされないので自前で用意します。 # cd /usr/local/clamsmtp # vi clamsmtp.conf 追加 → OutAddress: [IP アドレス]:[ポート番号] postfix が待ち受けるsmtpd のTCP アドレス、 ポート番号を指定します 追加 → Listen: [IP アドレス]:[ポート番号] smtp を待ち受けるTCP アドレス、ポート番号を 指定します 追加 → ClamAddress: /var/run/clamav/clamd.sock clamAV が解放しているソケットの場所を指定し ます 追加 → User: clamav clamSMTP をclamav 権限で起動します 追加 → VirusAction: /usr/local/clamsmtp/alert.sh ウィルスを検出した場合に実行するスクリプト を指定します 追加 → Header: X-Virus-Scanned: ClamAV clamSMTP が付加するメールヘッダを指定します ウィルスを検出した際に実行されるスクリプトを作成します。 ↓ /usr/local/clamsmtp/alert.sh ---------------------------- #!/bin/sh FROM='' TO=$RECIPIENTS MAILER='/usr/sbin/sendmail -it' SUBJECT=`/bin/echo "ウィルス検出通知" | /usr/bin/nkf -jMB` BODY=`/usr/bin/nkf -j /usr/local/clamsmtp/message` $MAILER <&2 ;; esac ↑ ココまで------------------------------------------------- # chmod 755 /etc/rc.d/init.d/clamsmtp 以上でclamAV、clamSMTP によるゲートウェイ型ウィルスチェック環境が整いました。後はメールサーバーごとにメールをclamSMTP に渡すフィルタ設定、もしくはウィルスチェック後のメールをclamSMTP から受け取る設定を行います。