先日の第2回静岡ITpro勉強会で聞いて,効果を確認してみる気になったtarpitting(応答の遅延)を試してみることにする.

このドメイン(rosy-kitten.org)のメイル・サーバでは,greylisting1DNSBL2を使って迷惑メイル対策を行っている. しかしながら,5xxを返した場合3だけでなく,greylistingで450を返した場合にも,すぐにセカンダリ・サーバ4に送信を試みるspammerもかなり存在する. そこで,動的IPアドレスっぽいホストから接続された場合だけ,DNSBLによる拒絶やgreylistingによる再送要求の前にtarpittingを行ってみる5. この方法なら,FreeBSDports collectionPostfixpostgreyをそのまま使用できる6

必要な設定は以下の通り.

  • “RCPT TO"が送られてくる前に,smtpd_client_restrictionなどの制限を適用する7
smtpd_delay_reject = no
  • DNSBLを引く前に,check_client_fqdn_tarpitに書かれた条件にマッチするクライアントへの返答を遅延する.
smtpd_client_restrictions =
    permit_mynetworks
    check_client_access regexp:/usr/local/etc/postfix/check_client_fqdn_tarpit
    reject_rbl_client bl.spamcop.net
    reject_rbl_client all.rbl.jp
(snip)

check_client_fqdn_tarpitの内容は以下の通り.

/^unknown$/                                     sleep 90
/^[^.]*[0-9][^0-9.]+[0-9].*\./                  sleep 90
/^[^.]*[0-9]{5}/                                sleep 90
/^([^.]+\.)?[0-9][^.]*\.[^.]+\..+\.[a-z]/       sleep 90
/^[^.]*[0-9]\.[^.]*[0-9]-[0-9]/                 sleep 90
/^[^.]*[0-9]\.[^.]*[0-9]\.[^.]+\..+\./          sleep 90
/^(dhcp|dialup|ppp|[achrsvx]?dsl)[^.]*[0-9]/    sleep 90
  • Greylistingなどは"RCPT TO"が送られてきてから適用する.
smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination
    check_policy_service inet:127.0.0.1:10023

というわけで,しばらくこれで様子を見てみることにする…


  1. Postgreyを使っている. ↩︎

  2. RBL.JPSpamCop Blocking Listを使っている. ↩︎

  3. DNSBLにマッチした場合の554だけでなく,User unkownな場合の550なども返している. ↩︎

  4. 私が管理しているものではないので,自由に迷惑メイル対策ができない. ↩︎

  5. 遅延をかけるタイミング的には,greet pauseと言ったほうが適切なのかも知れない. ↩︎

  6. postgreyにパッチなどを当てる必要が無い. ↩︎

  7. デフォルトはyesで"RCPT TO"が送られてくるまで各種の制限が適用されない. ↩︎