モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

Starpitの課題

Starpitについてのエントリーを書いてから、いろいろとご意見や実際に使っていただいた際の問題点など、いただきました。
それで浮かんできたStarpitの課題をリストアップします。

  • smtpdプロセス増加によるリソース負荷増

 →一部はsleepパッチにより低減可だが、すでにtarpittingを通らないとわかっているIPからも毎回tarpittingで待たせることが無駄

  • S25Rに引っかかる正しいメールサーバは1送信先毎に遅延がかけらてしまう

 →10件送信先ある場合、10×遅延時間だけ時間が掛かってしまう

  • 非常にまれなケースで誤検出がある

 →アジア地域のメールサーバなど逆引き設定がされていない場合や、DNS設定が間違っている場合などで、タイムアウトも短くしている場合

以下で、これらの課題を解決するための方法を提案します。

taRgrey(S25R+tarpitting+greylisting)というスパム対策のアイデア

Starpitよりもさらに誤検出の少ないスパム検出方法についてのアイデアです。(まだ実装はありません)
簡単に言うと、

S25R + tarpitting + greylisting

というもので、つまりStarpitで排除されるメールをさらにgreylistingで救済するという手法です。
S25Rに引っかかる条件で、かつ遅延を抜けられず、かつ再送もしてこなかったらスパムとして排除されます。


tarpitting では相手が切断してしまうので、その後再送してくるかを検出できれば上記の構成にすることが出来ます。
切断されたのか、それとも通ったのかを確認するには、ほんとうならMTA側になんらかの実装、つまりパッチが必要になりそうですが、Postfixでは smtpd_recipient_restrictions でDBに登録して遅延を掛け、smtpd_data_restrictions でDBと照らし合わせて、抜けてこれてないものは遅延の間に先方が切った、つまりtarpittingに引っかかったもの、と考えることが出来ると思います。


ただ、単にgreylistingを掛けると、postfixqmailなど普通のMTAをスパム送信に使っている場合、greylistingで救済されて全部抜けてきてしまいます。
むろん、誤検出を減らす目的だけの場合はそれでも良いのですが、なるべくならあまり検出率も下げずに救済策を取りたいと考えました。
tarpittinggreylistingで誤検出を検知することを考えるとき、スパマーは頻繁にIPを変えながらスパムを送信してくるので、長期に同一IPからスパムを送ってくることがほとんどありえないため、同一のIPから長期にわたってメールが出されているが受け取れていない場合、誤検出の可能性が高い、と考えられます。
そこで、greylistingで再送してきても、最初に受け取った時から2日くらい経ってからも、同IPで再送してきているか、を確認してはどうか、と考えました。
これだと、greylistingのパラメータの設定のみでこのような動きをすることが出来ます。


正しいメールサーバを2日とか待たせてしまう可能性がありますが、Starpitで誤検出されるメールサーバはほんとうにごくまれで、そういうレアケースを救済するための処置です。
またgreylistingのように、ホワイトリストブラックリストをDB化して持つことで、S25Rに引っかかる場合、正しいメールサーバなのに常に遅延を掛けられてしまう問題や、すでにスパマーとわかっているIPからの接続も毎回遅延させることで起動smtpdが増加する問題も、回避することが出来ます。


PostgreyかPolicy Daemonをベースに修正して、これらの機能を持ったポリシーサービスデーモンを作る予定です。
その前に、ログからスパマーがどれだけの期間、同一IPでメールを出してるのか、統計出す必要がありそうです。


(追記)

postgreyをベースにこのポリシーサーバを書きました。

taRgrey - S25R + tarpitting + greylisting
モーグルとカバとパウダーの日記 - taRgrey - S25R + tarpitting + greylisting


また、同一IPからスパムが出される期間については、下記エントリーを参照下さい。

モーグルとカバとパウダーの日記 - 同一IPからスパムが出されている期間
モーグルとカバとパウダーの日記 - 一見さんは1日以上同一IPを使ってるか確認するスパム対策手法

RgreyとStarpitの比較

Rgrey(S25R+greylisting)とStarpit(S25R+tarpitting)は兄弟のようなもので、非常に似ています。
スパム対策として採用するとき、どちらを選択したらよいか指標になるよう、比較をまとめました。
ただ、あくまで自分の主観的なもので、実際に数字的な根拠のないものもあります。

Rgrey(greylisting) Starpit(tarpitting)
メール受信数 非常に大量のメール受信でも利用実績あり smtpdの増加が問題になる可能性
誤検出 greylistingホワイトリストの整備がより進んでいる より誤検出自体が少ない印象
遅延 S25Rに掛かった場合のみ数10分程度の遅延がある ほぼない
導入のし易さ greylistingサーバを導入する必要がある Postfix-2.3以降なら設定だけで簡単
通信事業者での導入 導入可能か不明 条件により可能


(追記)

tarpittingの有利な点として、強さをパラメータで変更できる、という部分もあります。
greylistingは、再送要求を掛けるか否かの1/0ですが、tarpittingは10秒だけとか35秒だけとか、その長さによって強度を変えられます。
この柔軟性の違いは結構大きいかも。

Debian(sarge)でPostfix-2.3+dovecotでSMTP Authの設定はまりどころ

Postfix-2.3ではdovecotの認証を利用して、SMTP Authを利用することが出来るようになりました。
そこで、Debian(sarge)でPostfix-2.3+dovecotという構成でSMTP Authを設定してみたのですが、結構はまりどころがあったのでまとめます。


SMTP Authの設定自体は実はほとんど問題はなく、簡単に出来ます。
Postfix付属のドキュメント(Postfix SASL Howto)に沿って設定するだけです。


さて、なにがはまりどころかというと、Debian(sarge)のdovecotはバージョンが0.99.14だということです。
Postfixの説明で書かれている設定方法は、1.0以降でなければ使えない書式と設定のようです。
しかし、Debian(sarge)のdovecot設定ファイル、/etc/dovecot/dovecot.confには、

## Dovecot 1.0 configuration file

と書かれているため、気がつくのが遅れました…
[Dovecot] Error in config を参照。
ということで、dovecotも1.0RCをtarボールを持ってきてインストールしたところ、使えるようになりました。
あと、passdb pamが使えなかったため、shadowを使うようにしました。


一応、うちでやった設定内容を紹介しておきます。

postfixのmake時にsaslを使うように指定しデフォルトでdovecotを指定。

> make -f Makefile.init makefiles
> make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SASL_SERVER=\"dovecot\"'
> make

/etc/postfix/master.cf

submission inet n       -       -       -       -       smtpd
            -o smtpd_etrn_restrictions=reject
            -o smtpd_client_restrictions=permit_sasl_authenticated,reject

/etc/postfix/main.cf

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes

smtpd_recipient_restrictions =
        permit_mynetworks
        permit_sasl_authenticated
        ...

/usr/local/etc/dovecot.conf

auth default {
  mechanisms = plain login
  passdb shadow {
  }
  userdb passwd {
  }
  user = root
  socket listen {
    client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
    }
  }
}


さらに細かな設定については
Postfix + Dovecot - どさにっき
が参考になります。


他のツールを入れずにPostfix+dovecotだけでSMTP Auth可能で、Maildirでもmboxでも使えるため、今後はこの構成がメジャーになっていくのではないかと思いました。

クレジットカードで節約

id:sv01kaiさんから、ガソリン代の割引のあるクレジットカード使ってなんでも支払うようにすると節約になるよ、というのを昔聞いて、いつか導入しようと思ってたんだけども、やっとこ一念発起していろいろと調べて、そういうスタイルにすることにしました。
クレジットカードでの割引だとか、マイルだとか調べてみると、マイルとかポイントとかはあまり還元率が高くなくて、ガソリンや携帯の割引になるのが一番率が良いようでした。
そこで、カード年会費とか含めた年間の割引金額をシミュレートして、どこが一番お得になるのかを調べてみました。


うちの場合、ガソリン代が月1万5千円程度、携帯代が8千円程度なのですが、さくらドライバーズプラスカードとNTTグループカードが、カード利用金額に応じた割引が非常に大きく、これらを組み合わせたものが一番良さそうでした。
で、Excel使っていろんなカードや組み合わせと、月にカードで利用する金額とをグラフ化してみたんですが、トータルで見て、素直にさくらドライバーズプラスカードだけを使うのが一番良さそうでした。
さくらドライバーズプラスカードの場合だと、どのガソリンスタンドでも使えて、高速の料金にも割引が適用される点も利点です。ETC使った場合も割引対象になるのかな?


とりあえずカードの申込みはしてみたので、実際に計算通りに行くかどうか、試してみます。