Postfixバーチャルメールボックス運用HowTo

# Postfix Virtual Domain Hosting Howto
postfixのバーチャルメールボックスの使い方を紹介

[http://www.postfix.org/VIRTUAL_README.html](Postfix Virtual Domain Hosting Howto)

## mydestination
**As simple as can be: shared domains, UNIX system accounts**

- 特徴 
 - mydestination（受信アドレス）にドメインを追加する
 - ローカル配送にUNIXシステムアカウントのメールボックスを使用する

- /etc/postfix/main.cf

```
 mydestination = $myhostname localhost.$mydomain ... example.com
```

- 制限事項
 - 配送の振り分けができない（info@my.host.name宛のメールはinfo@example.com宛のメールと同じUNIXシステムアカウントに配送される）
 - ユーザ数が多くなると管理が不便になる 

## virtual_alias_domains
**Postfix virtual ALIAS example: separate domains, UNIX system accounts**

- 特徴
 - 仮想エイリアスドメインは全てUNIXシステムアカウントやリモートアドレスにaliasされる
 - ローカル配送にUNIXシステムアカウントのメールボックスを使用する

- /etc/postfix/main.cf

```
virtual_alias_domains = example.com ...他のホスティングドメイン...
virtual_alias_maps = hash:/etc/postfix/virtual
```
- virtual_alias_domainsでexample.comが仮想エイリアスドメインであることを伝える
 - この設定を忘れると配送拒否(relay access denied)されてしまう
 - mydestinationのドメインとvirtual_alias_domainsのドメインは重複しないようにする

- /etc/postfix/virtual

```
postmaster@example.com postmaster
info@example.com       joe
sales@example.com      jane
# catch-allアドレスを実装するには以下のエントリのコメントを外します。
# @example.com         jim
...他のドメイン用のバーチャルエイリアス...
```

- postmaster@example.com宛のメールはローカルのpostmasterへaliasされる
- info@example.com宛のメールはUNIXシステムアカウントのjoeへaliasされる
- ales@example.com宛のメールはUNIXシステムアカウントのjaneへaliasされる
- example.comのそれ以外のメールアドレスは「User unknown」というエラーメッセージで拒否される

- /etc/postfix/virtual 設定反映

```
# postmap /etc/postfix/virtual
```

- /etc/postfix/main.cf 設定反映

```
# postfix reload
```

- 制約事項
 - 仮想アドレスはそれぞれUNIXシステムアカウントにaliasされる
 - 仮想アドレスを増やすためには、UNIXシステムアカウントも増やす必要がある


## virtual_mailbox_domains
**Postfix virtual MAILBOX example: separate domains, non-UNIX accounts**

- 特徴
 - 仮想メールボックスの所有者はUNIXシステムアカウントを持つ必要がない

- /etc/postfix/main.cf

```
virtual_mailbox_domains = example.com ...他のホスティングドメイン...
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = hash:/etc/postfix/virtual
```

- virtual_mailbox_domainsでexample.comが仮想メールボックスドメインであることを伝える
 - この設定を忘れると配送拒否(relay access denied)されてしまう
 - mydestination, virtual_alias_domainsドメインとvirtual_mailbox_domainsのドメインは重複しないようにする
- virtual_mailbox_baseに仮想メールボックスのパス名のを指定する
- virtual_mailbox_mapsに仮想メールアドレスでインデックス化されたメールボックスパス名を持つテーブルを指定する
- virtual_uid_maps, virtual_gid_mapsでメールボックスの権限を持つuid、gidを定義する
- virtual_alias_mapsとvirtual_mailbox_domainsを混合することもできる
 - postmaster@example.com宛のメールをローカルのpostmasterにaliasしている
 - 外部メールアドレス向けにaliasする時も同じ仕組みを利用する

- /etc/postfix/vmailbox

```
info@example.com    example.com/info
sales@example.com   example.com/sales/
# catch-allアドレスを実装するには以下のエントリのコメントを外します。
# @example.com      example.com/catchall
...他のドメインのバーチャルメールボックス...
```

- info@example.com宛のメールは/var/mail/vhosts/example.com/info配下のMaildirに保存される
- sales@example.com宛のメールは/var/mail/vhosts/example.com/sales配下のMaildirに保存される

- /etc/postfix/virtual

```
postmaster@example.com postmaster
```

- この書式はmyoriginがmydestinationに含まれていることを前提としている
 - そうでない場合は、右側部分のドメイン名に明示的にドメイン名も指定する  

### Dovecot連携
MUAでバーチャルメールボックスのメール受信できるようにするためには、dovecot連携が必要になる


### メール転送
virtual_mailbox_domainsを使用する場合、aliasや.forwardでメール転送を実装できない。（UNIXアカウントが存在しないため）


- Dovecto Sieve
- mailfilter