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