abmail - abuse mail filter
形式
abmail [-t] [-b|-a] [-g [-r]] [-d] [-v|-v-|-vv] [-vvv] [-vvvv] [-D] [--sm-client[=sm_pathname]] [-M-] [-MM[-]] [-P-] < mail; test $? = 1 && echo "abmail"
abmail [..] [+|- mail|mhdir|maildir [...]]
abmail [..] --sm-server[=sm_pathname]|--sm-delete[=sm_pathname]
abmail [..] --am-daemon=server_host|--am-dbfile=path_to.bdb
オプション
- -b
- バウンスメールの元メールも併せてスパムかどうか判定する。
- -a
- バウンスメールの元メールのみからスパムかどうか判定する。
- -g
- 貪欲(greedy)モードでスパム判定する。
- -r
- 貪欲モードにて、送信元IPアドレスの逆引き不能を改めて逆引き問い合わせする。
- -d
- DNSブラックリストを利用してスパム判定する。
- -v
- スパムであると判定された理由を出力する。
- -v-
- スパムでないと判定された理由を出力する。
- -vv
- 判定の理由を出力する。
- -vvv
- 判定の理由を出力する際に、詳細情報を付加する。
- -vvvv
- 常に判定材料の詳細情報を出力する。
- -D
- ホワイト&ブラックリストに矛盾が無いか確認する。
- --sm-server[=sm_pathname]
- 設定管理サーバとして起動する。詳しくは「セキュリティ」の項を必読。
- --sm-delete[=sm_pathname]
- 設定管理サーバを消去する。
- --sm-client[=sm_pathname]
- 設定管理クライアントとして動作させる。
- -M-
- DNSブラックリストへの問い合わせにおけるマルチスレッドを抑止する。
- -MM[-]
- 複数のメールメッセージの判定においてマルチスレッドを有効にする[無効にする]。(experimental)
- -P-
- 逆引き問い合わせ(「-r」オプションやrss_reliable.lstでの逆引き補完)の際のパラノイド検査を抑制する。
- -t
- To:ヘッダが存在するにも関わらずその内容が無いメールをスパムとみなす。(obsolete)
- +|- mail|mhdir|maildir [...]
- 標準入力ではなくメールファイル、または、MH形式, Maildir形式のディレクトリについて、「+」の場合はスパムと判定されたメールメッセージのファイル名、「-」の場合はスパムでないと判定されたメールメッセージのファイル名を表示します。
- --am-daemon=server_host (libexecでビルドしたabmailのみ)
- RPC abaddrd デーモンを起動しているサーバホスト名を指定します。既定値 NULL や空文字の場合、RPC は経由せずに、直接データベースファイルと読み書きします。
- --am-dbfile=path_to.bdb (libexecでビルドしたabmailのみ)
- RPC は経由せずに、直接データベースファイルと読み書きする際に、そのデータベースファイルを指定します。既定値は ./abaddr.bdb です。
戻り値
abmail は標準入力からのメールメッセージについてスパム判定を行い、スパムであれば戻り値「1」を、スパムでなければそれ以外を返します。
標準入力ではなく「+」または「-」オプションでファイルやディレクトリ指定をした場合の戻り値は、最後に処理をしたメールメッセージの判定結果を返します。
「--sm-server」または「--sm-delete」オプションの場合、正常終了であれば戻り値「0」を、そうでなければそれ以外を返します。
説明
abmail はメールメッセージの本文を走査せず、ヘッダ情報からスパム判定をします。バウンスメールの元メールがスパムかどうか判定する際も、添付されたメールメッセージのヘッダ情報を走査してスパム判定をします。
以下、説明の為に「10.0.0.0/8」がスパム送信者のIPアドレス空間、「172.16.0.0/12」がメールサーバが設置されている自ドメインexample.comのIPアドレス空間とします。
貪欲モードではない通常モードの場合、送信者がEHLO/HELOを詐称しているかどうかをスパム判定の判断材料とします。例えばローカル配送のReceived:ヘッダを除き、始めに現れる信頼すべきReceived:ヘッダが以下のようなものであった場合はスパムであると判定されます。
Received: from mailhost.example.com (unknown [10.0.0.1])
by mailhost.example.com (Postfix) with SMTP
スパム送信者のEHLO/HELOには詐称やその他の特徴がありますのでそれを検知します。この通常モードでのスパム判定率はスパム全体の2〜3割程度とは言え、誤判定がまずあり得ない判定モードとして利用価値があります。但し、自ドメインのメーラ等が mailhost.example.com 等を名乗るのを許可するために、必ず、ソースコードのビルド時に自ドメインのアドレス空間を指定する事を忘れないようにして下さい。
オプション
「-d」オプションで、cbl.abuseat.org のような DNS ベースのブラックリストを利用したスパム判定を行います。これによりスパム判定率がスパム全体の1割程度向上します。当然のことながら、ブラックリストに登録されているところから送られてくる正当なメールもスパムと判定されてしまいますが、信頼性の高い DNS ブラックリストを採用していますので誤判定はほとんどなく、自前のブラックリスト管理コストが軽減できます。
「-g」オプションで、貪欲モードでスパム判定を行います。ローカル配送のReceived:ヘッダを除き、始めに現れる信頼すべきReceived:ヘッダが以下のようなものであった場合はスパムであると判定されます。
Received: from localhost.localdomain (10-0-0-1.example.net [10.0.0.1])
by mailhost.example.com (Postfix) with SMTP
つまり、送信者IPアドレスの逆引きから正当なメールサーバではないエンドユーザーアドレス空間であることを推測してスパム判定を行います。これはS25R(Selective SMTP Rejection)方式の中で用いられているエンドユーザアドレス空間推定とほぼ同じです。よって、そのままではスパムでないものをスパムとしてしまう偽陽性の誤判定(false positive)があり得ますので、後述するホワイトリストのメンテナンスが必須となります。この貪欲モードでのスパム判定率は9割以上になります。
また、貪欲モードでは、MTAがメールを受信した時点で送信者のIPアドレスの逆引きが出来ない場合もスパムであると判定されます。
Received: from localhost.localdomain (unknown [10.0.0.1])
by mailhost.example.com (Postfix) with SMTP
しかし、これはDNSに高負荷が掛かっている場合など、正当なメールサーバから送信されたメールでも極めて稀ですが起こりうる現象です。この誤判定を救済する為に「-r」オプションにより、改めてDNSの逆引きを試みた上でスパム判定を行います。あくまでこれは、スパムとして隔離されたメールを改めて再検査する際に有用な機能です。よって、この「-r」オプションを常用するのではなく、逆引き不能が頻繁なドメインについてはそのアドレス空間をホワイトリストに登録することをお勧めします。
「-b」オプションにより、以上の判定方法をMAILER-DAEMONから受信したバウンスメールに添付されている差し戻されたメッセージに適用します。これにより、詐称アドレス宛バウンス(backscatter)メールをスパム判定することが出来ます。スパム判定ルールは普通のメールと同様な設定が継承されますが、普通のメールにてこれといった判定材料が無かった場合にはスパムと判定しないことに対して、バウンスメールに関してはスパムと判定します。但し、適切に元メールを添付しないMTAからのバウンスの場合、やはり適切に判定する事ができず、困った事にそういったMTAは少なからず存在します。
設定ファイル
昨今のスパムはエンドユーザアドレス空間のPCが乗っ取られ、そこから直接MTAへメールを送りつけてくるものがスパム全体の5〜6割ほどを占めています。正当なメールサーバのIPアドレス空間と、こういった不当に使用されているIPアドレス空間とを区別する為にホワイトリスト・ブラックリストの設定・管理が必要になりますが、その手間を軽減するのがS25R(Selective SMTP Rejection)方式の中で用いられているエンドユーザアドレス空間推定と言えます。
エンドユーザアドレス空間推定は有用な一方で、それだけでは適切な偽陰性、偽陽性の対処が面倒であるという問題、正当なMTA経由のスパムが判定できない、偽のバウンスには無力である等の問題があります。特に、偽陽性の誤判定が起こらないように設定・管理を行う必要がありますが、柔軟な abmail の枠組はそれを極めて容易にします。そして、設定が熟れてればその管理コストは極めて低くなります。
以下が設定ファイルです。
- ams_trusted.lst
- アドレス空間のホワイトリスト … 通常用いられませんが、ビルド時に指定した自ドメイン以外に自ドメインが存在する場合にここにそれを記載します。ここに載っているアドレスはEHLO/HELOにて自ドメイン名を名乗る事が許可されます。
但し、dracd による POP before SMTP 認証をサポートしたビルドをした際、及び、貪欲モードではない通常モードの場合は効果を持ちませんので注意して下さい(1.2.0 より常に効果をもつようになりました)。
- ams_reliable.lst
- アドレス空間のホワイトリスト … rns_unreliable.lst にマッチしてしまう正当な MTA からの偽陽性のメールがあった場合、そのIPアドレス空間ごと許可したい場合にここに載せます。
- ams_unreliable.lst
- アドレス空間のブラックリスト … rns_unreliable.lst にマッチしない不正な MTA から偽陰性のメールがあった場合、そのIPアドレス空間ごと拒否したい場合にここに載せます。
- rns_reliable.lst
- ドメイン名のホワイトリスト … rns_unreliable.lst にマッチしてしまう正当な MTA からの偽陽性のメールがあった場合、そのドメイン名で許可したい場合に正規表現でここに載せます。逆引き不能な場合には効力がありませんので、ams_reliable.lst に whois, jwhois, gwhois 等で調べたIPアドレス空間を載せることを推奨します。
- rns_unreliable.lst
- ドメイン名のブラックリスト … スパムの巣窟となるドメイン名のパターンを記したリストです。不正な MTA から偽陰性のメールがあった場合、そのドメイン名で拒否したい場合に正規表現でここに載せます。
- rhs_unreliable.lst
- EHLO/HELO名のブラックリスト … 自ドメイン以外のMTAのEHLO/HELOが名乗る不正なパターンを正規表現で記します。よってここには、自ドメイン名、自ドメインのIPアドレス空間、その他、スパム送信者の特徴的なEHLO/HELOが記載されています。
- rfs_reliable.lst
- ローカル配送パターンのリスト … ローカル配送と見なせるReceived:行のパターンを記載します。これにマッチするReceived:行は信頼できるものとして検査対象から除外し、次のReceived:行を検査します。これを応用すると、ML 等の他ドメインの MTA からのスパムをリモート判定することが可能となります。
- ras_reliable.lst
- 認証済み配送パターンのリスト … SMTP AUTH 等の認証済み配送であるReceived:行のパターンを記載します。これにマッチするReceived:行は信頼できるものとして、許可されたアドレスからのMTA配送であると判断し、スパムではないと判定します。
- rss_reliable.lst
- 各種MTA対応のためのリスト … Postfix以外のMTAにおけるReceived:形式をPostfix形式のReceived:形式へ変換するためのリストです。また、逆引きを行なわないMTAのために逆引きを補完する命令を備えます。
これらすべてのフィールドセパレータは「タブ」以外許可していませんので注意して下さい。また、レコードセパレータは「改行」です。
これらの設定ファイルは、abmailコマンドが存在するディレクトリ、$HOME/.abmailディレクトリ、インストール時の$PREFIX/etc/abmailディレクトリからそれぞれひとつだけ読み込まれます。
これらの設定ファイルから読み込まれ前処理が完了したメモリイメージは、設定管理サーバオプション「--sm-server=[sm_pathname]」により各プロセスで共有する事が可能です。さらに、設定管理クライアントとなる各プロセスでは前処理が不要になるので、スパム判定処理がおよそ2/3の時間で完了するようになります。これを利用するには、設定管理クライアントオプション「--sm-client=[sm_pathname]」を指定して下さい。ちなみに、設定管理サーバを削除するには、設定管理サーバ削除オプション「--sm-delete=[sm_pathname]」を指定して下さい。
設定管理サーバの判定能力(-b -g -d -rオプション等)は、設定管理クライアントで指定される可能性のある判定能力(-b -g -d -rオプション等)を以下のように包括する必要があります。
# abmail -b -g -d -r --sm-server
libexecでビルドしたabmailについては、ams_trusted.lst, ams_reliable.lst, ams_unreliable.lst よりも abaddrc/abaddrd が管理するアドレスレンジデータベース abaddrd.bdb の内容が優先されます。
セキュリティ
abmail はセキュアコーディングを努めておりますが、利用環境によってセキュリティ上の脅威となる可能性があります。例えば、設定管理サーバが作成した共有メモリもしくは共有ファイルを、ローカルに居る悪意ある者により書き換えられてしまう状況がそれに当たります。
共有メモリの所有権は、設定管理サーバを起動したユーザとグループの所有権を継承します。よって、設定管理サーバを起動するユーザとグループに注意して下さい。
また、ビルド時にCFLAGS等でDISABLE_SHMを定義した場合には、共有メモリの代わりに共有ファイルが使用されます。その共有ファイルの既定値は「/var/tmp/abmail.abmail」ですが、このままでは、ローカルに悪意ある者が居る場合、(シンボリックリンク攻撃には配慮してありますが)共有ファイル作成後の改竄によるセキュリティ上の脅威があり得ます。そうした事が懸念される利用環境では、必ず共有ファイルのパスを所有者のみが書き込み可能なディレクトリに指定して下さい。例えば「/opt/local/var/abmail」という所有者のみが書き込み可能なディレクトリを作成し、設定管理サーバは「--sm-server=/opt/local/var/abmail/abmail」で起動し、設定管理クライアントは「--sm-client=/opt/local/var/abmail/abmail」を指定します。
もしくは、共有ファイルの利用を各アカウント内に制限し、速度向上のみを狙うといった用法も考えられます。その際は、例えば、設定管理サーバは各人が「--sm-server=$HOME/tmp/abmail.abmail」で起動し、設定管理クライアントは「--sm-client=$HOME/tmp/abmail.abmail」を指定します。
COPYRIGHT
Copyright (C) 2006-2008 Taiji Yamada <taiji@aihara.co.jp>