Postfixでバーチャル運営
Postfixの設定にバーチャルを適用することにより
複数のドメインでメールの送受信が行う事が出来るようになる。
この編ではPostfixが先ず正常に動作していることが大前提である。
当方のメールサーバのシステムはSMTPーAUTH認証によるものである。
この編ではSMTP-AUTHの設定は割愛致します。
機会があれば別スレを立てますのでそちらで御願いします。
■設定を触るファイルは以下のファイル
/etc/postfix/main.cf
/etc/postfix/virtual
/etc/postfix/sender_canonical
▼main.cfの設定
#vi /etc/postfix/main.cf
最下部に
### Virtual による送受信の設定 ###
virtual_alias_maps = hash:/etc/postfix/virtual
sender_canonical_maps = hash:/etc/postfix/sender_canonical
等とバーチャルでの送受信の際の参照先を追加する。
:wq
Postfixが参照するファイルは後述するが
virtual.db
sender_canonical.db
になる予定。
■送信側の設定
sender_canonicalファイルはデフォルトでcanonicalというファイルが用意されているようだ。
自分でわかりやすくするために新規に作成しました。
このファイルに「実在ユーザー 対応するバーチャルドメインユーザー」
という書式で列挙していく。
「実在するunixユーザ 送信するアドレス」の形でも良い。
これによって実在ユーザーで送信したメールの送信者のアドレスが、
バーチャルドメインのユーザーに書き換えられるとのこと…
実在ユーザ = user
対応するバーチャルドメインのユーザ = ***@***.com
とする。
#vi /etc/postfix/sender_canonical
user ***@***.com
と追加してみた。
postmapコマンドを用いハッシュデータベースを作成し設定を反映させる。
#postmap /etc/postfix/sender_canonical
#service postfix restart
先ほど、main.cfで
sender_canonical_maps = hash:/etc/postfix/sender_canonical
としたが「hash:」をつけて「hash:/etc/postfix/sender_canonical」と指定した場合
「/etc/postfix/sender_canonical.db」が参照されるためmain.cf内の
「hash:/etc/postfix/sender_canonical」には拡張子である「.db」を付す必要はない。
■受信側の設定
受信側の設定もまた「/etc/postfix/virtual」で「/etc/postfix/sender_canonical」
で設定したように
記述していくわけだがフォーマットは「受信するメールアドレス 実在するunixユーザ」と記述していく。
#vi /etc/postfix/virtual
***.com anything
***@***.com user:wq
この場合の「***.com anything」はドメイン名を付す。
postmapコマンドを使い設定を反映させる。
#postmap /etc/postfix/virtual
「virtual.db」が作成されたかどうか確認。
#ls /etc/postfix/virtual.db
出来ている。
#service postfix restart
postfixを再起動。
■ここからが結構はまった…
さてここで先ほど設定したバーチャルで送受信をLAN内部・外部ともへいろいろ送受信してみる。
出来ているぞ…
さて、ログの確認を…
#cat /var/log/maillog
#do not list bbb.com in BOTH mydestination and virtual_alias_domains
??何かダブって記述したのか??
「mydestination と virtual_alias_domains の両方にbbb.com ドメインを記述してはいけない」
と直訳すればそうだが…
# postconf -n
としてpostfixの設定ファイルを今一度確認する。
mydestination = $myhostname, localhost.$mydomain, $mydomain, aaa.net, bbb.com
↓
mydestination = $myhostname, localhost.$mydomain, $mydomain
こうしなくてはいけないのかな?
バーチャルで運用する場合mydestinationには認識したいドメインを列挙していくはずだったが…
■結果
この判断で良かった。
これに加えもう一点ある。
myhostnameとmydomainを同じ名前にしていたことも原因だったのかもしれない。
この直前にDNSサーバを構築したので
myhostname = aaa.net を myhostname = mail.aaa.net
としてやった。
myhostname と mydomain を同じにした場合は
mydestination と virtual_alias_domains に同じドメインを
指定したことになるので恐らくこのエラーを吐いたのではないかと推測。
現在はエラー無くして正常に稼働中である。