clamav-milterを利用してメールのウイルススキャンをした備忘録です。

■ClamAV公式
http://www.clamav.net/lang/en/

■説明

ここでは、Postfix + clamav-milterを利用してメールのウイルススキャンをしてみました。
# 「amavisd-new」 + 「ClamAV」でもウイルススキャンは可能です:D
インストール方法は、ClamAVのサイトに公開されているrpmパッケージを利用します。
clamav-milterパッケージの依存関係でsendmailとsendmail-milterが必要なのでインストールします。
動作確認に使用するテストウイルスは「eicar」で公開されているものにします。

■使用OS
CentOS 6.0 64bit

■Postfixバージョン
postfix-2.6.6-2.1.el6_0.x86_64

■clamavバージョン
clamav-0.97.2-1.el6.rf.x86_64.rpm
clamav-db-0.97.2-1.el6.rf.x86_64.rpm
clamav-milter-0.97.2-1.el6.rf.x86_64.rpm
clamd-0.97.2-1.el6.rf.x86_64.rpm
※最新版は下記URLを参照してください。
http://pkgs.repoforge.org/clamav/

■テストウイルス
http://www.eicar.org/86-0-Intended-use.html

(1)必要なパッケージをインストール

[root@example ~]# yum -y install libtool-ltdl sendmail sendmail-milter

(2)必要なclamav(d)をダウンロード
[root@example ~]# wget http://pkgs.repoforge.org/clamav/clamav-0.97.2-1.el6.rf.x86_64.rpm
[root@example ~]# wget http://pkgs.repoforge.org/clamav/clamav-db-0.97.2-1.el6.rf.x86_64.rpm
[root@example ~]# wget http://pkgs.repoforge.org/clamav/clamav-milter-0.97.2-1.el6.rf.x86_64.rpm
[root@example ~]# wget http://pkgs.repoforge.org/clamav/clamd-0.97.2-1.el6.rf.x86_64.rpm

(3)clamav(d)をインストール
[root@example ~]# rpm -ivh clam*
警告: clamav-0.97.2-1.el6.rf.x86_64.rpm: ヘッダ V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY
準備中...                ########################################### [100%]
   1:clamav-db              ########################################### [ 25%]
   2:clamav                 ########################################### [ 50%]
   3:clamd                  ########################################### [ 75%]
   4:clamav-milter          ########################################### [100%]

(4)clamdの設定変更
[root@example ~]# vi /etc/freshclam.conf
#DatabaseMirror db.XY.clamav.net
↓ # 変更
DatabaseMirror db.jp.clamav.net

(5)clamav-milterの設定変更
[root@example ~]# vi /etc/clamav-milter.conf
#MilterSocketMode 660
↓ # 変更(postfixでもソケットにアクセス可能にする)
MilterSocketMode 666

#OnInfected Quarantine
↓ # 変更(ウィルスメールは問答無用で削除)
OnInfected Blackhole

#AddHeader Yes
↓ # 変更(メールヘッダを付与)
AddHeader Yes
※デフォルトでは、ウイルスメールはHOLDになり「mailq」コマンドで確認できる。

(6)ウイルス定義ファイルのアップデート
[root@example ~]# freshclam
ClamAV update process started at Wed Aug 24 00:14:15 2011
main.cvd is up to date (version: 53, sigs: 846214, f-level: 53, builder: sven)
WARNING: getfile: daily-13357.cdiff not found on remote server (IP: 211.10.155.48)
WARNING: getpatch: Can't download daily-13357.cdiff from db.jp.clamav.net
WARNING: getfile: daily-13357.cdiff not found on remote server (IP: 203.178.137.175)
WARNING: getpatch: Can't download daily-13357.cdiff from db.jp.clamav.net
WARNING: getfile: daily-13357.cdiff not found on remote server (IP: 27.96.54.66)
WARNING: getpatch: Can't download daily-13357.cdiff from db.jp.clamav.net
WARNING: Incremental update failed, trying to download daily.cvd
Downloading daily.cvd [100%]
daily.cvd updated (version: 13472, sigs: 181755, f-level: 60, builder: ccordes)
Downloading bytecode.cvd [100%]
bytecode.cvd updated (version: 144, sigs: 41, f-level: 60, builder: edwin)
Database updated (1028010 signatures) from db.jp.clamav.net (IP: 218.44.253.75)
WARNING: Clamd was NOT notified: Can't connect to clamd through /var/run/clamav/clamd.sock
connect(): No such file or directory

※WARNINGが出力されるのは、clamdをまだ起動していないため。

(7)Postfixの設定変更
[root@example ~]# vi /etc/postfix/main.cf
#---最終行にでも追加---
# Clamav Milter Settings.
smtpd_milters = unix:/var/clamav/clmilter.socket
non_smtpd_milters = unix:/var/clamav/clmilter.socket
milter_default_action = accept

(8)clamd、clamav-milterを起動
[root@example ~]# /etc/rc.d/init.d/clamd start
Starting Clam AntiVirus Daemon: Bytecode: Security mode set to "TrustSigned".
                                                           [  OK  ]
[root@example ~]# /etc/rc.d/init.d/clamav-milter start
Starting Clamav Milter Daemon:                             [  OK  ]
[root@example ~]# chkconfig clamd on
[root@example ~]# chkconfig clamav-milter on

(9)Postfixを起動

[root@example ~]# /etc/rc.d/init.d/postfix start
postfix を起動中:                                          [  OK  ]
[root@example ~]# chkconfig postfix on

(10)動作確認
・ウイルスメールを送信する。
[root@example ~]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.example.com ESMTP Postfix
helo mail.example.com
250 mail.example.com
mail from: testuser@example.com
250 2.1.0 Ok
rcpt to: root@example.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
.
250 2.0.0 Ok: queued as DD315A06C1
quit
221 2.0.0 Bye
Connection closed by foreign host.

・/var/log/maillog
Aug 24 00:24:08 example postfix/smtpd[1958]: connect from localhost[127.0.0.1]
Aug 24 00:24:27 example postfix/smtpd[1958]: DD315A06C1: client=localhost[127.0.0.1]
Aug 24 00:24:38 example postfix/cleanup[1962]: DD315A06C1: message-id=<20110823152427.DD315A06C1@mail.example.com>
Aug 24 00:24:38 example postfix/cleanup[1962]: DD315A06C1: milter-discard: END-OF-MESSAGE from localhost[127.0.0.1]: milter triggers DISCARD action; from=<testuser@example.com> to=<root@example.com> proto=SMTP helo=<mail.example.com>
Aug 24 00:24:39 example postfix/smtpd[1958]: disconnect from localhost[127.0.0.1]

milterの設定で「Blackhole」にしたためウイルスを検知すると即削除される。
# 誤検知があるかもしれないので、最初はデフォルト設定の方がいいかもしれません。
個人的に設定方法は、「clamav-milter」の方が楽だと思います:D

参考文献
1.  http://futuremix.org/2009/11/postfix-clamav-milter


8月 24, 2011 at 12:29 am by 黒ぶちメガネ
Category: Linux, Postfix, ウイルス対策