No.156 2005/01/16
Becky!でスパムメールを自動的に90%以上捨てる方法

 第142回で、スパムメールを自動的にごみ箱行きにするために、本文に書かれたURLを条件にする方法を紹介しました。しかし、この方法でもいたちごっこになります。今回は、いたちごっこにならない方法をご紹介します。第149回で紹介した、メールサーバでのスパム対策のノウハウを応用しています。
 使うメーラーはBecky!です。Becky!は、文字列条件の指定に正規表現という記法を使えるので、この方法が可能です。残念ながら、同じことができるメーラーはほかにほとんどないでしょう。

(以下の説明は、2007年10月16日に全面的に書き直しました。)

設定方法
  1. Receivedヘッダのタイプを調べる
     まず、あなたが受信するメールのReceivedヘッダのタイプを調べます。
     他ドメインから受信したメールのヘッダを見て、Receivedヘッダを下から順に見ていって、自ドメインのメールサーバ(仮に「mail.example.jp」とします)が外部から受信した記録を見つけてください。

    1. タイプA(メールサーバプログラムがPostfixまたはsendmailの場合)
      Received: from jaa.de (202-56.ri.cgocable.ca [24.226.202.56])
       by mail.example.jp

       これは、私が受けたスパムメールの例です。
       「Received: from」の次の「jaa.de」は、送信元のホストがSMTP(メール転送プロトコル)のHELO(名乗り)コマンドで通知したホスト・ドメイン名(HELOアドレス)です(これは嘘をつくことができます)。
       IPアドレスとともにかっこでくくられている「202-56.ri.cgocable.ca」は、IPアドレスから検索された逆引き名です。次節で説明する振り分けでは、この部分を検査します。

    2. タイプB(メールサーバプログラムがqmailの場合)
      Received: from 202-56.ri.cgocable.ca (HELO jaa.de) (24.226.202.56)
       by mail.example.jp

       これは、「Received: from」の右に逆引き名、HELOアドレス、IPアドレスの順に並ぶフォーマットです。次節で説明する振り分けでは、逆引き名の部分を検査します。

    3. タイプC(メールサーバプログラムがsendmailで、逆引き名が記録されない場合)
      Received: from jaa.de
       by mail.example.jp

       残念ながら、メールサーバがHELOアドレスしか記録してくれないケースです。ここでご説明する方法ではあまり効果が得られません。あきらめてください。m(_"_)m

  2. ごみ箱への振り分け条件を設定する
     Becky!のごみ箱を右クリックして、「フォルダへの振り分けルール」をクリックします。



     「ヘッダ」欄に「Received」と手入力し、「正規表現」のチェックボックスをオンにします。そして、「文字列」欄に以下の文字列を一つずつコピー・貼り付けし、「追加」ボタンをクリックします。2行目以降を追加する時は、「追加」ボタンのプルダウンメニューから「並列(Or)条件として追加」を選択してください。
     指定する文字列は、Receivedヘッダのタイプによって異なります。
    (2012/10/24追記)2012年現在、下記の2行目以降の指定はほとんど必要なくなりました。

    1. タイプA
      from .*\((unknown|\[|[0-9]|[^.]*[0-9][0-9][0-9][0-9][0-9]|[^.]*[0-9]+(([a-z]|-|_)+|\.)[0-9]|.*\(may be forged\)).* by mail\.example\.jp
      from .*\(.+\.(adsl|internetdsl|sdi)\.tpnet\.pl .* by mail\.example\.jp
      from .*\(user.*\.mindspring\.com .* by mail\.example\.jp
      from .*\(.+\.pppool\.de .* by mail\.example\.jp
      from .*\(.+\.[^.]*[0-9]+-[0-9]+-[0-9]+\.noos\.fr .* by mail\.example\.jp
      from .*\(.+\.dip[0-9]+\.t-ipconnect\.de .* by mail\.example\.jp
      from .*\(.+\.dip\.t-dialin\.net .* by mail\.example\.jp
      from .*\(.+\.rev\.numericable\.fr .* by mail\.example\.jp
      from .*\(.+\.(adsl|cable)\.wanadoo\.nl .* by mail\.example\.jp

    2. タイプB
      from (unknown|[0-9]|[^.]*[0-9][0-9][0-9][0-9][0-9]|[^.]*[0-9]+(([a-z]|-|_)+|\.)[0-9]).* by mail\.example\.jp
      from .+\.(adsl|internetdsl|sdi)\.tpnet\.pl .* by mail\.example\.jp
      from user.*\.mindspring\.com .* by mail\.example\.jp
      from .+\.pppool\.de .* by mail\.example\.jp
      from .+\.[^.]*[0-9]+-[0-9]+-[0-9]+\.noos\.fr .* by mail\.example\.jp
      from .+\.dip[0-9]+\.t-ipconnect\.de .* by mail\.example\.jp
      from .+\.dip\.t-dialin\.net .* by mail\.example\.jp
      from .+\.rev\.numericable\.fr .* by mail\.example\.jp
      from .+\.(adsl|cable)\.wanadoo\.nl .* by mail\.example\.jp

     ここで、「mail\.example\.jp」をあなたのドメインのメールサーバ名に書き換えてください。ピリオドの直前には「\」を挿入してください(正規表現の決まりです)。外からメールを受けるメールサーバが複数ある場合は、「(mail1|mail2)\.example\.jp」のように書くことができます。
     「OK」をクリックして、ひとまず設定完了です。これで受信してみてください。

  3. 除外条件を設定する
     ごみ箱への振り分け条件を設定した後は、ごみ箱に振り分けられるメールを必ず確認してください。時として、まともなメールが振り分け条件に引っかかってごみ箱に振り分けられてしまうことがあります。その時には、除外条件を設定します。
     同じくごみ箱を右クリックして、「フォルダへの振り分けルール」をクリックします。



     最初の除外条件を設定するには、振り分け条件の1行目をマウスで選択してから、「ヘッダ」欄のプルダウンメニューから「From (差出人)」を選択し、「文字列」欄に差出人アドレスのメールドメイン名(「@」の右)を入力し、「ない時」のラジオボタンを選択します。「正規表現」はオフのままにします。そして、「追加」ボタンをクリックし、現れるプルダウンメニューから「絞り込み(And)条件として追加」を選択します。
     2個目以降の除外条件を設定するには、最後の除外条件をマウスで選択してから、以下同様にします。すなわち、除外条件はすべて絞り込み条件として追加していきます。
解説
 昨今のスパムメールのほとんどは、メールサーバを経由せずに、ISPのエンドユーザー回線につながったPCから直接来ます。その多くは、ウィルス感染してスパムメール送信者に操られるPCだと言われています。
 ここでご説明した方法は、エンドユーザー回線のIPアドレスの多くは逆引きできないか、または逆引き名に数字が多用されているということを利用したものです。具体的には、1行目の条件は次の場合を引っかけます。
この1行目の条件で大多数のエンドユーザーPCからのスパムメールをごみ箱に振り分けることができます。ただし、まともなメールを誤って引っかけることがあるので、除外条件を絞り込み条件としてこれに追加する必要があります。
 2行目以降の条件は、1行目の条件に引っかからなくてスパムメールの発信が多いドメインのブラックリストです。(2012/10/24追記:2012年現在、これらのドメインからのスパムメールの発信はほとんどなくなりましたので、2行目以降は指定しなくてかまいません。)
 この方法で、スパムメールの約97%が自動的にごみ箱に振り分けられます。送信元ホストの逆引き名という情報は、メールの内容が迷惑なものかどうかとは一見関係がないように思えるかもしれませんが、この方法は意外なほど効果的です。しかも、メール本文を解析しないので、メール受信時のCPU負荷が軽くてすみます。どうぞお試しください。

目次 ホーム