Clamav-Milter-0.86-2 + Sendmail [FC4]

[サーバの実験室 Redhat/Fedora]

作成 : 2005/08/06

"サーバの実験室"の検索


Clamav

Clamavは、GPLにもとづくオープンソースのウィルスチェックプログラム。 本家はhttp://www.clamav.net/。 Clamav-Milter(Milterは、メッセージ処理中にサードパーティのプログラムによるメールフィルタリングを許可する仕組みらしい)とSendmailを組み合わせて、メールのウィルスチェックができるようにしてみる。

Clamav-Server/Clamav-Milter/Clamav-Updateのインストール

ClamavはFedora Extrasにパッケージがあるので、yumでインストールできる。 Clamav-Milterを使うためには、clamav-server、clamav-milterなどのパッケージが必要になる。

# yum install clamav-server

Setting up Install Process
Setting up repositories
updates-released          100% |=========================|  951 B    00:00
extras                    100% |=========================| 1.1 kB    00:00
http://klid.dk/homeftp/fedora/linux/core/4/i386/os/repodata/repomd.xml: [Errno 4] IOError: HTTP Error 403: Date: Tue, 02 Aug 2005 12:53:53 GMT
Server: Apache-AdvancedExtranetServer/1.3.28 (Mandrake Linux/3.4.92mdk) PHP/4.3.3
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
Trying other mirror.
base                      100% |=========================| 1.1 kB    00:00
Reading repository metadata in from local files
primary.xml.gz            100% |=========================| 245 kB    00:02
updates-re: ################################################## 726/726
Added 0 new packages, deleted 99 old in 5.13 seconds
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for clamav-server to pack into transaction set.
clamav-server-0.86.2-4.fc 100% |=========================|  16 kB    00:00
---> Package clamav-server.i386 0:0.86.2-4.fc4 set to be updated
--> Running transaction check
--> Processing Dependency: data(clamav) for package: clamav-server
--> Processing Dependency: libclamav.so.1 for package: clamav-server
--> Processing Dependency: clamav-lib = 0.86.2-4.fc4 for package: clamav-server
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Package clamav-lib.i386 0:0.86.2-4.fc4 set to be updated
---> Package clamav-data.i386 0:0.86.2-4.fc4 set to be updated
--> Running transaction check
--> Processing Dependency: fedora-usermgmt >= 0.7 for package: clamav-data
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Package fedora-usermgmt.noarch 0:0.7-3 set to be updated
--> Running transaction check
--> Processing Dependency: setup(fedora-usermgmt) for package: fedora-usermgmt
--> Processing Dependency: instance(fedora-usermgmt) for package: fedora-usermgmt
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Package fedora-usermgmt-shadow-utils.noarch 0:0.7-3 set to be updated
---> Package fedora-usermgmt-setup.noarch 0:0.7-3 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 clamav-server           i386       0.86.2-4.fc4     extras             48 k
Installing for dependencies:
 clamav-data             i386       0.86.2-4.fc4     extras            2.3 M
 clamav-lib              i386       0.86.2-4.fc4     extras            147 k
 fedora-usermgmt         noarch     0.7-3            extras            7.3 k
 fedora-usermgmt-setup   noarch     0.7-3            extras            5.4 k
 fedora-usermgmt-shadow-utils  noarch     0.7-3            extras            6.3 k

Transaction Summary
=============================================================================
Install      6 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 2.6 M
Is this ok [y/N]: 
Downloading Packages:
(1/1): clamav-server-0.86 100% |=========================|  48 kB    00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: fedora-usermgmt-setup        ######################### [1/6]
  Installing: fedora-usermgmt-shadow-utils ######################### [2/6]
  Installing: fedora-usermgmt              ######################### [3/6]
  Installing: clamav-data                  ######################### [4/6]
  Installing: clamav-lib                   ######################### [5/6]
  Installing: clamav-server                ######################### [6/6]

Installed: clamav-server.i386 0:0.86.2-4.fc4
Dependency Installed: clamav-data.i386 0:0.86.2-4.fc4 clamav-lib.i386 0:0.86.2-4.fc4 fedora-usermgmt.noarch 0:0.7-3 fedora-usermgmt-setup.noarch 0:0.7-3 fedora-usermgmt-shadow-utils.noarch 0:0.7-3
Complete!

# yum install clamav-milter

Setting up Install Process
Setting up repositories
updates-released          100% |=========================|  951 B    00:00
extras                    100% |=========================| 1.1 kB    00:00
base                      100% |=========================| 1.1 kB    00:00
Reading repository metadata in from local files
primary.xml.gz            100% |=========================| 290 kB    00:01
updates-re: ################################################## 825/825
Added 99 new packages, deleted 0 old in 4.99 seconds
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Package clamav-milter.i386 0:0.86.2-4.fc4 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 clamav-milter           i386       0.86.2-4.fc4     extras             80 k

Transaction Summary
=============================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 80 k
Is this ok [y/N]: y
Downloading Packages:
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: clamav-milter                ######################### [1/1]

Installed: clamav-milter.i386 0:0.86.2-4.fc4
Complete!

Clamav-Updateをインストールしておくと、ウィルスのデータベースを自動的に更新してくれる。 インストールだけして設定をしないと、3時間ごとに警告メールを送ってくるので、早めに設定してしまうのが吉。

# yum install clamav-update

Setting up Install Process
Setting up repositories
updates-released          100% |=========================|  951 B    00:00
extras                    100% |=========================| 1.1 kB    00:00
base                      100% |=========================| 1.1 kB    00:00
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Package clamav-update.i386 0:0.86.2-4.fc4 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 clamav-update           i386       0.86.2-4.fc4     extras             38 k

Transaction Summary
=============================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 38 k
Is this ok [y/N]: y
Downloading Packages:
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: clamav-update                ######################### [1/1]

Installed: clamav-update.i386 0:0.86.2-4.fc4
Complete!

Clamav-Serverの設定

/usr/share/doc/clamav-server-0.86.2/READMEファイルにclamav-serverの設定方法が書かれているので、それに沿って設定してみる。

まず、/etc/clamd.d/<SERVICE>.confという設定ファイルを作らなければならない。 clamav-milterパッケージが/etc/clamd.d/milter.confファイルをインストールしてくれるので、これを編集する。 Exampleをコメントアウトして、PIDファイルとローカルソケットファイルを置くディレクトリを修正しただけ。

# /etc/clamd.d/milter.conf

# Comment or remove the line below.
#Example
# Exampleをコメントアウトすること

# Uncomment this option to enable logging.
# LogFile must be writable for the user running daemon.
# A full path is required.
# Default: disabled
LogFile /var/log/clamd.milter
# ログを書くファイルを指定

# This option allows you to save a process identifier of the listening
# daemon (main thread).
# Default: disabled
#PidFile /var/run/clamd.milter/clamd.pid
PidFile /var/run/clamav-milter/clamd.pid
# PIDファイルを指定
# clam-milterパッケージが/var/run/clamav-milterディレクトリを作ってくれるので、そこへ置くことにする

# Path to a local socket file the daemon will listen on.
# Default: disabled
#LocalSocket /var/run/clamd.milter/clamd.sock
LocalSocket /var/run/clamav-milter/clamav.sock
# ローカルソケットファイルを指定
# clam-milterパッケージが/var/run/clamav-milterディレクトリを作ってくれるので、そこへ置くことにする

# Remove stale socket after unclean shutdown.
# Default: disabled
FixStaleSocket

# Run as a selected user (clamd must be started by root).
# Default: disabled
User clamilt
# 実行するユーザを指定

# Enable internal e-mail scanner.
# Default: enabled
ScanMail
# メールスキャンを有効にする

ログファイルをローテートさせるための設定をする。 サンプルファイル/usr/share/doc/clamav-server-0.86.2/clamd.logrotate/etc/logrotate.dディレクトリにコピーし、編集して使う。 コピー先ファイル名はなんでもよいので、とりあえずclamd.milterにしておく。

# cp /usr/share/doc/clamav-server-0.86.2/clamd.logrotate /etc/logrotated.d/clamd.milter
# /etc/logrotate.d/clamd.milter

/var/log/clamd.milter {
        monthly
        notifempty
        missingok

        postrotate
                killall -HUP clamd.milter 2>/dev/null || :
        endscript
}

/etc/sysconfigディレクトリに設定ファイルを作る。 サンプルファイル/usr/share/doc/clamav-server-0.86.2/clamd.sysconfigをコピーし、編集して使う。 コピー先ファイル名は、clamd.milterとすること。

# cp /usr/share/doc/clamav-server-0.86.2/clamd.sysconfig /etc/sysconfig/clamd.milter
# /etc/sysconfig/clamd.milter

CLAMD_CONFIGFILE=/etc/clamd.d/milter.conf
CLAMD_SOCKET=/var/run/clamav-milter/clamav.sock
# /etc/clamd.d/milter.confのLocalSocketで指定したファイルと同じにすること
CLAMD_OPTIONS=

/etc/init.dディレクトリに起動スクリプトを作る。 サンプルファイル/usr/share/doc/clamav-server-0.86.2/clamd.initをコピーし、編集して使う。 コピー先ファイル名はなんでもよいので、とりあえずclamd.milterにしておく。 実行権限があるか、確認すること。

# cp -p /usr/share/doc/clamav-server-0.86.2/clamd.init /etc/init.d/clamd.milter
# /etc/init.d/clamd.milter

#!/bin/bash
#
# chkconfig: - 75 25
# description: The clamd server running for 

CLAMD_SERVICE=milter
. /usr/share/clamav/clamd-wrapper

/usr/sbin/clamdへのシンボリックリンクを、/usr/sbin/clamd.milterという名前で作る。

# cd /usr/sbin
# ln -s clamd clamd.milter

PIDとローカルソケットファイルを置くディレクトリを作る。 clamav-milterパッケージが/var/run/clamav-milterディレクトリを作ってくれて、そこをPID/ローカルソケットファイルの置き場所にするよう設定ファイル/etc/clamd.d/clamd.milterで指定した。 所有者が/etc/clamd.d/clamd.milterファイルのUserで指定したユーザになっていて、そのユーザのみ読み書きの権限を持つようになっていることを確認する。

# ls -ld /var/run/clamav-milter
drwx------  2 clamilt clamilt 4096 Aug  5 23:39 /var/run/clamav-milter/

Clamav-Milterの設定

/usr/share/doc/clamav-milter-0.86.2/INSTALLファイルにClamav-Milterの設定方法が書かれているので、それに沿って設定してみる。

clamav-milterパッケージがインストールした設定ファイル/etc/sysconfig/clamav-milterを編集する。 CLAMAV_FLAGSには、clamav-milterのオプションを指定する。 使用できるオプションは、"man clamav-milter"を参照。

# /etc/sysconfig/clamav-milter

## The '-blo' options might be usefully here -- especially for testing; see
## "man 8 clamav-milter" for further options
CLAMAV_FLAGS='--max-children=2 -c /etc/clamd.d/milter.conf local:/var/run/clamav-milter/clamav.sock'
# /etc/clamd.d/milter.confは、clamd-serverの設定ファイルを指定
# /var/run/clamav-milter/clamav.sockは、milter.confのLocalSocketで指定したソケットファイルを指定
CLAMAV_USER='clamilt'
# milter.confのUserで指定したユーザを指定

Clamav-Updateの設定

まず、/etc/freshclam.confという設定ファイルを編集する。 Exampleをコメントアウト。

# /etc/freshclam.conf

# Comment or remove the line below.
#Example
# Exampleをコメントアウトすること

/etc/sysconfig/freshclamという設定ファイルを編集する。 FRESHCLAM_DELAYをコメントアウト。

# /etc/sysconfig/freshclam

### !!!!! REMOVE ME !!!!!!
### REMOVE ME: By default, the freshclam update is disabled to avoid
### REMOVE ME: network access without prior activation
#FRESHCLAM_DELAY=disabled-warn  # REMOVE ME
# FRESHCLAM_DELAYをコメントアウトすること

clamav-updateパッケージをインストールすると、/etc/cron.dディレクトリにclamav-updateファイルが作られる。 これが、自動的に更新チェックをしてくれる。

# /etc/cron.d/clamav-update

## Adjust this line...
MAILTO=root,postmaster,webmaster,clamav

## It is ok to execute it as root; freshclam drops privileges and becomes
## user 'clamav' as soon as possible
0  */3 * * * root /usr/share/clamav/freshclam-sleep
# 3時間ごとに更新チェック

freshclamを実行してみて、データベースが更新されれば設定は完了。

# freshclam
ClamAV update process started at Thu Aug  4 21:56:19 2005
main.cvd is up to date (version: 33, sigs: 36102, f-level: 5, builder: tkojm)
Downloading daily.cvd [*]
daily.cvd updated (version: 1002, sigs: 1628, f-level: 5, builder: arnaud)
Database updated (37730 signatures) from database.clamav.net (IP: 61.8.0.16)

Sendmailの設定

clamav-milterを使うよう、sendmailの設定を変更する。 /etc/mail/sendmail.mcのMAILERステートメントより前に、INPUT_MAIL_FILTERとconfINPUT_MAIL_FILTERSを挿入する。 INPUT_MAIL_FILTERは、confINPUT_MAIL_FILTERSより先に書くこと。

# /etc/mail/sendmail.mc

....
INPUT_MAIL_FILTER(`clamav', `S=local:/var/run/clamav-milter/clamav.sock, F=, T=S:4m;R:4m')dnl
dnl /var/run/clamav-milter/clamav.sockは、milter.confのLocalSocketで指定したソケットファイルを指定
define(`confINPUT_MAIL_FILTERS', `clamav')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl

sendmailの設定ファイル/etc/mail/sendmail.cfを生成する。 /etc/mail/sendmail.cfを更新せずにclamav-milterを起動しようとすると、エラーになる。

# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

自動起動の設定

自動起動の設定をしたいのだが、ntsysvにもchkconfigにも"clamd.milter"が表示されない。 しかたないので、起動スクリプトへのシンボリックリンクを/etc/rc.d/rcX.dディレクトリに作成する。 clamdは、clamav-milterより先に起動させること!

# cd /etc/rc.d/rc3.d
# ln -s ../init.d/clamd.milter S71clamd.milter
# ln -s ../init.d/clamd.milter S72clamav-milter

ntsysvやchkconfigを使うと、clamdより先にclamav-milterが起動してしまうような気がする...

起動してみる

clamd、clamav-milterの順に起動する。 sendmailも再起動する。

# /etc/init.d/clamd.milter start
# /etc/init.d/clamav-milter start
# /etc/init.d/sendmail restart

clamav-milterを先に起動してしまうと、clamdが起動できない。 (正常に起動できたように見えるが、/var/log/clamd/milterにエラーを吐いて止まる) また、clamdとclamav-milterとsendmailでソケットファイルの指定が違うと、clamav-milterを起動に失敗する。 ソケットファイルを置くディレクトリのオーナシップとパーミッションがおかしいときも、clamdの起動に失敗する。

正常に起動できていれば、psを実行したとき次のように表示されるはず。

# ps -ef | grep clam

clamilt   0000     1  0 20:30 ?        00:00:00 clamd.milter -c /etc/clamd.d/milter.conf
clamilt   0000     1  0 20:30 ?        00:00:00 /usr/sbin/clamav-milter --max-children=2 -c /etc/clamd.d/milter.conf local:/var/run/clamav-milter/clamav.sock

メールを送ってみる

ここまでの設定では、外部からメールを受信したときしかウィルスチェックを行わない。 どこかのプロバイダからメールを送って、ウィルスをチェックしているか確認してみる。 (/etc/sysconfig/clamav-milterのCLAMAV_FLAGSに"-l"または"--local"をつけると、LANから送信したメールもチェックする)

添付ファイルがウィルスに感染していないときは、メールヘッダに次のような文字が挿入される。 (/etc/sysconfig/clamav-milterのCLAMAV_FLAGSに"-n"または"--noxheader"をつけた場合は、挿入されない)

X-Virus-Scanned: ClamAV version 0.86.2, clamav-milter version 0.86 on mail.nina.jp
X-Virus-Status: Clean

添付ファイルがウィルスに感染していると、postmasterと宛先アドレスに次のようなメールが配信される。 (/etc/sysconfig/clamav-milterのCLAMAV_FLAGSに"--postmaster-only"をつけると、postmasterだけに配信される)

From: MAILER-DAEMON@mail.nina.jp
To: postmaster@mail.nina.jp
Cc: <destination@nina.jp>
Subject: Virus intercepted

A message sent from  to
	<destination@nina.jp>
contained Eicar-Test-Signature and has not been delivered. 

また、sendmailがrejectするので、送信元アドレスにエラーメールが配信される。 (/etc/sysconfig/clamav-milterのCLAMAV_FLAGSに"-N"または"--noreject"をつけると、rejectしないので送信元にエラーメールが配信されない <--おすすめ

<destination@nina.jp>: host nina.jp[xx.xx.xx.xx] said: 554 5.7.1 virus
    Eicar-Test-Signature detected by ClamAV - http://www.clamav.net (in reply 
    to end of DATA command)

[サーバの実験室 Redhat/Fedora]