「abmail」迷惑メール対策ツール

本ツールは、迷惑メール判定プログラムをはじめとして、それを応用したアンチ後方散乱コンテンツフィルタ、アドレスレンジデータベースマネージャーなど、メール利用者やメールサーバ管理者のためのさまざまな迷惑メール対策プログラムです。

ソースコード

1.1.9 より GNU AGPLv3(Affero General Public License Version 3) に基づき配布しています。

2009/10/17 より Git バージョン管理システムによる配布を開始しています。

ドキュメント

(2009/11/19) 1.2.0 から特に更新された点は以下の通りです。

  1. アドレスレンジデータベースマネージャーRPCサーバ/クライアント abaddrd/abaddrc において、RPC プログラム番号を Sun Microsystems のシステム予約の範囲に割り当てていた(900000)のをユーザ定義の範囲内(900000000)に変更しました。
  2. tools/arr_ar.h は IPv6 のアドレスレンジのソートや検索で使われている、任意型要素からなる固定長配列を、ひとつの大きな符合無し数値として論理演算、算術演算を提供するマクロ集となっています(但し、現状では乗除は未実装)。そして、tools/abcidr.c では、tools/arr_ar.h を IPv6 アドレスに特化する手続き集を構成し、abmail 内で広範に利用されています。これらに関連して、
  3. tools/abaddr の DNSBL において、運営が停止している spam.tqmcube.com を廃止しました。abmail の DNSBL では、当初より spam.tqmcube.com はコメントアウトされているので、実用上関係ありません。
  4. libexec/abaddr.x, libexec/abaddri.c, libexec/abaddrd.c において、64-bit での RPC サーバ/クライアントのビルドに対応しました。これ以前は、IPv4 アドレスの RPC 経由でのやり取りができませんでした。

(2008/08/01) 1.1.9 から特に更新された点は以下の通りです。

  1. アドレスレンジデータベースマネージャーRPCサーバ/クライアント abaddrd/abaddrc が新規導入されました。IPv4/IPv6アドレスのホワイトリスト・ブラックリストの登録と検索が容易になります。これを使わない場合においては、これまでと使い勝手は全く変わりません。また、abaddrd/abaddrc を利用するには現時点で Tokyo Cabinet データベースライブラリ が必須です。RPCサーバを起動しない、一般ユーザでも利用可能な選択肢も用意してあります。
  2. abmail が IPv6 対応となりました。これで基本的な IPv6 対応がすべて完了したことになりますが、実運用に係る微調整は多少残されているかと思われます。
  3. abmail, abaddr において、逆引きのパラノイド検査に誤りがあったのを修正しました。
  4. abmail, abaddr の DNSBL において、運営が停止している list.dsbl.org 等を廃止するとともに、偽陽性の誤判定が少ない zen.spamhaus.org 等を新規導入しました。
  5. abmail において、既定値が標準エラー出力である、主要なメッセージの出力先に、「-c」オプションで標準出力を指定できるようになりました。
  6. abmail において、古い postfix などで HELO グリーティングのサニタイズが不十分であることによる意図しない Received 行の文字列パターンにより、結果的に逆引きに係る判定がバイパスしてしまう問題に対処しました。ちなみに、IPアドレスに係る判定には影響ありません。
  7. abmail の ras_reliable.lst において、既に記述されていた Sendmail の SMTP AUTH の形式に加えて、Postfix の SMTP AUTH の形式を追加しました。
  8. abmail の rfs_reliable.lst において、Cyrus murder が書き加える Received 行に対応しました。これは、メールが到達したときには関係ありませんが、Cyrus IMAP により既に保管されたメールについての再検査に有用です。
  9. Cyrus IMAP 用の ~/.procmailrc の例として dot-procmailrc.cyrus を加えました。

(2008/03/21) 1.1.8 から特に更新された点は以下の通りです。

  1. GNU AGPLv3 としました。
  2. abmailにおいて、「-a」オプションでバウンスの元となった添付されているメールのみの判定が行なえるようになりました。既に再送キューなどに溜ってしまったバウンスを捨てたい場合などに有用です。
  3. cron 等での tools/abmailsreports の使用例 tools/sbin/abmailsreporters にて、ユーザやエイリアスの自動選別方法を導入しました。
  4. tools/etc/aliases, tools/etc/procmailrcs/aliases.rcにおいて、ONLY_DELIVERED_TO 変数による、より適切なメーリングリスト管理ツールの利用が可能になりました。
  5. tools/sbin/abackscatter.sh をアンチ後方散乱コンテンツフィルタとして新規追加しました。
  6. abmail, tools/abmailc において、Solaris にて環境変数 HOME が未定義の場合にセグメンテーション違反となるバグを修正しました。

(2007/11/15) 1.1.7 から特に更新された点は以下の通りです。

  1. tools/abmailsreport(tools/abmailsview), tools/abmailsreports(tools/abmailsviews) において、隔離スパム報告に先立ち、例えばウイルス除去等の任意の前処理を「-c」オプションで指定できるようになりました。前処理は試験実行向けの tools/abmailsview, tools/abmailsviews においても実行されることに注意して下さい。
  2. abmail-rescue, abmailrescue, abmails-echos(abmails-cats, abmails-rescues), tools/abmailsreport(tools/abmailsview), tools/abmailsreports(tools/abmailsviews) において、majordomo 等のメーリングリスト管理ツールへ対応しました。
  3. tools/etc/procmailrcs/aliases.rc をグループやメーリングリストなどの汎用スパム対策MDA設定、tools/etc/procmailrcs/abmail-devel-list.rc を majordomo によるメーリングリスト「abmail-devel」専用スパム対策MDA設定例として新規追加しました。
  4. tools/sbin/abmailsreporters を隔離スパム報告及び誤判定救済用ツールの cron 等で使用する運用例として追加しました。

(2007/07/06) 1.1.6 から特に更新された点は以下の通りです。

  1. abmail, tools/abmailc 及び abmail-mv, abmailmv, abmail-rescue, abmailrescue, abmails-echo, abmails-echos, tools/abmailsreport, tools/abmailsreports において、MH 形式に加えて Maildir 形式のディレクトリをサポートしました。

(2007/06/12) 1.1.5 から特に更新された点は以下の通りです。

  1. abmailにおいて、DNS ブラックリストへの問い合わせがマルチスレッド化され、効率的に結果が得られるようになりました。「-d」オプション指定時、シングルCPUでも数倍近くのパフォーマンスが得られます。
  2. abmailにおいて、逆引きを行なう場面(「-r」オプション、rss_reliable.lstの「`host \?`」コマンド)において、パラノイド検査が既定値となりました。
  3. abmailにおいて、標準入力だけでなく、ファイルやMH形式のディレクトリが扱えるようにしたため、複数のメールの処理が高速化されました。
  4. abmailにおいて、複数のメールの処理をマルチスレッド化することが可能となりました。隔離フォルダの再検査の際には、「-r」オプション指定時、「-MM」オプションを併用する事で、シングルCPUでも倍以上のパフォーマンスが得られます。
  5. abmailにおいて、「-sm-{server,client,delete}[=sm_pathname]」オプションによる共有メモリを用いた処理速度向上が実現されました。但し、ローカルセキュリティ上の注意事項がありますので、扱いには注意して下さい。
  6. abaddr - DNSBL、逆引き(パラノイド)検査ツールが追加されました。
  7. abcidrにおいて、IPv6アドレスが扱えるようになりました。
  8. abmailsreportにおいて、スパムサマリ報告の直前にabmails-rescueを呼べるようになりました。これにより、偶発的な逆引き不能による誤判定が、自動的に救済できるようになります。
  9. abmails-rescueにおいて、abmailsreportに合わせて前日分の隔離メールのみ扱うようにしました。

ビルド方法

(以下の例では、自組織のドメイン名を example.com、アドレス空間を 10.20.0.0/16 とします)
ビルドにはlibpcre(Perl互換正規表現ライブラリ)が必須です。また、CFLAGS等でDISABLE_PTHREADを定義しない限りlibpthreadが必要です。まず、tarballを展開し、そのディレクトリに入り、

$ make PREFIX=/opt/local CFLAGS='-DMYNETWORK=\"10.20.0.0\" -DMYNETMASK=\"16\" -DMYDOMAIN=\"example.com\"'
とします。また、tools/abmess等、他のツールもビルドしたい場合は、
$ cd tools
$ make PREFIX=/opt/local MYDOMAIN="example.com"
とします。但し、abmailcのビルドにはlibiconv(文字セット変換ライブラリ)が必須です。さらに、abaddrd/abaddrcもビルドしたい場合には、
$ cd libexec
$ make PREFIX=/opt/local CFLAGS='-DMYNETWORK=\"10.20.0.0\" -DMYNETMASK=\"16\" -DMYDOMAIN=\"example.com\"'
とします。abaddrd/abaddrcのビルドにはTokyo Cabinet データベースライブラリが必須です。

インストール

適宜 root になるなどして、

# make PREFIX=/opt/local install
とします。また、tools/abmess等、他のツールもインストールしたい場合は、
# cd tools
# make PREFIX=/opt/local MYDOMAIN="example.com" install
とします。さらに、abaddrd/abaddrcもインストールしたい場合は、
# cd libexec
# make PREFIX=/opt/local install
とします。

以下はインストールされるファイルリストです。

/opt/local/bin/abmail
/opt/local/bin/abmail-cat
/opt/local/bin/abmail-echo
/opt/local/bin/abmail-mv
/opt/local/bin/abmail-rescue
/opt/local/bin/abmailc
/opt/local/bin/abmailcat
/opt/local/bin/abmailecho
/opt/local/bin/abmailmv
/opt/local/bin/abmailrescue
/opt/local/bin/abmails-cat
/opt/local/bin/abmails-cats
/opt/local/bin/abmails-echo
/opt/local/bin/abmails-echos
/opt/local/bin/abmails-rescue
/opt/local/bin/abmails-rescues
/opt/local/etc/abmail/ams_reliable.lst
/opt/local/etc/abmail/ams_unreliable.lst
/opt/local/etc/abmail/ras_reliable.lst
/opt/local/etc/abmail/rfs_reliable.lst
/opt/local/etc/abmail/rhs_unreliable.lst
/opt/local/etc/abmail/rns_reliable.lst
/opt/local/etc/abmail/rns_unreliable.lst
/opt/local/etc/abmail/rss_reliable.lst

以下は tools にてインストールされるファイルリストです。

/opt/local/bin/abaddr
/opt/local/bin/abcidr
/opt/local/bin/abmailc
/opt/local/bin/abmailsreport
/opt/local/bin/abmailsreports
/opt/local/bin/abmailsview
/opt/local/bin/abmailsviews
/opt/local/bin/abmess

以下は libexec にてインストールされるファイルリストです。

/opt/local/bin/abmail
/opt/local/bin/abaddrc
/opt/local/sbin/abaddrd
/opt/local/include/abaddri.h
/opt/local/lib/libabaddr.a
/opt/local/var/abmail/abaddr.bdb
/opt/local/var/abmail/ams_reliable.lst.out.default
/opt/local/var/abmail/ams_trusted.lst.out.default
/opt/local/var/abmail/ams_unreliable.lst.out.default

設定例

(以下、1.1.5 と特に変更点はありません)
まず、rhs_unreliable.lst にて、自組織に関係の無いものはコメントアウトして、自組織に関するものを適宜追記して下さい。以下はそれを diff -u 形式で表しています。

-210\.154\.62\.(?:6[4-9]|7[0-1])
-.*aihara\.co\.jp
+10\.20(?:\.\d+){2}
+.*example\.com
+#210\.154\.62\.(?:6[4-9]|7[0-1])
+#.*aihara\.co\.jp

次に必要に応じて、rfs_reliable.lst に組織内のローカル配送と見なすReceive:行のパターンを正規表現で適宜追記して下さい。

#
# via MTAs at example.com
 from \S*\s*\(\s*\S*\s*\[10\.20(?:\.\d+){2}\]\)(?:\s*.*)*
 from \S*\s*\(\s*\S*\s*\[(?:127(?:\.\d+){3}|10(?:\.\d+){3}|172\.(?:1[6-9]|2[0-9]|3[0-1])(?:\.\d+){2}|192\.168(?:\.\d+){2})\]\)\s*by .*example\.com(?:\s*.*)*

さらに必要に応じて、rss_reliable.lst に逆引き不能の場合に明示的にunknownとしたり、逆引きを行なわないMTAに対してそれを補完するパターンを正規表現と代替文字列で適宜追記して下さい。

#
# for MTAs at example.com
 from (\S*)\s*\(\s*\[(.*)\]\)(\s*by\s*mailta\.example\.com(?:\s*.*)*)	 from \1 (unknown [\2])\3
 from (\S*)\s*\(\s*\[(.*)\]\)(\s*by\s*mailgw\.example\.com(?:\s*.*)*)	 from \1 (`host \2` [\2])\3

シンプルでない経路で運用されている組織の MTA や経路上に必要な情報を付加しない MTA が存在する組織では、このような設定を行なう必要があります。abmail はそういった MTA に到達するメールの経路をきちんと把握する必要があり、これらの設定が不適切だと正しくスパム判定が行なえません。具体的なメールに対してabmessをmoreのように用いると、注目すべき信頼できる終端のReceived:行が出力されるので、適切に設定されているかどうかを確認する事ができます。rfs_reliable.lst, rss_reliable.lst での記述方法を応用すると、例えば組織外のメーリングリスト経由等から配送されるメールにおいてスパム判定ができたり、多地点の意図した転送元から配送されるメールを一箇所の MTA でスパム判定ができるようになります。

加えて、ras_reliable.lst に組織外のIPアドレス空間から組織内のMTAを用いてメールを送る際に用いられるSMTP AUTH等のReceive:行に記されるパターンを適宜追記して下さい。

すべての *.lst のフィールドセパレータはタブ以外許可されてませんので注意して下さい。

運用例

例えば procmail で abmail を個人で運用する場合の、~/.procmailrc の例です。コロンのみの行は、適当に省略している事を表しています。

	:
#
# variables for antispam
#
:0
* SW_ANTISPAM ?? ^^^^
{
  SW_ANTISPAM=on
  SW_ANTISPAM_ADD_HEADER=off
  #
  # spam report
  #
  :0
  * !SW_ANTISPAM_ADD_HEADER ?? on
  {
    SW_SPAMREPORT=on
  }
}
#
# antispam
#
:0
* SW_ANTISPAM ?? on
{
  ANTISPAMDIR=spam-`date +%Y%m%d`
  :0 HB
  * ? /opt/local/bin/abmail -b -g -d -v -vvv; test "$?" = "1"
  {
    LOG='(antispam)'
    :0
    * !SW_ANTISPAM_ADD_HEADER ?? on
    ${ANTISPAMDIR}/.
    :0 Efw
    | formail -i "X-Abmail-Flag: Yes"
  }
}
#
# spam report
#
:0
* SW_SPAMREPORT ?? on
{
  SPAMREPORT_SUBJECT="\[abmails report for $LOGNAME\]"
  :0
  *$ ^Subject: Re: ${SPAMREPORT_SUBJECT}
  {
    :0 H
    *$ ^From $LOGNAME
    * ? /opt/local/bin/abmailsreport -Q; test "$?" = "0"
    {
      LOG='(reply abmails report)'
      :0 HBc
      | /opt/local/bin/abmailsreport -r
    }
  }
}
	:

この例では SW_ANTISPAM_ADD_HEADER が off なので、~/Mail/spam-20070515/ のような隔離フォルダにスパム判定されたメールが振り分けられます。SW_ANTISPAM_ADD_HEADER を on にすれば、スパム判定されたメールに X-Abmail-Flag: Yes というヘッダが付加されます。

また、cron 等で abmailsreports を運用している場合、かつ、SW_ANTISPAM_ADD_HEADER が off の場合に、隔離スパム報告及び救済用ツールにて、ユーザ要求による隔離されたメールの再送が安全に行なえます。

その他の運用例については、ケーススタディが参考になると思います。

サービス

株式会社あいはら ではこの迷惑メール対策ツールの導入支援として、「+abmail」迷惑メール対策サービスを提供しています。詳しくはこちらのサイトを御覧下さい。

履歴

(2009/11/19) abmail-1.2.1 リリース
(2008/08/01) abmail-1.2.0 リリース
(2008/03/21) abmail-1.1.9 リリース
(2007/11/15) abmail-1.1.8 リリース
(2007/07/06) abmail-1.1.7 リリース
(2007/06/12) abmail-1.1.6 リリース
(2007/05/17) abmail-1.1.5 リリース
(2007/03/22) abmail-1.1.4 リリース
(2006/11/02) abmail-1.1.3 リリース
(2006/08/08) abmail-1.1.2 リリース
(2006/07/11) abmail-1.1.1 リリース
(2006/06/16) abmail-1.1.0 リリース
(2006/06/04) abmail-1.0.9 リリース
(2006/06/01) abmail-1.0.8 リリース
(2006/05/31) abmail-1.0.7 リリース
(2006/05/26) abmail-1.0.6 リリース
(2006/05/24) abmail-1.0.5 リリース
(2006/05/02) abmail-1.0.4 リリース
(2006/04/30) abmail-1.0.3 リリース
(2006/04/28) abmail-1.0.2 リリース
(2006/04/26) abmail-1.0.0 リリース

COPYRIGHT

Copyright (C) 2006-2008 Taiji Yamada <taiji@aihara.co.jp>