taRgrey + postfix

spam すごいですねぇ ^^;
先日、ついに鯖1台お亡くなりになっちゃいました。
あまりのspamのすごさに処理しきれなくなって、HDDが逝かれちゃいました。

spamのほとんどは動的なIPから送られているもので、ちょっとじらしてやるとすぐにあきらめちゃうんですね。

taRgreyというspamフィルターを入れてみました。

これは、基本的にはtarpitting(遅延)ポリシーサーバとなっていて、その制限を抜けられなかった場合に、
さらにgreylisting(再送)をチェックして救済する、というものです。
S25Rという、動的IPっぽい接続からの場合にこのポリシーサーバでチェックする、という運用を想定しています。
こうすると、動的IPっぽいところから、通常よりもだいぶ短いタイムアウトにしていて、かつ再送もしてこない、
というメールだけがフィルタされます。
これで本当にほぼ全く誤検出無くスパムだけが捨てられます。

さとうさんのページ

taRgrey - S25R + tarpitting + greylisting
http://k2net.hakuba.jp/targrey/

あと、設定ファイルのサンプルがこちらにあります。
http://k2net.hakuba.jp/spam/postfix.conf.2.tar.gz

でここでは相変わらず実装だけ ^^;

対象はDebianです。今はVineとかでも同じにできるのかも知れませんが。

今回私はmail鯖がqmailであることと、鯖がお亡くなりになったときに既にmail鯖自体は移設してしまっているので

INET -> taRgrey鯖 -> qmail鯖

というようにメールをリレーさせることでtaRgrey鯖ではspam処理だけをさせています。
こうしておくと万一taRgrey鯖が逝かれても、MXを書き換えるだけで直接メールを受け取れるようになります。

postfixのバージョンが2.3以上が必要で、もしくはpatchをあてる必要があります。
postfixのv2.3はsargeにはありません。etchでないと入っていないようです。
もうじきetchもリリースされるらしいのでtaRgrey鯖はetchにしちゃいました。

必要なぱっけーじをインストールします。

apt-get install postfix postgrey

ついでにこの鯖にclamavとspamassassinも入れてしまいました。

apt-get install clamav clamav-daemon clamav-freshclam spamassassin spamc amavisd-new

postgreyにぱっちをあてます。別途ソースをgetしてあてても良いですし、postgrey自体perlなので直接あてちゃってもいいと思います。

apt-get source postgrey
patch -d postgrey-1.27 < targrey-0.30-postgrey-1.27.patch
cp posygrey-1.27/postgrey /usr/sbin/postgrey

postfix.conf.2.tar.gzを解凍すると次のファイルが出てきますのでとりあえず/etc/postfix/ にコピーしちゃいます。

check_ns
check_sender_apacheinfo
ClamSMTP.master.cf
permit_client_nots25r
prepend_client
reject_helo
reject_mx
reject_ns
Rgrey.main.cf
taRgrey.main.cf
whitelist_client
whitelist_recipient

taRgrey.main.cfの中身をmain.cfに書き加えちゃいます。
ついでにamavisも動かすならClamSMTP.master.cfもmaster.cfに書き加えましょう。
逆にamavis動かさないんならtaRgrey.main.cfの最後はいらないですね。
サンプルはポートが10026と10027になってますが、標準だと10024と10025だと思います。
amavisとあわせましょう。

設定ファイルのwhitelistとrejectはpostmapでdbにします。

postmap reject_mx reject_ns whitelist_client whitelist_recipient

転送をするならリレーのルールを設定します。

mydestination = targrey.exsample.net, localhost.localdomain, localhost.localdomain, localhost
relayhost =
relay_domains = exsample.net, rylay.exsample.net
transport_maps = hash:/etc/postfix/transport

私は送信もこの鯖を経由させているのでmynetworks にqmail鯖のアドレスを書きました。

mynetworks = 127.0.0.0/8, 220.xxx.xxx.xxx

/etc/postfix/transportに転送先を書き、postmapします。

exsample.net smtp:220.xxx.xxx.xxx
relay.exsample.net smtp:220.xxx.xxx.xxx

postgreyの起動オプションを設定します。

vi /etc/default/postgrey

私は
POSTGREY_OPTS="--inet=127.0.0.1:60000 --tarpit=125 --retry-count=2 --delay=3600 "
としてあります。

clamav spamassassin を使うなら

/etc/amavis/conf.d/15-content_filter_mode を編集します。

@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

それぞれコメントをはずします。
そのままだとamavisは走るのにvirus checkしてくれません。ログに
localhost.localdomain /usr/sbin/amavisd-new[224]: ANTI-VIRUS code NOT loaded
localhost.localdomain /usr/sbin/amavisd-new[224]: ANTI-SPAM code NOT loaded
localhost.localdomain /usr/sbin/amavisd-new[224]: ANTI-SPAM-SA code NOT loaded
てなぐあいになります

/etc/amavis/conf.d/05-domain_id を編集します。

@local_domains_acl = ( ".$mydomain",".exsample.net" ); ローカル側のドメインすべて書き並べます。
そうしないとヘッダーにレポートが書き込まれません。(送信時にはレポートを書かないため)

最初これがわからなくてはまりましたぁ --;

/etc/amavis/conf.d/20-debian_defaults

ウィルスやspamは残しても仕方ないので。
# $QUARANTINEDIR = "$MYHOME/virusmails";

タイトルは書き換えない
# $sa_spam_subject_tag = '***spam***';

spamはサーバー側では削除しない。
$final_spam_destiny = D_PASS;

再起動

#mail.log said

(host 127.0.0.1[127.0.0.1] said: 451 4.5.0 Error in processing, id=xxxxx-01, virus_scan FAILED: virus_scan: ALL VIRUS SCANNERS FAILED: ClamAV-clamd av-scanner FAILED: Too many retries to talk to /var/run/clamav/clamd.ctl (Can't connect to UNIX socket /var/run/clamav/clamd.ctl: No such file or directory) at (eval 44) line 268.; ClamAV-clamscan av-scanner FAILED: /usr/bin/clamscan timed out at (eval 44) line 462. (in reply to end of DATA command))

あれれ? ってこれしばらく待っていると直ります。知らないもんだから一生懸命restartして、いつまでたっても動かなかった^^;;;
http://lurker.clamav.net/message/20071121.123741.caa8ba6a.ja.html

ログを見るとわかるのだが、clamdがデータベースを読み込むのに時間がかかるらしい。しかし数分から数十分かかる。何とかならんのかなぁ^^;

これおそらくetchだけの問題らしいです。aptに
deb http://ftp2.jp.debian.org/debian-volatile etch/volatile main contrib
としてspamdをアップデートしたら20分かかっていたのが3秒で終わるようになりました。
セキュリティな問題はアップデートしてくれるのだが単純なバグはアップデートしないdebianの問題ですね。

効果

log眺めていると次々と落とされていくのがわかります。
今までの鯖だとこれをすべてviruscheckしていたので過負荷になるはずです。^^;
まぁこれでも抜けてくるspamは結構あります。今のところ手元のpopfileでほとんど落とせてますので問題は無いですが、
あとはspamassassinでもチューニングして対策するしかないですね。

問題?

携帯電話への転送が使えなくなっちゃいました。そもそもqmailが直接受けることを前提にしていたので無理もありません。
仕方ないのでtaRgrey鯖がつけるRecived:を除いてやることに・・・・
まだ実装があいまいなので公開しませんが、お急ぎの方はメールか掲示板へ。