check_uri.plというプログラムは、メール本文から、RBLに spamとして登録されているURIが含まれていると、`X-URIRBL: Yes' というヘッダを追加し、メールクライアントでフィルタリングするためのツールです。 *1
このプログラムは、maildropやprocmail といった、ローカルのメールボックスに落とす直前、このプログラムを挟むことによって使用する構成例ありましたが、MXとして使用したい場合の構成例が有りませんでした。
そこで、Postfix の master.cf に記述し、MXとしてでも利用出来るような方法を考えてみて、設置してみたところ、上手く動かすことが出来ました。
いくつか、動作については理解しておかないといけないところがありますが、基本的な物については、 Postfix キューに入った後のコンテンツフィルタを読んでおけば大丈夫です。また、併せて、 smtp(8) ,pipe(8) ,当たりも読んでおきましょう。
Postfix キューに入った後のコンテンツフィルタ: 単純なコンテンツフィルタの例にあるフィルタを通すシェルスクリプトを少々書き換え、次のようにおこないました。
/usr/local/sbin/check_filter.sh ----- 24 # Specify your content filter here. 25 /usr/local/sbin/check_uri.pl <in.$$ >out.$$ || { 26 echo Message content rejected; exit $EX_UNAVAILABLE; } 27 28 $SENDMAIL "$@" <out.$$
後は、15行も適切に処理をして下さい。
あとは、master.cf を適切に書き換えれば取りあえずは動作します。
smtp inet n - n - - smtpd -o content_filter=filter:dummy filter unix - n n - 30 pipe flags=Rq user=nobody argv=/usr/local/sbin/check_filter.sh -f ${sender} -- ${recipient}
今回、テストのためにnobodyというユーザを使用しましたが、専用のユーザを作成し、おこなうと良いでしょう。
動作に問題がないと思ったら、maillog を tail しながら、postfix reload で反映、最終動作テストを行って下さい。
もし、ファイルのパーミッション等に問題があると次のようなメッセージが表示されるでしょう。
Dec 9 04:05:47 ns0 postfix/pipe[5559]: 121375C12458: to=<XXXX>, relay=filter, delay=0.11, delays=0.09/0/0/0.01, dsn=4.3.0, status=deferred (temporary failure. Command output: /usr/local/sbin/check_filter.sh: line 21: in.23578: Permission denied Cannot save mail to file )
-
その他参考になるかもしれないサイト。
- Integrating SpamAssassin into Postfix using spamd
- (旧製品)メールフィルタ for postfix の設定
- Postfix キューに入った後のコンテンツフィルタ: 単純なコンテンツフィルタの例
注意:
このcheck_uri.pl にも弱点があり、サーバのログメールなどに、RBLに登録されているURI/FQDN(アクセスログなど)が含まれると、`X-URIRBL: Yes' となり、spam判定されてしまう可能性があるため、ホワイトリスト等を上手く利用する方法が必要です。