Clamav-Milter-0.86-2 + Sendmail [FC4]
作成 : 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 forCLAMD_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 fromto <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)