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 コマンドを 使ってください。
注意: このスキーマはユーザ認証をしないため、いくつかの方法で回避できて しまいます:
より制限の緩やかなメールリレーホストを通してメールを送ることによって。
サイト外の配送先へのメール送信が許された誰かとしてメールを送る ことによって。