clamav-milter でメールのウィルススキャン
clamav-milterとは
clamav-milter は Clam Antivirus (clamav) の一機能で、sendmail と連携してメールのウィルス検査を実施できます。ClamAV については「Clam Antivirus とは」を参照して下さい。今回は sendmail との連携に絞って話を進めます。
注:このページの記述は古いバージョンのものです。Clam Antivirus 0.71 が出ましたので、それにあわせてインストール方法を書き直しましたので、新しいページをご覧下さい。
Red Hat Linux 9 用のパッケージを作成
前回の記事「Red Hat Linux 9 に Clam Antivirus を導入」では、Red Hat Linux に、fedora プロジェクトで用意された RPM パッケージ(0.65-0)をインストールし、利用しました。しかし本稿執筆時点では、fedora のパッケージでは clamav-milter が提供されていません。これは、コンパイル時に、--enable-milter オプションが無効になっているからです。
そこで、fedora パッケージを元に clamav-milter 機能を有効にしてパッケージを再作成しました。手順としては
- ソース RPM ファイルをダウンロード
- ソース RPM のインストール
- SPEC ファイルを編集して、clamav-milter を有効に
- ビルドに必要なパッケージ(bzip2-devel 等)のインストール
- ビルドエラーがでるので、パッチを作成、組み込み
という手順が必要でした。具体的な手順は省略しますが、成果物は公開していますので、こちらを利用して下さい。不安な方や、i686 以外の CPU を利用している方はソース RPM からリビルドして下さい。
なお、3月17日に、clamav 0.68 用の RPM を公開しましたので、こちらを御利用下さい。基本的にインストール手順は同じですので、以下適宜に読み替えてください。
インストール
今回インストールするパッケージは、fedora プロジェクトの成果物を利用していますので、Red Hat Linux にインストールするには、fedora-usermgmt, fedora-usermgmt-setup, fedora-usermgmt-shadow-utils の3つのパッケージを事前にインストールしておく必要があります。 また、これらのパッケージを検証するのに、fedora プロジェクトの公開鍵をインポートしておく必要があります。
# wget http://www.fedora.us/FEDORA-GPG-KEY # rpm --import FEDORA-GPG-KEY # wget http://…/fedora-usermgmt-0.6-0.fdr.1.rh90.noarch.rpm # wget http://…/fedora-usermgmt-setup-0.6-0.fdr.1.rh90.noarch.rpm # wget http://…/fedora-usermgmt-shadow-utils-0.6-0.fdr.1.rh90.noarch.rpm # rpm -Kv fedora-usermgmt-*.rpm # rpm -ivh fedora-usermgmt-*.rpm
次に、clamav, clamav-lib, clamav-data, clamav-server, clamav-update, clamav-milter の各パッケージをダウンロードしてインストールします。通常、clamav-devel パッケージは不要です。
# wget http://rpm.fumika.jp/packages/clamav-0.65-1.rh90.i686.rpm # wget http://rpm.fumika.jp/packages/clamav-data-0.65-1.rh90.i686.rpm # wget http://rpm.fumika.jp/packages/clamav-lib-0.65-1.rh90.i686.rpm # wget http://rpm.fumika.jp/packages/clamav-milter-0.65-1.rh90.i686.rpm # wget http://rpm.fumika.jp/packages/clamav-server-0.65-1.rh90.i686.rpm # wget http://rpm.fumika.jp/packages/clamav-update-0.65-1.rh90.i686.rpm
ダウンロードした RPM の署名を確認するために、今度は fumika の GPG 公開鍵をダウンロード・インポートして下さい。
# wget http://rpm.fumika.jp/packages/FUMIKA-GPG-KEY # rpm --import FUMIKA-GPG-KEY
次にダウンロードした RPM ファイルをチェックします。
# rpm -K clamav-* clamav-0.65-1.rh90.i686.rpm: (sha1) dsa sha1 md5 gpg OK clamav-data-0.65-1.rh90.i686.rpm: (sha1) dsa sha1 md5 gpg OK clamav-lib-0.65-1.rh90.i686.rpm: (sha1) dsa sha1 md5 gpg OK clamav-milter-0.65-1.rh90.i686.rpm: (sha1) dsa sha1 md5 gpg OK clamav-server-0.65-1.rh90.i686.rpm: (sha1) dsa sha1 md5 gpg OK clamav-update-0.65-1.rh90.i686.rpm: (sha1) dsa sha1 md5 gpg OK
(sha1) dsa sha1 md5 gpg OKと表示されることを確認して下さい。
問題なければパッケージをインストールします。
# rpm -ivh clamav-*
ユーザ clamav と clamilt が作成されたことを確認して下さい。
# id clamav uid=100(clamav) gid=101(clamav) 所属グループ=101(clamav) # id clamilt uid=101(clamilt) gid=102(clamilt) 所属グループ=102(clamilt)
ウィルスデータベースの更新
次にウィルスデータベース(シグネチャ)を最新のものに更新します。
これには freshclam コマンドを利用します。
# freshclam
これだけでウィルスデータベースが最新のものに更新されます。なお、自動更新の設定は、/etc/cron.d/clamav-update に置かれるファイルを編集し、コメントを外すだけで設定できます。--quiet オプションをつけると、エラー時以外はログを出力しなくなります。cron で、1日2回実行されますが、自由に変更することができます。
clamd の設定
clamav-milter は clamd を利用しますので、まず clamd の設定が必要です。インストールしただけでは設定ファイルがありませんので、サンプルファイルをコピーして作成します。
# cp /usr/share/doc/clamav-server-0.65/clamav.conf /etc/clamd.d/mail.conf # vi /etc/clamd.d/mail.conf
Example という行をコメントし、必要な部分のコメントを外します。また、<SERVICE> と書かれた箇所を任意の文字列(ここでは mailとします)に置き換えます。User は clamav に設定します。
#Example LogFile /var/log/clamd.mail LogTime PidFile /var/run/clamd.mail.pid LocalSocket /var/run/clamav.mail/clamd.sock User clamav StreamSaveToDisk ScanMail
また、ファイルの記述に合わせて、LocalSocket ファイル用のディレクトリを作成しておきます。所有権は clamav にします。
# mkdir /var/run/clamav.mail/ # chown clamav:clamav /var/run/clamav.mail/
次に起動スクリプトファイルをコピーし、CLAMD_SERVICE=<SERVICE>の行を書き換えます。
# cp /usr/share/doc/clamav-server-0.65/clamd.init /etc/init.d/clamd.mail # vi /etc/init.d/clamd.mail
CLAMD_SERVICE=mail
また、clamd コマンドのシンボリックリンクとして clamd.mail を作ります。これがないとエラーになります。
# ln -s /usr/sbin/clamd /usr/sbin/clamd.mail
これでサービス clamd.mail を起動します。
# service clamd.mail start
clamd の状態を確認します。
# service clamd.mail status clamd (pid 13435) を実行中...
上記のように表示されれば起動に成功しています。「停止しています」と表示された場合は、設定ファイルやパーミッションの設定などが間違っている可能性がありますので、ログファイル /var/log/clamd.mail を参考にして修正してください。clamd デーモンにアクセスできることを確認するには、clamdscan コマンドを使います。
clamav-milter の設定
今度は、/etc/clamav-milter.conf ファイルを設定します。先ほどと同じような手順となりますが、注意点としては LocalSocket を clamd の LocalSocket と同じに指定することです。
#Example LogFile /var/log/clamd.mail LogTime PidFile /var/run/clamd.mail.pid LocalSocket /var/run/clamav.mail/clamd.sock StreamSaveToDisk User clamilt ScanMail
インストール直後の状態では、ユーザ clamilt は、メールキューにアクセスするための権限がありません。このままでは、clamav-milter デーモンがメールの検査ができずエラーとなってしまいます。そこで、clamilt ユーザを mail グループに追加します。
# usermod -G mail clamilt
この状態で clamav-milter を起動します。
# service clamav-milter start
sendmail の設定
また、sendmail の設定ファイル /etc/mail/sendmail.mc に次の記述を追加します。
INPUT_MAIL_FILTER(`clamilter', `S=local:/var/run/clamav-milter/milter.sock, F=, T=S:4m;R:4m')dnldefine(`confINPUT_MAIL_FILTERS', `clamilter')
確認していませんが、spamassassin-milter など、他のフィルタを併用している場合は、次のようになると思います。
INPUT_MAIL_FILTER(`clamilter', `S=local:/var/run/clamav.mail/clamd.sock, F=, T=S:4m;R:4m')dnl INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass.sock, F=, T=C:15m;S:4m;R:4m;E:10m')dnldefine(`confINPUT_MAIL_FILTERS', `spamassassin,clamilter')
sendmail の設定を反映し、sendmail を再起動します。
# make -C /etc/mail # service sendmail restart
通常通りメールの送受信ができることを確認しておいてください。実際にウィルスが検出されると、ログファイルに次のように表示されます。
Sat Feb 7 18:43:50 2004 -> stream: Worm.SCO.A FOUND
maillog ファイルには、次のように記録されます。
sendmail[15310]: Milter: data, reject=550 5.7.1 Virus detected by ClamAV
初期状態では、宛先のアドレスに、ウィルスメールを遮断したというメールが送信されますが、これを送らないようにすることもできます。clamav-milter のオプション指定に書きましたのでご覧下さい。
自動起動の設定
最後に clamd.mail, clamav-milter の両デーモンを自動起動するように設定します。しかし名称が悪いのか、ntsysv コマンドでは clamd.mail が表示されませんので、chkconfig で設定します。
# chkconfig --level 2345 clamd.mail on # chkconfig --level 2345 clamav-milter on
まさに、これだ!という記事でした。とても役に立ちました。
本当に感謝です。ところでclamav 0.70になってから、記事の内容が
そぐわなくなっているように感じましたが、修正のご予定はありますか?
コメント by sato — 2004-05-3 02:25
0.70に対応したものは作ろうと思っています。5日以降にとりかかると思いますのでしばらくお待ち下さい。
コメント by fumika — 2004-05-3 11:37
ありがとうございます。しばらくチェックしていたのですが、待ちきれず(すみません)再度インストールに挑戦しました。0.68からのアップグレード時には失敗したのですが、徹底的に削除してから再挑戦しましたら、あっさり動きました。特に調整するようなところはなく、すんなりいきました。sendmail.mcだけは書き換えが必要でした。何にしてもこのようなページがあったおかげで出来たと思います。これからも楽しみにしています。
コメント by sato — 2004-05-17 17:17
なかなかまとまった時間が取れなくて申し訳ありません。
ご自身でできたようでよかったですね。
確かに 0.6x からの RPM アップデートでは、うまく行かないと思います。0.70 からはデフォルトで動作するように RPM に手を加えています。インストール後はオプションの変更で /etc/sysconfig/clamav-milter をいじるのと、自動起動の設定くらいですかね。
コメント by fumika — 2004-05-17 22:59
はじめまして。
僕もこのページを参考にさせていただきインストールしてみました。
問題なく完了…と、思ったら
#rpm -ivh clamav-0.71-1.rh90.src.rpm
警告: user *** does not exist – using root
上記のエラーがでてインストールに失敗したみたいです・・。
0.70で試しても同じ症状でした。
何か分かりましたら教えていただきたいのですが・・。
宜しくお願いいたします。
コメント by Yoh — 2004-05-29 00:33
えーと、Red Hat Linux 9 で ClamAntivirus を利用したいのであれば、通常 src.rpm は必要ありません。
src.rpm は 他のディストリビューションや、Athlon マシンなどの場合に構築し直すために使います。
そのエラーはパッケージを作ったユーザが存在しないというエラーで、無視して構いません。
通常は clamav, clamav-lib, clamav-data, clamav-update, clamav-server, clamav-milter の i686.rpm をダウンロードしてインストールします。
OSやCPUは何でしょうか?
コメント by fumika — 2004-05-29 00:42
レスありがとうございます。。
OSは Red Hat Linux 9 で、CPUが セレロンです。
src.rpm以外は正常にインストールできたので、
問題は無いみたいですね。。
安心しました。。
これからもお世話になりますです。
コメント by Yoh — 2004-05-31 20:48
Clam Antivirus 0.71 が出ましたので、それにあわせてインストール方法を書き直しました。ご利用下さい。
https://futuremix.org/2004/06/clamav-milter071
コメント by fumika — 2004-06-2 15:36