Postfix SMTP サーバは SMTP サーバ access(5) テーブルの右側部分で reject_rbl_client や reject_unknown_client といったアクセス制限をサポートしています。これによりクライアントやユーザ ごとに異なるジャンクメール制限を実装することができるようになります。
全ての受信者にアクセス制限のリストを指定していると、すぐに退屈に なってしまいます。Postfix 制限クラスによって UCE 制限のグループに ("permissive" や "restrictive" などのような) 覚えやすい名前を付ける ことが出来るようになります。
Postfix 制限クラスが存在する本来の理由はもっと現実的なものです: Postfix access テーブルの右側部分には検索テーブルを指定することが 出来ません。これは Postfix が前もって検索テーブルを開く必要があるため ですが、読者はこのような低レベルな詳細はおそらく気にしません。
例:
/etc/postfix/main.cf: smtpd_restriction_classes = restrictive, permissive restrictive = reject_unknown_sender_domain reject_unknown_client ... permissive = permit smtpd_recipient_restrictions = permit_mynetworks reject_unauth_destination 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 = 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 = 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 コマンドを 使ってください。
注意: このスキーマはユーザ認証をしないため、いくつかの方法で回避できて しまいます:
より制限の緩やかなメールリレーホストを通してメールを送ることによって。
サイト外の配送先へのメール送信が許された誰かとしてメールを送る ことによって。