2010/06/26

Postfix でバーチャルユーザを混在させる方法 (補足3)

直前のエントリの補足です。

実ドメイン運用して、fallback_transport = virtual したとします。
この設定をして、virtual ユーザにメールが送れないよー、となっちゃった方々へ。

まぁ、普通にやっただけだと、
550 User unknown in local recipient table
って言われちゃいますよねー。
# メールサーバにログインして、mail コマンドで送ったら大丈夫だったけれど
# 他の環境から送ったら、このエラーで送れなかったのです。。。

Postfix は、知らないローカル受信者宛のメールを自動で拒否してしまうのでした。
つまり、fallback_transport を指定している場合、これで処理されるユーザを教えてあげなければなりません。
その問題と解決策が、マニュアル文書に書いてあります。

Postfix で知らないローカルユーザを拒否する
http://www.postfix-jp.info/trans-2.3/jhtml/LOCAL_RECIPIENT_README.html

---
main.cf の local_recipient_maps 設定を変更する必要がある場合

      問題: 非 UNIX アカウントにメールを配送するために Postfix local(8) 配送エージェントの mailbox_transport または fallback_transport 機能を使っています。

      解決策: 非 UNIX ユーザをリストアップしたデータベースを追加する必要が あります:

      /etc/postfix/main.cf
          local_recipient_maps = proxy:unix:passwd.byname, $alias_maps,
              <the database with non-UNIX accounts>

      テーブルの作り方に関する記述は、以下の "ローカル受信者テーブルのフォーマット" の セクションを参照してください。
---

というわけで、local_recipient_maps の設定が必要なわけです。
ここにデータベースを追加するわけですが、実ドメインのバーチャルメールボックスユーザは、virtual_mailbox_maps に指定したデータベースに書いていたわけです。
なので、このデータベースを指定すれば OK です。

main.cf:
local_recipient_maps = proxy:unix:passwd.byname, $alias_maps, $virtual_mailbox_maps

この設定で、無事、バーチャルユーザが弾かれることなく、メールが届くようになります。

付属ドキュメントは、ちゃんと読みましょう・・・ > σ(__;



■ バーチャルユーザ混在、まとめ (ただし、実ドメインとしての運用の場合のみ)
実ユーザとバーチャルユーザを混在させる場合、以下のような設定を行う。

実ドメインとして運用する場合、ローカルにユーザが存在しない場合、fallback_transport を使用し、virtual に fallback するように設定する。
ただし、550 User unknown in local recipient table のエラーで弾かれないように、local_recipient_maps にてバーチャルユーザデータベースを指定する。
あとは、virtual mailboxと同じように設定すればよい。

main.cf:
mydestination = example.net, ...
fallback_transport = virtual:

local_recipient_maps = proxy:unix:passwd.byname, $alias_maps, $virtual_mailbox_maps
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/usr/local/etc/postfix/vmailbox

vmailbox:
vusr@example.net   example.net/vusr/

2010/06/24

Postfix でバーチャルユーザを混在させる方法 (補足2)

直前のエントリの補足です。

結局、実ドメインとして運用するようにしてみました。
たぶん、この方が楽だと思うので。

実ドメインとして運用すると、当該ドメイン宛のメールの配送には、local(8) エージェントが使われます。
local(8) は、aliases データベースと UNIX パスワードデータベースを検索し、ローカルにユーザが存在する場合は、そのままローカル配送します。

肝になるのは、ローカルにユーザが存在しない場合です。
この場合、local(8) が頑張って探してもユーザが見つからなかった場合、fallback_transport_maps の指定、なければ、fallback_transport の指定に従って配送してくれます。
このパラメータを設定することにします。

今回は、バーチャルメールボックスユーザとするため、virtual(8) で配送してもらいます。
そのため、fallback_transport パラメータを設定しました。

main.cf:
fallback_transport = virtual:

これで、あとは、

virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/usr/local/etc/postfix/vmailbox
virtual_alias_maps = hash:/usr/local/etc/postfix/virtual


この辺の指定に従って、配送してくれます。






バーチャルメールボックスドメインとして運用する場合は、たぶん、これと逆のことをやればいいはずです。
つまり、何よりも早く配送方法を指定できるように、transport_maps パラメータを設定し、ローカルユーザ宛の配送方法を決定すればいいでしょう。


main.cf:
transport_maps = hash:/usr/local/etc/postfix/transport


transport:
luser@example.net  local:$myhostname
・・・


と言った形になります。






virtual(8) で配送させると、aliases データベースも検索してくれないし、.forward 等の処理もできないんだよなぁ。。。
利用したかったら、力業しかないのかなぁ。。。

Postfix でバーチャルユーザを混在させる方法 (補足)

直前のエントリの補足です。


■ ドメインを実ドメインとして運用する場合
転送用に指定するバーチャルメールボックスドメインは、名前解決できなければなりません。
ですので、DNS に登録するなど、工夫が必要となるでしょう。

■ ドメインをバーチャルメールボックスドメインとして運用する場合
main.cf にて指定している myorigin パラメータが、mydestination パラメータに指定されていることが要求されます。
しかしながら、myorigin = $mydomain として、virtual_mailbox_domains = $mydomain, ... としてしまった場合、ローカルユーザに配送するには、virtual_alias_maps で指定したファイルにて、以下のように指定します。

virtual:
luser@example.net  luser@localhost

このように、強制的にローカルを指定して配送させます。

しかしながら。。。
この方法でローカルユーザにマップすると、ローカルのユーザに届くメールのヘッダには、

Delivered-To: luser@localhost.example.net
X-Original-To: luser@localhost.example.net

と記録されてしまって、とても哀しいことに。。。


対策を模索中です。
*_transport_maps の指定で、どうにかできそうな予感。。。

2010/06/23

Postfix でバーチャルユーザを混在させる方法

タイトルだけだと、よくわからないかもしれませんね。。。

Postfix であるドメインを運用するときに、
一部のユーザは、システムにアカウントを持つ実ユーザ (UNIX アカウント持ちユーザ)
他のユーザは、システムアカウントを持たないユーザ (バーチャルユーザ)
とする方法です。


方法は、二つほどあるようです。


■ 実ドメインとして運用する場合
運用ドメインを、実ドメイン (基本的にローカルにユーザを作成してそこに配送させるドメイン) として運用する場合の方法です。

具体的な作戦は、以下の通りです。
・運用ドメインは、実ドメインとして設定
・バーチャルメールボックス用のドメインを用意
・バーチャルユーザとしたいメールアドレスは、バーチャルメールボックスドメインへ転送するように設定

main.cf にて、運用ドメインを、mydestination パラメータに設定します。

main.cf:
mydestination = example.net, ...

そして、バーチャルユーザ用に、バーチャル用ドメインをバーチャルメールボックスドメインとして設定します。

main.cf:
virtual_mailbox_domains = example.net.vmbox, ...
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/usr/local/etc/postfix/vmailbox
virtual_alias_maps = hash:/usr/local/etc/postfix/virtual

そして、バーチャルユーザは、バーチャルメールボックスドメインへ転送するように設定します。

virtual:
vusr@example.net vusr@example.net.vmbox

最後に、バーチャルメールボックス用の配送先を設定します。

vmailbox:
vusr@example.net.vmbox example.net.vmbox/vusr/


■ バーチャルメールボックスドメインとして運用する場合
運用ドメインを、バーチャルメールボックスドメイン (ローカルにはユーザを作らずバーチャルメールボックスに配送するドメイン) として運用する場合の方法です。

具体的な作戦は、以下の通りです。

・運用ドメインは、バーチャルメールボックスドメインとして設定
・ローカルユーザとしたいメールアドレスは、ローカルユーザに転送するように設定

main.cf にて、運用ドメインを、virtual_mailbox_domains パラメータに設定します。


main.cf:
virtual_mailbox_domains = example.net, ...

virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/usr/local/etc/postfix/vmailbox

virtual_alias_maps = hash:/usr/local/etc/postfix/virtual



そして、ローカルユーザは、ローカルユーザに転送するように設定します。

virtual:
lusr@example.net lusr



Postfix のマニュアル的には、バーチャルメールボックスドメインとして運用して、ローカルユーザへ転送する方法を推奨しているようです。