Linux -> サーバ構築 -> Postfix

POSTFIXでバーチャルドメインの構築

LDAPの使用しない場合と使用する場合の2通りで、バーチャルドメインを構築する。
 ・LDAPを使用しない場合LDAPを使用する場合

また、Postfixでバーチャルドメインを実現するにはいくつか方法があるが、
ここでは virtual_alias_maps を使用する方法で構築を行う。

MDA virtual方式でのバーチャルドメインについて

    通常postfix内でのメール転送は、localというMDA(Mail delivery agent)が行う。
    これに対して、バーチャルドメイン用に virtual というMDAがある。
    MDA virtual 方式でのバーチャルドメイン構築方法は、

    main.cf に transport_maps = hash:/etc/postfix/transport を指定し、
    
    transportファイルには以下のように記述する。
           suzuki@tokyo.example.com  virtual
           sasaki@nagoya.example.com virtual

    以上の通り設定し、転送先に virtual を指定すると MDA virtual に転送される。
    他に、メールスプールやスプール用のユーザ等設定が必要な為、
    virtual_alias_map を使用するより設定が複雑である。
今回構築する環境について
OS:           Fedora core 4
MTA:          Postfix 2.2.2
POP3:         Dovecot 0.99.14
Mail形式:     Maildir
ユーザホーム: /home/user
メールホーム: /home/user/Maildir
ドメイン名  : example.com

LDAPを使用しない場合の構築手順

設定するファイルは以下の2ファイルである。
・ /etc/postfix/main.cf virtual_alias_mapsの記述
・ /etc/postfix/virtual 配送先エントリ
/etc/postfix/main.cf
mydestination =  $myhostname, localhost.$mydomain, localhost,
                   $mydomain, tokyo.$mydomain, nagoya.$mydomain ←追加(1行で記述)
virtual_alias_maps = hash:/etc/postfix/virtual
/etc/postfix/virtual
suzuki@tokyo.example.com suzuki@tokyo.example.com suzuki
sasaki@nagoya.exaple.com sasaki@nagoya.exaple.com sasaki
左側に記述しているメールを右側に記述しているメールアドレスに転送する。
この場合同じになっているが、実際のドメイン名は、example.com なので、
バーチャルドメイン nagoya.example.com , tokyo.example.com への転送をする場合、上記の設定が必要となる。

もし、
sasaki@nagoya.exaple.com sasaki とした場合でも転送は可能であるが、
宛先のアドレスが sasaki@example.com になってしまう。

POP3で受信する場合は、アカウント+パスワードのみなのでドメイン部分は意識しない。
メールソフトに設定している通りのメールアドレスに転送する場合はこのような設定が必要となる。
postfixの設定ファイルを再ロードする。
# service postfix reload
このままで起動すると以下のメッセージが出る
/var/log/maillog
fatal: open database /etc/postfix/virtual.db: No such file or directory
以下のコマンドでPostfixが参照する形式に変換する
# postmap /etc/postfix/virtual
   /etc/postfix/virtual.db が作成される。
正しく転送されるか確認する。
コマンドラインで送信確認
# telnet localhost 25   ←25番ポートで接続
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 example.com ESMTP Postfix
helo example   ←ホスト名を入力
250 example.com  ※ここで応答がなければ設定内容に間違いがあるので
                                     /var/log/maillogの内容をチェックする
mail from: suzuki@tokyo.example.com  ←送信元アドレスを入力
250 Ok
rcpt to: sasaki@nagoya.example.com   ←宛先アドレスを入力
250 Ok
data  ←本文入力開始 data コマンドを入力
354 End data with .
subject: suzuki to sasaki  ←タイトルを入力
てすと用
テスト用
.      ←メッセージ内容を入力し最後にピリオド(.)を入力する。

250 Ok: queued as XXXXX
quit ←終了コマンド
221 Bye
Connection closed by foreign host.
コマンドラインで受信確認
# telnet localhost 110  ←110番ポートで接続

      (参考)110番ポート(pop3)がLISTENになっていないと接続できない
       ポートの状態確認コマンド
      # netstat -a | grep pop3
       tcp 0 0 *:pop3 *:* LISTEN

      または

      # lsof -i:pop3
      COMMAND    PID    USER   FD   TYPE DEVICE SIZE NODE NAME
      dovecot   1753    root    5u  IPv6   5193       TCP *:pop3 (LISTEN)
      pop3-logi 1783 dovecot    0u  IPv6   5193       TCP *:pop3 (LISTEN)
      pop3-logi 1784 dovecot    0u  IPv6   5193       TCP *:pop3 (LISTEN)
      pop3-logi 4385 dovecot    0u  IPv6   5193       TCP *:pop3 (LISTEN)

Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK dovecot ready.
USER sasaki   ←USERに続けてユーザ名を入力
+OK
PASS ******   ←PASSにつづけてパスワードを入力
+OK Logged in.
list          ←listコマンドで一覧を表示
+OK 1 messages:
1 561
.
retr 1        ←retr メッセージ番号で、メッセージを表示
+OK 561 octets
Return-Path: 
X-Original-To: sasaki@nagoya.example.com  ←宛先
Delivered-To: sasaki@nagoya.example.com   ←転送先 *postfixのlocal配送先
Received: from example (example.com [127.0.0.1])
        by example.com (Postfix) with SMTP id xxx
        for ; Wed,  1 Feb 2006 10:15:45 +0900 (JST)
subject: suzuki to sasaki
Message-Id: <20060201011545.XXXXXX@example.com>
Date: Wed,  1 Feb 2006 10:15:45 +0900 (JST)
From: suzuki@tokyo.example.com
To: undisclosed-recipients:;
てすと用
テスト用
.
quit
+OK Logging out.
Connection closed by foreign host.
#

LDAPを使用する場合の構築手順

設定するファイルは以下の2ファイルである
・ /etc/postfix/main.cf virtual_alias_maps にldap用の記述
・ /etc/postfix/virtual.cf LDAPデータ取得用ファイル (ファイル名は任意)
/etc/postfix/main.cf
mydestination =  $myhostname, localhost.$mydomain, localhost, $mydomain,
                                                      tokyo.$mydomain, nagoya.$mydomain
virtual_alias_maps = ldap:/etc/postfix/virtual.cf
/etc/postfix/virtual.cf
server_host = localhost
search_base = ou=Users,o=example,o=coml
query_filter = (&(objectClass=posixAccount)(uid=%s))
result_attribute = mail
query_filter に上記のフォーマット形式で条件を設定する。
(&(objectClass=オブジェクトクラス名)(属性=%s *アカウント名 @の左側の部分が入る))
他に検索条件があれば()に追加する。
以上の条件に合ったエントリの 属性:mail が result_attribute として返される。
virtual.cf ファイルを追加したところで、正しくLDAPのデータが取得できるか動作確認を行う。
# postmap -q suzuki ldap:/etc/postfix/virtual.cf
suzuki@tokyo.example.com
#
以上の通り表示されればOK。
suzuki@tokyo.example.com が転送先アドレスとなる。

確認方法は LDAPを使用しない場合と同じである。


先頭へ

      Document-Folder          一覧
HP-UX
HULFT
JAVA
JP1
JavaScript
Linux
MAC
PHP
Perl
Python
Ruby
SOA
Solaris
Unix全般
Windows
XML
エクセル
スタイルシート
セキュリティー
データベース
ネットワーク
パソコン
ブラウザ
プログラム構文
仮想化
          RSS-Folder
ニュース
   アットマーク・アイティ(@IT)
   シンクイット(ThinkIT)
   インターネットコム
   インターネットウォッチ
   日経IT-Pro
   日経パソコン
   CNET Japan
   ZD-NetJapan
   MYCOM
   RBB-Today
ベンダー
   日本IBM
   日本HP
   サンマイクロシステムズ
   NEC
   富士通
   日立
ソフトウェア
   マイクロソフト
   トレンドマイクロ
   オラクル
   サイボウズ
   Mozilla
   野村総合研究所
   (その他ソフトウェア企業)
更新履歴 一覧
 07/08 PERF
プログラム構文
 07/07 PERF
プログラム構文
 06/25 オブジェクトプログラミング2
Perl>サンプル
 07/12 クローン作成
仮想化>vCenter
 07/12 vyatta設定
ネットワーク>vyatta
 07/12 vyattaインストール
ネットワーク>vyatta
 07/12 リポジトリサーバ
Linux>サーバ構築
 07/05 VMwareのインストール
仮想化>VMware
 07/05 PXEブート
仮想化>KVM
 07/01 DHCPでのPXEブート
仮想化>KVM
 06/27 qcow2仮想DISK作成
仮想化>KVM
 06/13 NWの設定
仮想化>VMwareEsxi
 06/13 IPアドレスの変更
仮想化>VMwareEsxi
 06/12 自動ssh
Unix全般>シェル>Bash
 06/12 diffプログラミング
Python
Google