Postfix
クライアント/サーバ/他ごとのアクセス制御Postfix SMTP サーバは SMTP サーバ access(5) テーブルの右側部分で reject_rbl_client や reject_unknown_client_hostname といったアクセス制限をサポートしています。これによりクライアントやユーザ ごとに異なるジャンクメール制限を実装することができるようになります。
全ての受信者にアクセス制限のリストを指定していると、すぐに退屈に なってしまいます。Postfix制限クラスによってUCE制限のグループに ("permissive" や "restrictive" などのような) 覚えやすい名前を付ける ことが出来るようになります。
Postfix制限クラスが存在する本来の理由はもっと現実的なものです: Postfix access テーブルの右側部分には検索テーブルを指定することが 出来ません。これはPostfixが前もって検索テーブルを開く必要があるため ですが、読者はこのような低レベルな詳細はおそらく気にしません。
例:
/etc/postfix/main.cf:
smtpd_restriction_classes = restrictive, permissive
# With Postfix < 2.3 specify reject_unknown_client.
restrictive = reject_unknown_sender_domain reject_unknown_client_hostname ...
permissive = permit
smtpd_recipient_restrictions =
permit_mynetworks
reject_unauth_destination
check_recipient_access hash:/etc/postfix/recipient_access
/etc/postfix/recipient_access:
joe@my.domain permissive
jane@my.domain restrictive
これを使うと、クライアントや helo、送信者、受信者ごとの SMTPD access テーブルの右側部分で "restrictive" や "permissive" が使えます。
このドキュメントの残りの部分ではPostfix access 制限クラスの使われ方を 説明しています:
これらの質問は頻繁に上がっていますが、Postfix制限クラスが本当に正しい 解ではないということを、この例によって明らかにすることを願っています。 これらは設計の意図通りに使われるべきであり、クライアントやユーザごとに 異なるジャンクメール制限を使うべきです。
内部Eメール配布リストを実装しようと思います。all@our.domain.com のような もので、これは従業員全てに対するエイリアスです。最初は aliases マップを 使おうと思ったのですが、"all" が "外部" からアクセスできるようになって しまうので、これは望ましくありません... :-)
Postfixはアドレスごとの access 制御を実装しています。以下のものは SMTP クライアント IP アドレスを元にしており、そのため IP スプーフィングの 影響を受けます。
/etc/postfix/main.cf:
smtpd_recipient_restrictions =
check_recipient_access hash:/etc/postfix/access
...the usual stuff...
/etc/postfix/access:
all@my.domain permit_mynetworks,reject
all@my.hostname permit_mynetworks,reject
システムが db ファイルの代わりに dbm を使っているので あれば、hash の代わりに dbm を指定してください。Postfixが サポートしているマップの形式を知るには、postconf -m コマンドを 使ってください。
さて、あなたのマシンが全てのインターネットメールをインターネットから 直接受信する場合にはこれで十分です。ネットワークがオフィスよりも少し 大きければ不幸です。例えば、バックアップ MX ホストは外部からのメールの クライアント IP アドレスを "わからなく" してしまうので、メールは信頼された マシンから来ているように見えてしまいます。
一般的な場合、2つの検索テーブルを使う必要があります: 1つは保護が必要な 配送先をリストアップしたテーブルで、もう1つは保護された配送先への送信が 許されるドメインをリストアップしたテーブルです。
以下は送信者の SMTP エンベロープアドレスに基づくものなので、SMTP 送信者の なりすましの影響を受けます。
/etc/postfix/main.cf:
smtpd_recipient_restrictions =
check_recipient_access hash:/etc/postfix/protected_destinations
...the usual stuff...
smtpd_restriction_classes = insiders_only
insiders_only = check_sender_access hash:/etc/postfix/insiders, reject
/etc/postfix/protected_destinations:
all@my.domain insiders_only
all@my.hostname insiders_only
/etc/postfix/insiders:
my.domain OK matches my.domain and subdomains
another.domain OK matches another.domain and subdomains
SMTP 送信者アドレスをなりすませばよいだけなので、このスキームを回避 するのは比較的簡単です。
内部リストが小規模であれば、おそらくモデレートする方が意味が あるでしょう。
あるユーザはインターネットにメールを送信できて、それ以外は出来ない ようにするには、Postfixをどのように設定すればよいのでしょうか。 アクセスできないユーザは一般的なバウンスメッセージを受け取るように します。そのようなアクセス制限が必要かどうかは議論しないでください、 私の決定ではないので。
Postfixはユーザごとの制限をサポートしています。制限は SMTP サーバに よって実装されています。つまり、ポリシーを破ったユーザは SMTP サーバに よってメールを拒否されます。このように:
554 <user@remote>: Access denied
これを実装するには2つの検索テーブルを使います。1つはメールの送信先が 制限されたユーザを定義したテーブルで、もう1つはどの配送先がローカルかを 定義したテーブルです。これをあるユーザだけがサイト外の配送先にメールを 送信できて、ほとんどのユーザが制限されるというスキーマに変更するのは、 読者の宿題にします。
例では DB/DBM ファイルを想定していますが、LDAP や SQL でもできます。
/etc/postfix/main.cf:
smtpd_recipient_restrictions =
check_sender_access hash:/etc/postfix/restricted_senders
...other stuff...
smtpd_restriction_classes = local_only
local_only =
check_recipient_access hash:/etc/postfix/local_domains, reject
/etc/postfix/restricted_senders:
foo@domain local_only
bar@domain local_only
/etc/postfix/local_domains:
this.domain OK matches this.domain and subdomains
that.domain OK matches that.domain and subdomains
システムが db ファイルの代わりに dbm を使っているので あれば、hash の代わりに dbm を指定してください。Postfixが サポートしているマップの形式を知るには、postconf -m コマンドを 使ってください。
注意: このスキーマはユーザ認証をしないため、いくつかの方法で回避できて しまいます:
より制限の緩やかなメールリレーホストを通してメールを送ることによって。
サイト外の配送先へのメール送信が許された誰かとしてメールを送る ことによって。