- PR -

sendmailのルールセットについて

1
投稿者投稿内容
A.W
常連さん
会議室デビュー日: 2005/11/08
投稿数: 27
投稿日時: 2007-02-16 11:52

お世話になります。A.Wと申します。

現在、外向けのメールサーバとしてSolaris9にてsendmail8.13.5を使用しています。
spam対策として/etc/mail/access内に、

xxx.xxx.xxx.xxx REJECT
example.com  REJECT

などを記述し、特定のドメインやIPが送信元のメールを弾くように設定しています。
これに加え、sendmail.mcには以下のルールセットを記述し、逆引き不能な送信元や
逆引きができても正引きと食い違う送信元のメールは拒否するようにしています。

LOCAL_RULESETS
SLocal_check_relay
R$* $: $&{client_resolve}
RTEMP $#error $@ 4.7.1 $: "450 Access denied. Cannot resolve PTR record for " $&{client_addr}
RFORGED $#error $@ 4.7.1 $: "450 Access denied. IP name possibly forged " $&{client_name}
RFAIL $#error $@ 4.7.1 $: "450 Access denied. IP name lookup failed " $&{client_name}


ホワイトリストとして/etc/hostsも併用しています。

しかし、この設定では必要なメールも弾いてしまう可能性があるので、
一定の期間、postmaster宛のメールに対してのみ、このルールセットを適用外にし、
手動でspamリストを作成していき、いずれはこのルールセットをはずして
accessデータベースのみでの運用を考えています。


/etc/mail/access内に、

To:postmaster@example.co.jp OK

を記述してみましたが、どうやらルールセットのほうが先に適用されてしまう
ようです。

RCPT TOを先に見に行くよう、check_rcptのルールセットを追加する方法
くらいしか思いつかないのですが、何かよい方法がありましたらご教示
お願いしたいと思い投稿しました。

どうぞよろしくお願いします。

dam
会議室デビュー日: 2004/11/07
投稿数: 13
投稿日時: 2007-02-16 13:27
sendmailでは下記の順番で
アクセス条件を満たしているかチェックしていると
思います。
※ accessを利用する場合

(1) 接続元MTAのIPアドレス(FQDN)
(2) envelope sender
(3) envelope recipient

この、(1)〜(3)のうち、
一回でもREJECTと判定されて
しまうと、そのメールは拒否されます。

ですので、(3)の部分でOKとなるように
単純なルールを追加しても、メールは許可されないのでは
ないでしょうか?

回避するために下記の方法が
思いつきますが、
直にルールを書くと、
sendmailの挙動のいろんな部分に
影響が出てくるのであんまりお勧めしません。
※ まぁ、accessの部分はあまり
ルールセット0に影響しないし、
sendmail -btでルールのデバッグが
十分にできるなら挑戦してみるのも
一興かと思いますけど。

(1)でREJECTにならないようにし、
(3)で接続元MTAのIPアドレス情報と、
envelope recipientの情報で条件分岐させるルールを追加。
条件に適合すればOK,適合しなければREJECTさせる。

商用版のSendmail製品、Mailstream Manager(こんな名前でしたっけ?)
のようにMilterを利用して別プログラムと連携して処理を
させるのが綺麗なやり方かもしれないですね。

お役に立てれば幸いです。
F/A
ぬし
会議室デビュー日: 2006/03/18
投稿数: 312
お住まい・勤務地: Tokyo
投稿日時: 2007-02-17 01:31
delay_checks を使用すると、 RCPT TO次第で
(たとえMail FromがREJECTに該当しても)
拒否したり許可したりするような設定が出来たように思います。

もっとも、私自身もあまり使用した事が無いため、
ローカルルールセットとの優先度や、
設定することでどういった弊害が出るかまでは不明です。

> RCPT TOを先に見に行くよう、check_rcptのルールセットを追加する方法

というのが、delay_checksのことならあまり他に方法は無いかもしれないですね。
dam
会議室デビュー日: 2004/11/07
投稿数: 13
投稿日時: 2007-02-17 03:04
F/Aさん、
delay_checksを使った方法を見つけました。

※ 参考文献
sendmail付属のop.psドキュメントおよび
オライリー本第3版運用編206ページ

m4で下記を有効にする。
FEATURE(`delay_checks', 'friend')
→ check_relay, check_mail, check_rcptの
順番が、check_rcpt, check_mail, check_relayに変わる

access_dbで下記の記述を行なう。
Spam:postmaster@example.co.jp FRIEND
→ check_rcptでFRIENDにマッチするよう
設定されていれば、check_mail, check_relayは
スキップされる。
マッチしなければ、check_mail, check_relayが
実施される

このことですね!

delay_checksは知っていたのですが
friendの引数は知りませんでした。
※ sendmail 8.9以降の機能はあまり知らなくて。

勉強になりました。

check_ 系のルールセットの中だけで
完結しそうですし、
これが一番すっきりかな?

A.Wさん、上記の方法でどうでしょうか?

[ メッセージ編集済み 編集者: dam 編集日時 2007-02-17 03:49 ]
A.W
常連さん
会議室デビュー日: 2005/11/08
投稿数: 27
投稿日時: 2007-02-19 12:28
返信が遅れまして申し訳ありません。
お世話になります。A.Wです。

F/A様、dam様、ご返信ありがとうございます。

delay_checksで引数friendをつけたら解決できそうです。

/usr/lib/mail/README
(source内だとcf/README)

にとても詳しく書いてありますね・・。

# マニュアルよく見ろよ自分・・


お手数おかけしました。たいへん勉強になりました。
このたびはどうもありがとうございました。


[ メッセージ編集済み 編集者: A.W 編集日時 2007-02-20 16:30 ]
1

スキルアップ/キャリアアップ(JOB@IT)