以下の記録を作成するにあたって、
http://centossrv.com/sendmail-clamav-spamassassin.shtmlおよびhttp://www.opensource.apple.com/source/SpamAssassin/SpamAssassin-124.5.1/clamav/clamav-0.88.2/clamav-milter/INSTALLを参考にしました。
以下のようにclamavをインストールする。先頭のアイコンから見ると、硬い貝殻でばい菌マンのようなウイルスから貝を守っている絵になっている。clamはハマグリのことで、AVはanti-virusの意味だろう。
UNIX系で発達したオープンソースのウイルス撃退ソフトウエアで、MACユーザのあいだでは有名なのだそうだ。一応Windows版もあるが、UNIX版と比べると?かな。
とくにWindows 2003では利用できなかった。(2010-06-07確認)
- yum install clamav <— クライアント部分+単体
- yum install clamav-scanner <– clamd のための設定ファイルなど。
これで、clamav-serverも依存関係で入る。
clamav-serverでは、clamdが入る。 - yum install clamav-milter <— メールプログラムから呼ばれるmail filter
これはさらにclamdというデーモンと通信によってメールのスキャンを行う。つまり
clamd <—-> clamav-milter <—-> sendmail
というつながりになる。これは、clamavの0.95あたりからそうなったらしい。 - yum install clamav-update <– ウイルスデータベースの自動更新
なにも設定しなければ、3時間おきに行われる。またログのローテートも行う。
普通に使うには、
$ clamscan
とする。
するとユーザのホームディレクトリ以下を走査する。
LibClamAV Warning: ***********************************************************
LibClamAV Warning: *** This version of the ClamAV engine is outdated. ***
LibClamAV Warning: *** DON'T PANIC! Read http://www.clamav.net/support/faq ***
LibClamAV Warning: ***********************************************************
/home/bob/.bash_profile: OK
/home/bob/.bashrc: OK
/home/bob/.bash_history: OK
/home/bob/.emacs: OK
/home/bob/.bash_logout: OK———– SCAN SUMMARY ———–
Known viruses: 798833
Engine version: 0.95.3
Scanned directories: 1
Scanned files: 5
Infected files: 0
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 2.235 sec (0 m 2 s)
ディレクトリやファイルを指定することもできる。
$ clamscan jars
LibClamAV Warning: ***********************************************************
LibClamAV Warning: *** This version of the ClamAV engine is outdated. ***
LibClamAV Warning: *** DON'T PANIC! Read http://www.clamav.net/support/faq ***
LibClamAV Warning: ***********************************************************
jars/jvx.jar: OK
jars/javaview.jar: OK———– SCAN SUMMARY ———–
Known viruses: 798833
Engine version: 0.95.3
Scanned directories: 1
Scanned files: 2
Infected files: 0
Data scanned: 3.37 MB
Data read: 1.32 MB (ratio 2.55:1)
Time: 3.544 sec (0 m 3 s)
今回はこのclamavとメールプログラムを組み合わせて使用してみた。このclamscanのプログラムだけでもいいようではあるが、ウイルス定義のファイルが大きいため、毎回このプログラムをメール1つに対して起動すると、かなり非効率になってしまうとのことである。そこで、初期化のときにだけウイルス定義を読み(あとは必要なときにも)、ウイルスのスキャンをするサーバプログラムを用意し、これをクライアントから利用するという設計にしたものが用意されている。それが、サーバ部分はclamdというデーモンプログラムで、クライアント部分はsendmail系特有のメールフィルターインタフェースを備えた、clamav-milterという仲介プログラム(milterインターフェースとclamavインタフェースの仲介)である。
ところで、マニュアルを読まないでいきなり使用しているので、いろいろなホームページで参照されている/etc/clamd.confがない。
そこで、
yum provides */clamd.conf
で探すと、
読み込んだプラグイン:dellsysidplugin2, refresh-packagekit
clamav-server-0.95.2-5.fc12.i686 : Clam Antivirus scanner server
リポジトリー : fedora
Matched from:
ファイル名 : /usr/share/doc/clamav-server-0.95.2/clamd.conf…
clamav-server-0.95.3-1200.fc12.i686 : Clam Antivirus scanner server
リポジトリー : installed
Matched from:
ファイル名 : /usr/share/doc/clamav-server-0.95.3/clamd.conf
これは、インストールされているものであるので、これをコピーすればいいようだ。
cp -p /usr/share/doc/clamav-server-0.95.3/clamd.conf /etc/
また、/etc/mail/clamav-milter.confが導入されるのだが、これをデフォルトの位置に移す。/etc/clamav-milter.confがそれである。
今回は、デバッグが楽なように、unix domain socketではなく、普通のソケットにした。
/etc/clamav-milter.conf
以下のようにMilterSocketのコメントをはずす。
# Default: no default
# MilterSocket /var/run/clamav-milter/clamav-milter.socket
MilterSocket inet:7357
ClamdSocket tcp:localhost:3310
/etc/clamd.confでは
TCPSocket 3310
User clamav
とする。また両方のファイルにあるExampleという行はコメントにしておくこと。(そのほかの設定ファイルも同じ流儀になっていた)。
さて、sendmail側の設定であるが、sendmail.mc(macro configurationの意味)に以下のような行を入れる。
ここではspamassasin(メールがスパムである場合は、ヘッダーのsubjectに[SPAM]を挿入するフィルター)と共存させたいので両方の定義を書いている。
dnl # melange 2010-06-04 CLAMAVでウイルスチェック
INPUT_MAIL_FILTER(`clmilter',`S=inet:7357@localhost, F=, T=S:4m;R:4m')dnl
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass-milter/spamass-milter.sock,, F=, T=C:15m;S:4m;R:4m;E:10m')dnl
FEATURE(`blacklist_recipients')dnl
define(`confINPUT_MAIL_FILTERS', `spamassassin,clmilter')dnl
のようにした。最後のdefineでspamassassinとclmilterの両方のフィルターを使うことを指示している。
ところで、このdnlであるが、m4はマクロの定義などを空行で置き換えてしまうというので、それをこのdnl(delete through new line)というm4コマンドで空行の挿入をやめさせます。dnlからnew lineまでが削除されますので、コメントとしても使えます。コメントとしての文章を挿入する場合には、
dnl # これはコメントの例
を使い、
コマンドをコメント化する場合は
dnl コマンド
とするようです。
あとは自動でウイルスDBを更新する部分であるが、
/etc/freshclam.confを以下のように編集する。
以下のExampleの行をコメントにする。
# Comment or remove the line below.
# Example <-- コメントにした
また、/etc/sysconfig/freshclamも編集しておくこと。
### REMOVE ME: network access without prior activation
#FRESHCLAM_DELAY=disabled-warn # REMOVE ME <-- コメントにした。
ウイルスデータベースの更新(freshclam)の定例化(cron)や、そのログのローテーションは勝手にインストーラがcronテーブルに設定をしているのでそのままでよさそうである。
# clamav-milter
でメール関係のウイルスキャンサービス側を起動する。
#/etc/init.d/sendmail restart
でこれを利用する体制が整う。
sendmail.mcに
define(`confLOG_LEVEL’, `15′)dnl
入れて詳細なログを出力させると、一連の流れが/var/log/maillogに出力される。
Jun 5 07:01:10 aMachine sendmail[10876]: NOQUEUE: connect from [99.99.99.99]
Jun 5 07:01:10 aMachine sendmail[10876]: AUTH: available mech=CRAM-MD5 ANONYMOUS DIGEST-MD5 LOGIN, allowed mech=EXTERNAL GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5
Jun 5 07:01:10 aMachine sendmail[10876]: o54M1AIj010876: Milter (spamassassin): init success to negotiate
Jun 5 07:01:10 aMachine sendmail[10876]: o54M1AIj010876: Milter (clmilter): init success to negotiate
Jun 5 07:01:10 aMachine sendmail[10876]: o54M1AIj010876: Milter: connect to filters
Jun 5 07:01:10 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=connect, continue
Jun 5 07:01:10 aMachine sendmail[10876]: o54M1AIj010876: milter=clmilter, action=connect, continue
Jun 5 07:01:10 aMachine sendmail[10876]: o54M1AIj010876: --- 220 aMachine.aDomain.jp ESMTP Sendmail 8.14.3/8.14.3; Sat, 5 Jun 2010 07:01:10 +0900
Jun 5 07:01:10 aMachine sendmail[10876]: o54M1AIj010876: <-- HELO familia.itambenet.local
Jun 5 07:01:10 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=helo, continue
Jun 5 07:01:10 aMachine sendmail[10876]: o54M1AIj010876: --- 250 aMachine.aDomain.jp Hello [99.99.99.99], pleased to meet you
Jun 5 07:01:11 aMachine sendmail[10876]: o54M1AIj010876: <-- MAIL FROM:
Jun 5 07:01:11 aMachine sendmail[10876]: o54M1AIj010876: Milter: sender:
Jun 5 07:01:11 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=mail, continue
Jun 5 07:01:11 aMachine sendmail[10876]: o54M1AIj010876: milter=clmilter, action=mail, continue
Jun 5 07:01:11 aMachine sendmail[10876]: o54M1AIj010876: --- 250 2.1.0 ... Sender ok
Jun 5 07:01:11 aMachine sendmail[10876]: o54M1AIj010876: <-- RCPT TO:
Jun 5 07:01:11 aMachine sendmail[10876]: o54M1AIj010876: Milter: rcpts:
Jun 5 07:01:11 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=rcpt, continue
Jun 5 07:01:11 aMachine sendmail[10876]: o54M1AIj010876: milter=clmilter, action=rcpt, continue
Jun 5 07:01:11 aMachine sendmail[10876]: o54M1AIj010876: --- 250 2.1.5 ... Recipient ok
Jun 5 07:01:11 aMachine sendmail[10876]: o54M1AIj010876: <-- DATA
Jun 5 07:01:11 aMachine sendmail[10876]: o54M1AIj010876: --- 354 Enter mail, end with "." on a line by itself
Jun 5 07:01:12 aMachine sendmail[10876]: o54M1AIj010876: from=, size=5551, class=0, nrcpts=1, msgid=<001c01cb0418$8e3204c0$aa960e40$@org>, proto=S\
MTP, daemon=MTA, relay=[99.99.99.99]
Jun 5 07:01:12 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=header, continue
Jun 5 07:01:12 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=header, continue
Jun 5 07:01:12 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=header, continue
Jun 5 07:01:12 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=header, continue
Jun 5 07:01:12 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=header, continue
Jun 5 07:01:12 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=header, continue
Jun 5 07:01:12 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=header, continue
Jun 5 07:01:12 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=header, continue
Jun 5 07:01:12 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=header, continue
Jun 5 07:01:12 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=header, continue
Jun 5 07:01:12 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=header, continue
Jun 5 07:01:12 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=eoh, continue
Jun 5 07:01:12 aMachine sendmail[10876]: o54M1AIj010876: milter=spamassassin, action=body, continue…中略
un 5 07:01:13 aMachine sendmail[10876]: o54M1AIj010876: Milter add: header: X-Spam-Level: *********************
Jun 5 07:01:13 aMachine sendmail[10876]: o54M1AIj010876: Milter add: header: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on\n\taMachine.aDomain.jp
Jun 5 07:01:13 aMachine sendmail[10876]: o54M1AIj010876: Milter change: header Subject: from The free XXXX trial everybody is taking about to [SPAM] The free XXXX trial everybod\
y \
is taking about
Jun 5 07:01:13 aMachine sendmail[10876]: o54M1AIj010876: Milter message: body replaced
Jun 5 07:01:13 aMachine sendmail[10876]: o54M1AIj010876: milter=clmilter, action=header, continue
Jun 5 07:01:13 aMachine sendmail[10876]: o54M1AIj010876: milter=clmilter, action=header, continue
Jun 5 07:01:13 aMachine sendmail[10876]: o54M1AIj010876: milter=clmilter, action=header, continue
Jun 5 07:01:13 aMachine sendmail[10876]: o54M1AIj0Jun 5 07:01:13 aMachine spamd[8888]: prefork: child states: II
Jun 5 07:01:13 aMachine sendmail[10876]: o54M1AIj010876: Milter accept: message
Jun 5 07:01:13 aMachine sendmail[10876]: o54M1AIj010876: — 250 2.0.0 o54M1AIj010876 Message accepted for delivery
Jun 5 07:01:13 aMachine sendmail[10882]: o54M1AIj010876: to=, delay=00:00:02, xdelay=00:00:00, mailer=local, pri=37795, dsn=2.0.0, stat=Sent
Jun 5 07:01:13 aMachine sendmail[10882]: o54M1AIj010876: done; delay=00:00:02, ntries=1
Jun 5 07:01:13 aMachine sendmail[10876]: o54M1AIk010876: <– QUIT
Jun 5 07:01:13 aMachine sendmail[10876]: o54M1AIk010876: — 221 2.0.0 aMachine.aDomain.jp closing connection
…中略以下がウイルスを見つけた場合のログの行である!!その前の行には誰からとかの情報が記載されている。
Jun 4 23:16:44 redhat sendmail[2663]: o54EFqYH002663: milter=clmilter, quarantine=quarantined by clamav-milter
そして、ウイルスが見つかると、/var/log/clamd.server.log(<–ここにclamdのログを出力するようにした)
Fri Jun 4 21:23:47 2010 -> stream(127.0.0.1@1867): Email.Trojan-114 FOUND
のように見つけてくれる。
その実体は、
mailq -qQ
でわかる。(-qでQueueの種類をQUARANTINEに指定している)
# mailq -qQ /var/spool/mqueue (11 requests) -----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient----------- o54B8AUq031924 31483 Fri Jun 4 20:08 <charlie@brown.com> QUARANTINE: quarantined by clamav-milter <alice@domain.org>
これは、
その内容は/var/spool/mqueue/o54B8AUq031924にあり、Microsoftのメールプログラムを修正するパッチを当てるべしという内容で、善意を装っているが、引っかかってはいけない。隔離されたので、パソコンなどでpop3で受信できない(リストにない)ので安心である。
英文マニュアルにあるように、
useradd -s /sbin/nologin clamav -m -d /home/clamav -k /dev/null
でclamavユーザを作成するとあったのだが、最近は自動的に作成するようである。
-sはshellでこの場合はloginできないようにする。
-m -d /home/clamavはホームディレクトリを作成することを指示
-kはskeltonファイルのありか(/etc/skelなど)を指示するのだが、今回はなにもコピーしない。
