rspamd + rmiter の組み合わせに、ClamAV を連携させてみた

以前、インストールメモをエントリーとしてあげていた、 rspamd と rmilter の組み合わせ、なかなか調子良く動作してくれている。
せっかくなので、以前書いていたけど連携させていなかった clamav との連携についてもまとめておきます。

rspamd は rmilter を使うことで ClamAv とも連携出来るようだし、DKIM 対応も rspam 側に取り込めるみたいだし、個別にフィルタ書いたりと色々と弄りどころが多そうなので、しばらく様子見て調子が良ければ、全部 rspamd を使うようにしちゃおうかな?とか思い始めていたりします。

[From rspamd + rmilter をセットアップ - Soukaku's HENA-CHOKO Blog]

一応、英語ではインストールから設定まで解説してくれているページはあるので、そちらを見れば設定出来ると思いますが。

Rmilter is a milter-daemon by the same author of Rspamd. You can use it to integrate clamav (Anti Virus) scanning for your emails on postfix, and you will also need it if you want to integrate postfix with Rspamd itself. Click here for the compile & install how to of Rspamd under Debian Wheezy.

[From Perl Hipster: How to compile & install rmilter + clamav under Debian Wheezy]

インストールとセットアップ

rspamd と rmilter は、既に動作している事が前提なので、その部分の説明は省略。必要であれば、以前のエントリーを参照のこと。
イントールのターゲットは、 Debian なので、それ以外の Linux ディストリビューションの場合は、インストールの部分を適宜読み替えてくださいね。
#jessie では rspamd 、 rmilter ともに取り込まれていますね。


今回必要なのは clamav なので、それをインストールします。
インストール自体は難しくなくて、root で次にようにコマンドを実行します。

# aptitude install clamav-daemon clamav-freshclam

clamav のインストールが完了したら、設定をしていきます。
主にやることは、rmilter を clamav を連携させるために、clamav 側の動作ユーザの設定を変更すること。

以下、その変更差分。

root@vps2:/etc/clamav# diff -u clamd.conf~ clamd.conf
--- clamd.conf~ 2014-09-03 00:17:13.048957000 +0900
+++ clamd.conf 2015-02-01 18:20:18.525139000 +0900
@@ -3,11 +3,11 @@
#Please read /usr/share/doc/clamav-daemon/README.Debian.gz for details
LocalSocket /var/run/clamav/clamd.ctl
FixStaleSocket true
-LocalSocketGroup clamav
+LocalSocketGroup _rmilter
LocalSocketMode 666
# TemporaryDirectory is not set to its default /tmp here to make overriding
# the default with environment variables TMPDIR/TMP/TEMP possible
-User clamav
+User _rmilter
AllowSupplementaryGroups false
ScanMail true
ScanArchive true
@@ -23,7 +23,6 @@
LogFacility LOG_LOCAL6
LogClean false
LogVerbose false
-PidFile /var/run/clamav/clamd.pid
DatabaseDirectory /var/lib/clamav
OfficialDatabaseOnly false
SelfCheck 3600
root@vps2:/etc/clamav# diff -u freshclam.conf~ freshclam.conf
--- freshclam.conf~ 2014-09-03 00:12:51.812957000 +0900
+++ freshclam.conf 2015-02-01 18:20:12.725139000 +0900
@@ -1,7 +1,7 @@
# Automatically created by the clamav-freshclam postinst
# Comments will get lost when you reconfigure the clamav-freshclam package

-DatabaseOwner clamav
+DatabaseOwner _rmilter
UpdateLogFile /var/log/clamav/freshclam.log
LogVerbose false
LogSyslog false
@@ -15,7 +15,6 @@
DatabaseDirectory /var/lib/clamav
DNSDatabaseInfo current.cvd.clamav.net
AllowSupplementaryGroups false
-PidFile /var/run/clamav/freshclam.pid
ConnectTimeout 30
ReceiveTimeout 30
TestDatabases yes

それと、上の変更に合わせて関連する ディレクトリ、ファイル類の所有者も変更します。

root@vps2:/etc/clamav# chown -R _rmilter: /var/log/clamav/ /var/run/clamav/ /var/lib/clamav/

あと、盲点なのが、logrotate の設定ファイル。/etc/logrotate.d/clamav-daemon と /etc/logrotate.d/clamav-freshclam の中で、ローテート後のログファイルの所有者を設定する部分があるので、ここもユーザを ”_rmilter” に直すのを忘れずに。

コレで準備完了したので、clamav を再起動。

root@vps2:/etc/clamav# service clamav-daemon restart
[ ok ] Stopping ClamAV daemon: clamd.
[ ok ] Starting ClamAV daemon: clamd .
root@vps2:/etc/clamav# service clamav-freshclam restart
[ ok ] Stopping ClamAV virus database updater: freshclam.
[ ok ] Starting ClamAV virus database updater: freshclam.

ちなみに、rspamd と rmilter のほうは、clamav との連携では特に設定ファイルの変更をする必要はありません。

テストしてみる

テストするにしても、テスト用にウィルスなんて保持しているなんて人は、そうそういないと思うので、テスト用のウィルスパターンを提供している eicar.org から必要なパターンを取得します。

ダウンロードページまで移動すると、次のような取得可能なテストパターンの一覧があります。

ダウンドード可能なテストファイルの一覧

この一覧の中で、今回必要なのは "eicar.com" のリンクで取得出来るものなので、それをダウンロード。( http 、 https どちらもで可。)
設定しているサーバ上にファイルを持ってきたいのであれば、次のようにやればいいでしょう。
#アンチウィルスソフトの動いた PC 上に置こうとすると、ダウンドードすら出来ない場合が…。

soukaku@vps2:~$ wget http://www.eicar.org/download/eicar.com -O /tmp/eicar_sig.txt
--2015-05-17 16:12:10-- http://www.eicar.org/download/eicar.com
www.eicar.org (www.eicar.org) をDNSに問いあわせています... 188.40.238.250
www.eicar.org (www.eicar.org)|188.40.238.250|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 68 [application/octet-stream]
`/tmp/eicar_sig.txt' に保存中

/tmp/eicar_sig.txt 100%[====================================================>] 68 --.-KB/s 時間 0s

2015-05-17 16:12:12 (5.44 MB/s) - `/tmp/eicar_sig.txt' へ保存完了 [68/68]

soukaku@vps2:~$ more /tmp/eicar_sig.txt
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

さて、持って来たテストファイルを、メールで送信すればいいわけですが、 swaks というテストツール使うと、以下のように実行すれば OK 。

soukaku@vps2:~$ swaks -f root@downtown.jp -t soukaku@downtown.jp -s localhost -d /tmp/eicar_sig.txt
=== Trying localhost:25...
=== Connected to localhost.
<- 220 vps2.downtown.jp ESMTP Postfix (Debian/GNU)
-> EHLO vps2.downtown.jp
<- 250-vps2.downtown.jp
<- 250-PIPELINING
<- 250-SIZE 10240000
<- 250-VRFY
<- 250-ETRN
<- 250-STARTTLS
<- 250-ENHANCEDSTATUSCODES
<- 250-8BITMIME
<- 250 DSN
-> MAIL FROM:<root@downtown.jp>
<- 250 2.1.0 Ok
-> RCPT TO:<soukaku@downtown.jp>
<- 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*
->
-> .
<** 554 5.7.1 Infected: Eicar-Test-Signature
-> QUIT
<- 221 2.0.0 Bye
=== Connection closed with remote host.

ちゃんと、”5.7.1 Infected: Eicar-Test-Signature” と応答が帰ってきましたね。正しくチェックされたようです。
この操作に対応したログは、以下のとおり /var/log/mail.info に。rmilter が clamscan を呼び出して、ウィルスチェックを実行した様子も記録されていますね。

May 17 16:15:47 vps2 postfix/smtpd[22697]: connect from localhost[::1]
May 17 16:15:48 vps2 postfix/smtpd[22697]: 4A57B8007463: client=localhost[::1]
May 17 16:15:48 vps2 postfix/cleanup[22704]: 4A57B8007463: message-id=<20150517071548.4A57B8007463@vps2.downtown.jp>
May 17 16:15:48 vps2 rmilter[15629]: mlfi_eom: 4A57B8007463: tempfile=/tmp/msg.XXDh5nDZ, size=362
May 17 16:15:48 vps2 rmilter[15629]: spamdscan: scan qid: <4A57B8007463>, mid: <20150517071548.4A57B8007463@vps2.downtown.jp>, 0.411753, localhost, metric: default: [12.000000 / 15.000000], symbols: FORGED_RECIPIENTS(1.00), R_UNDISC_RCPT(5.00), MISSING_TO(2.00), R_SPF_SOFTFAIL(0.00), ONCE_RECEIVED(1.00), MISSING_SUBJECT(2.00), HFILTER_HELO_IP_A(1.00)
May 17 16:15:48 vps2 rmilter[15629]: mlfi_eom: 4A57B8007463: add spam header to message according to spamd action
May 17 16:15:48 vps2 rmilter[15629]: clamscan: scan 0.207586, /var/run/clamav/clamd.ctl, found Eicar-Test-Signature, /tmp/msg.XXDh5nDZ
May 17 16:15:48 vps2 rmilter[15629]: mlfi_eom: 4A57B8007463: rejecting virus Eicar-Test-Signature
May 17 16:15:48 vps2 postfix/cleanup[22704]: 4A57B8007463: milter-reject: END-OF-MESSAGE from localhost[::1]: 5.7.1 Infected: Eicar-Test-Signature; from=<root@downtown.jp> to=<soukaku@downtown.jp> proto=ESMTP helo=<vps2.downtown.jp>
May 17 16:15:48 vps2 postfix/smtpd[22697]: disconnect from localhost[::1]

ここまで確認できれば、設定完了です。

オープンソースだけで、SMTPサーバでのアンチウィルス対策となると、 Amavis と Spammassasin 、 ClamAV の組み合わせがメジャー?ですけど、こういうやり方もあるということで、参考になれば幸いです。

トラックバック(1)

アップデートの手順自体は、公式サイトの Downloads にある Debian/Ubuntu の手順 に従って、 rspamd をダウンロードするため... 続きを読む

コメントする