Rgrey - S25R + greylisting

K2-net ホームへ

English (postgrey ML archive)

2004/9/30 (lastupdate 2009/5/29)

これはなに?

Rgreyとは、メールサーバ上でスパムやウイルスメールを排除するためのフィルタの手法で、 S25Rとgreylistingというスパム判定手法を組み合わせて使うというものです。
スパムの検出率を上げることより、正しいメールの誤検出をしないことを目標 として設計されており、原理的にほとんど誤検出無く運用することが出来ます。
そのため、ベイジアンフィルタ等の他のコンテンツフィルタと組み合わせて 1次フィルタとして利用すると有効ですが、これだけでも95%弱程の検出率はあります。

同様の手法で、greylistingの代わりにtarpitting(遅延)を利用したStarpitという手法と、tarpittingとgreylistingを組み合わせて、さらに誤検出などを減らすtaRgreyという手法も提案しています。
現在のところtaRgreyをもっとも推奨しますので、こちらのページを参照後、StarpitとtaRgreyの説明も参照ください。
Starpitでほぼ誤検出無く98%のスパムを排除
taRgrey - S25R + tarpitting + greylisting

開発動機と内容

Selective SMTP Rejection (S25R) - 阻止率99%のスパム対策方式の研究報告 を読んで、簡単な仕組みながら効果が高いと思いました。
これはFQDNのパターンから、PPPなどの接続先と思われるところから直接出されているものを拒否することで、スパムやウイルスメールを排除するというものです。

しかし、この報告でも述べられているように、大規模なサイトで運用するには、間違って阻止されてしまうメールのリスクが高く、rejectで再送要求し、それでも再度送ってきたらホワイトリストに登録する、ということが薦められています。
そこで、その運用を自動化するためのスクリプトを書こうと考えていたのですが、よく考えるとそれは、Greylistingそのものだということに気が付きました。

Greylistingという方式については、下記記事を参照ください。
[postfix-jp:03911] Greylisting
つまり、一度必ず再送要求で返して、ちゃんと再送してきたら受け取るというものです。

これを、あやしい接続元に対してだけ再送要求で返せば、Greylistingによる 副作用 - 再送待ちによるメールの遅延や、正しいメール送信元からのメールの排除(まれに再送要求に応じない メールサーバを使っているところがある) - がなく、スパムも受け取らなくて済むという、いいとこどりのシステムになるはずです。

FQDNのチェックとGreylistingを2重に掛けるからと言って、排除するための条 件がandになるわけですから、排除率が上がるわけではありません。FQDNチェッ クとGreylistingの排除率が掛けられた率に下がってしまいます。
駆除率を上げるのではなく、フィルタリングによる悪影響を最小限にするため の追加と考えてください。
ちなみに、自分宛に平均したところ200通/日で届いていた、スパム・ウイルスメールのうち、平均10通程すり抜けてきています。
内訳は、ドメイン名チェックですり抜けたものが7通程、Greylistingのチェッ クですり抜けたものが3通程となっています。
約95%の駆除率となっています。

このフィルタは接続要求元を逆引きしてパターンマッチ掛けるだけなので、コンテンツフィルタと比較して非常に負荷が軽くなっています。
そのため、これを1次フィルタとして、2次フィルタにClamAV等のウイルスチェックフィルタや、SpamAssassin等のスパムフィルタを用いると、負荷低減という意味でも利用価値があります。
また、ベイジアンフィルタ等を用いたスパムフィルタでは、どうしても誤検出されることがあるので、スパムにより分けられたものを一度チェックしてから捨てることが多いと思います。
一日に届くスパムメールが100通以上もあると、そのゴミ漁りすらうっとおしいのではないでしょうか。
S25Rにマッチする接続元で、かつ再送要求にも応じないような送信元は、ほぼスパムかウイルスと断定してしまってよいと思います。
そういうわかりやすいものを先に捨ててしまうことで、一日に届くスパムはこのフィルタで100通から10通以内に減りますから、その後のフィルタで引っ掛けたゴミを漁るときに、楽になる効果も狙えます。

また、接続元の逆引き名やDNSBLなどから、怪しい接続に対してのみgreylistingを掛けるという同様のコンセプトは、現在では下記のように複数のところで提案がされており、このような手法を指してselective greylistingと呼ばれています。

実装

postfix用

Postfixは2.1よりSMTPDアクセスポリシーという機能が使えるようになり、外部のポリシーサーバにより、接続の許可などを行わせることが出来るようになっています。
Postfix SMTP Access Policy Delegation
この機能を使って、Greylistingの実装がサンプルで付いてきているのですが、その他にも、
Postgrey - Postfix Greylisting Policy Server
というものが公開されています。
S25Rの条件にマッチしたものだけをpostgreyに渡してGreylistingを掛けるようにします。

設定による方法

postgreyを利用する場合、postfixの設定だけでRgreyの手法が利用できます。
postgreyのバージョンアップを気にすることなく利用できますし、パッチによるセキュリティを心配しなくて良いので、こちらのほうがお勧めだと思います。
/etc/postfix/main.cf
---
smtpd_restriction_classes =
    check_greylist
check_greylist = check_policy_service inet:60000

smtpd_recipient_restrictions =
    …
    check_client_access regexp:/etc/postfix/check_client_fqdn
---

/etc/postfix/check_client_fqdn
---
/^unknown$/                                  check_greylist
/^[^.]*[0-9][^0-9.]+[0-9].*\./               check_greylist
/^[^.]*[0-9]{5}/                             check_greylist
/^([^.]+\.)?[0-9][^.]*\.[^.]+\..+\.[a-z]/    check_greylist
/^[^.]*[0-9]\.[^.]*[0-9]-[0-9]/              check_greylist
/^[^.]*[0-9]\.[^.]*[0-9]\.[^.]+\..+\./       check_greylist
/^(dhcp|dialup|ppp|[achrsvx]?dsl)[^.]*[0-9]/ check_greylist
---
この設定方法のアイデアは
MTA のアクセス制御
等を書かれている、やまぐちたかのりさんが考案されました。

ホワイトリストや、Rgreyをすり抜けてくるスパムをフィルタするための、NSによるブラックリスト設定など、より具体的な設定内容はspam対策まとめおよびStarpitでほぼ誤検出無く98%のスパムを排除を参照ください。

設定ファイル例
RgreyとtaRgreyの、Postfixの設定ファイルをまとめたtar.gzファイルを公開していますので、こちらを参考にしてみてください。

Rgreyパッチを利用する場合

postfixを利用する場合、パッチを当てなくてすむ、上記の設定による手法のほうが、負荷やpostgreyサーバの保守の面でも有利ですので、そちらを利用したほうが良いでしょう。

postgrey では whitelists が指定できるのですが、これをちょこっと改造して、まず先にチェックすべき接続元、ここでは greylists と呼ぶとすると、これのどれかに合致しているなら、チェックする必要がある、という機能を追加しました。
postgrey-1.24用
パッチ本体:公開懺悔日記: 野良port
こちらで公開していただいておりますパッチをご利用ください。

postgrey-1.21用
パッチ本体:rgrey-0.2-1.21.tar.gz
Debian(sarge)のpostgrey-1.21用
パッチ本体:rgrey-0.2-1.21-debian.tar.gz
Debian用パッチを使ったインストールメモを参照

postgrey-1.16用
パッチ本体:postgrey-namecheck
このパッチを使ったインストールメモを参照し てください。

また、こちらではmomonga用のrpmを公開いただいています。
[linux] Rgrey - S25R + postgrey パッチ - 寝言に相槌日記フォ〜!!! (2005-09-23)
postgrey-1.21-1m.nosrc.rpm

SQLgreyを利用する場合

SQLgreyというpostgreyから派生したSQLサーバを利用するgreylistingサーバでは、Rgreyと同様の機能が取り入れられており、その中の設定ファイルdyn_fqdn.regexpで動的IPのマッチングが行われるようになっています。
この設定ファイルをS25Rのパターンに変更することで、Rgreyと全く同じ動作となります。
ちなみに、S25Rの提案者である浅見さんのテストによると、各パターンのスパムのマッチ率は以下のようになったとのことです。

そのため、SQLgrey標準のパターンを利用するよりも、S25Rのパターンに置き換えたほうが良いと思います。

qmail用

qmail用にもいくつかgreylistingの実装が公開されており、そのうちの一つ、
qgreylist - simple greylisting for qmail
に対してのS25R対応パッチ、Qgreyも作成しました。

履歴

2009/5/29 S25Rパターンを現バージョンのものに変更
2008/12/26 英語の説明をpostgrey MLで前田さんが書かれた説明のアーカイブにリンク
2008/3/3 設定ファイル例へのリンク追加
2006/11/14 taRgreyへのリンクを追加し、SQLgreyを利用する場合や、他のselective greylistingの手法を提案するサイト紹介した
2006/8/7 Starpitへのリンクを追加した
2006/6/13 spamの関係文書を直したついでに少し修正
2006/2/16 RgreyをS25R+greylistingの手法として説明を書き直し
2006/2/16 「公開懺悔日記」さんでpostgrey-1.24用のパッチを公開していただきました。
2005/10/5 「寝言に相槌日記フォ〜!!!」さんからmomonga用のrpmをリンクさせていただきました。
2005/9/22 説明文追加
2005/8/31 qmail用のgreylisting、qgreylistに対してのパッチ qgrey-0.1 を公開しました。
2005/8/8 postgrey-1.21 用のパッチ rgrey-0.2 を公開しました。
2005/8/7 Debian(sarge)用のパッチを公開。少しだけ機能を追加(greylistチェックを掛けるパターンをIPでも行えるように変更)したので rgrey-0.2 になりました。
2005/6/2 名前を変えたのにURLはpostgreyのままだったのでURLの追加。 http://k2net.hakuba.jp/rgrey/ でも接続できるようにした。
2005/4/28 「阻止率99%のスパム対策方式」に「Selective SMTP Rejection (S25R)」 という名前が付けられたのにともない、このパッチによるフィルタは Rgrey という名前にした。
2004/10/15 whitelistをFQDNチェックの前に掛けるようにしたが、やはり元にもどす。
2004/10/14 whitelistをFQDNチェックの前に掛けるように修正。patchに付属のgreylistとwhitelistを修正
2004/10/4 HUPのシグナルでgreylistingのリストも再読込するように修正。
2004/9/30 パッチの公開。

連絡先

佐藤 潔 (SATOH Kiyoshi)
http://d.hatena.ne.jp/stealthinu/