2009年12月26日

[postfix-jp: 3692] Re:外からのメール受信拒否の設定

荻野です。

相変わらずちゃんと確認せずに書いています。すみません。

nakafumi said the following on 09/12/03 13:52:
> /etc/postfix/restricted_recipient:
> -----
> root@ DISCARD

> postmaster@ OK
> -----

先にこちらに突っ込みを入れるべきだったように思えてきました。

postmaster@ OK は外部から自ドメインの postmaster 宛を受信するという意図
だと思いますが、この書き方は外部から他ドメインの postmaster@ 宛を中継し
てしまうように見えます。

自ドメイン宛のものは smtpd_recipient_restrictions の末尾の暗黙の許可に
よって受信できるので OK はそもそも不要のはずです。もし postmaster 宛を拒
否しないということを明示したいのであれば DUNNO を使用すべきかと。

または制限を加えるだけなら reject_unauth_destination の後に書くほうが安
全だと思うので、そちらの方が良いかもしれません。迷惑メール対策とかはほと
んどすべて reject_unauth_destination の後ろで良いように思います。


nakafumi said the following on 09/12/25 10:02:
> 以下の設定から更に、ローカルから外ドメイン宛は要認証としたいのですが、
> permit_mynetworks が先頭にあるため、認証無しで送信できてしまいます。
> これを外すと、ローカルからroot宛てが破棄されてしまいます。
> ローカルからローカル宛は許可、という方法はありますでしょうか。
(略)
>> smtpd_recipient_restrictions =
>> permit_mynetworks
>> check_recipient_access hash:/etc/postfix/restricted_recipient
>> permit_sasl_authenticated
>> reject_unauth_destination

まず DISCARD は脇においておいて拒否の場合を考えます。(個人的には拒否で
良い場合がほとんどだと思いますが)

要件からしてローカルを無条件で書く permit_mynetworks は外さざるを得ませ
ん。すると、hash:/etc/postfix/restricted_recipient に引っかかった場合、
ローカルからは許可したいので、この中身を

root@xxxxx permit_mynetworks,reject

とすれば良さそうです。ここで @example.com はご自身のドメインです。これが
無いと他のドメインの root@ に出せないからです。

しかし、permit_sasl_authenticated を先にして良いなら root@ のままで構い
ません。この場合、外部から認証済ユーザがローカルの root@ に出せるという
ように挙動が変わります。(通常は問題ないと思いますが…)

main.cf:

smtpd_recipient_restrictions =
permit_sasl_authenticated
reject_unauth_destination
check_recipient_access hash:/etc/postfix/restricted_recipient

/etc/postfix/restricted_recipient:

root@ permit_mynetworks,reject

となります。(多分…)


DISCARD など smtpd_recipient_restrictions に書けるもの以外を指定したい場
合、私の知識ではとたんに複雑になってしまいます。多分、先に main.cf で
smtpd_restriction_classes を定義して代わりに書くしかないと思います。この
場合、「外部」を hash で定義するのは難しそうなので、例えば cidr を使いま
す。(postconf -m で cidr のサポートを確認のこと)でなければ regexp と
か。(なお regexp で外部全部を指定するのは // だけで良いはず)

main.cf:

# permit_mynetworks_or_discard を宣言?しておく
smtpd_restriction_classes = permit_mynetworks_or_discard

# permit_mynetworks_or_discard とは client IP を cidr テーブルで引く
permit_mynetworks_or_discard =
check_client_access cidr:/path/to/permit_mynet_or_discard.cidr

smtpd_recipient_restrictions =
permit_sasl_authenticated # 認証済ユーザはすべて許可
reject_unauth_destination # 自ドメイン宛でなければ拒否
# 宛先で restricted_recipient をチェック
check_recipient_access hash:/path/to/restricted_recipient
# ここに暗黙の許可(自ドメイン宛で restricted_recipient に無い)

/path/to/restricted_recipient

# root@ 宛なら permit_mynetworks_or_discard に従う
root@ permit_mynetworks_or_discard


/path/to/permit_mynet_or_discard.cidr:

# client IP が mynetworks 相当に OK を出す
127.0.0.0/8 OK
192.168.0.0/16 OK
::1/128 OK (IPv6 サポートがある場合)
fe80::/10 OK (IPv6 サポートがある場合の例)
# その他のアドレスはすべて DISCARD
0.0.0.0/0 DISCARD
::/0 DISCARD (IPv6 サポートがある場合)


でいけそうに思います。

が、書いてて何度も間違いに気がついたので、ご自身でも確認の上、テストして
ください。つっこみ歓迎します。

--
荻野 充 (おぎの みつる) ... 「萩(はぎ)」にあらず
Key fingerprint = 7F26 5414 1805 F31B 1617 10B7 C117 07AE 1691 9BD1

_______________________________________________
Postfix-jp-list mailing list
Postfix-jp-list@xxxxx
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list


投稿者 xml-rpc : 2009年12月26日 00:02
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/91708
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。