Postfixでマルチドメイン・バーチャルドメインって?

  • マルチドメインとは、1つのサーバ(1つのIP)で複数のドメインを管理するもので、
    たとえば sea-bird.org と hogehoge.co.jp(例です!) などを管理するものです。
    ググってみるとこのマルチドメインという言葉とバーチャルドメインという言葉が混在しており
    私は意味が判りません(笑)
  • まあ同じ意味として扱うとして、要するに1つのグローバルIPベースで複数のドメインを束ね
    管理できるというもので話を進めます。ここで困るのがシングルドメインで管理している場合は、
    Linuxのアカウント管理ベース(/etc/passwd)で行うことができたのがマルチドメインにした場合は、
    この管理方法ができないという点です。何故なら下記のように同一のアカウント@ドメイン・・・ね。困るでしょ。
    hoge@sea-bird.org
    hoge@hogehoge.co.jp
  • これをPostfixではバーチャルドメインとして処理できるように対処がされています。

Postfixでマルチドメイン・バーチャルドメインを設定

  • 私は、マルチドメインのテスト用に window-shop.biz というドメインを取得してます。
    下記の例は、その設定方法です。
注意!!!
メインである sea-bird.org ドメインは、バーチャルドメインの配信対象ではありません。
そのため virtual_mailbox_domains には、バーチャルドメインの記述のみをすること。
あえて記述しても問題はないけど、/var/log/maillogに警告が下記のように出力されます。
warning: do not list domain sea-bird.org in BOTH mydestination and virtual_mailbox_domains
  • /etc/postfix/main.cf 以下の定義値を追加する(最終行に追加)。
    ※くどいようだけど必ずバックアップファイルを作成してから作業すること。
    #
    # virtual-domain
    #
    # バーチャルドメインにはvirtualデーモンを用いる
    virtual_transport = virtual
    # メールボックスを保存するベースディレクトリ
    virtual_mailbox_base = /home/mailuser
    # メールの振り分け先を定義するmailbox_mapsファイルの指定
    virtual_mailbox_maps = hash:/etc/postfix/vmailbox
    # バーチャルドメインの定義
    virtual_mailbox_domains = window-shop.biz
    # 配送されるメールの最小UID
    virtual_minimum_uid = 20000
    # 配送されるメールのUID
    virtual_uid_maps = static:20000
    # 配送されるメールのGID
    virtual_gid_maps = static:20000
    
    # ローカル配送にはlocalデーモンを用いる
    local_transport = local
    # ローカル配送ではOSのアカウントや$alias_mapsを利用する
    local_recipient_maps = unix:passwd.byname $alias_maps
    
    # 中継は、バーチャルドメインも許す
    relay_domains = $mydestination, $virtual_alias_domains
  • Postfix を再起動する前に以下の作業をしておく。
    • バーチャルドメインに対するメールは、/home/mailuser以下に保存されます。
      main.cfの中にもある通り、uid/gid を 20000 にした mailuserアカウントが事前に必要です。
      # /usr/sbin/groupadd -g 20000 mailuser
      # /usr/sbin/useradd -g 20000 -u 20000 mailuser
    • /etc/postfix/vmailbox に、受け取るべきアカウントとドメイン、配送先を記述(羅列)する。
      hoge@window-shop.biz        window-shop.biz/hoge/Maildir/
      • hash を作成します。この作業を行わないと上記で記述した内容が反映されません。
        # /usr/sbin/postmap /etc/postfix/vmailbox
  • ここまできたら Postfix を再起動します。
    # /etc/rc.d/init.d/postfix restart
  • 動作テストをしてみましょ
    # telnet localhost 25
    Trying 127.0.0.1...
    Connected to localhost.localdomain (127.0.0.1).
    Escape character is '^]'.
    220 ns.sea-bird.org ESMTP sendmail 0
    helo sea-bird.org
    250 ns.sea-bird.org
    mail from: hoge@sea-bird.org
    250 Ok
    rcpt to: hoge@window-shop.biz
    250 Ok
    data
    354 End data with <CR><LF>.<CR><LF>
    this is test.
    .
    250 Ok: queued as 5C98F1342D9
    quit
    221 Bye
    Connection closed by foreign host.
  • 上記の結果を /var/log/maillog にて確認します。
    Feb 20 14:16:42 ns postfix/smtpd[26696]: connect from ns[127.0.0.1]
    Feb 20 14:17:13 ns postfix/smtpd[26696]: 08CEC1342DD: client=ns[127.0.0.1]
    Feb 20 14:17:20 ns postfix/cleanup[26698]: 08CEC1342DD: message-id=<20050220051659.08CEC1342DD@ns.sea-bird.org>
    Feb 20 14:17:20 ns postfix/qmgr[26694]: 08CEC1342DD: from=<hoge@sea-bird.org>, size=352, nrcpt=1 (queue active)
    Feb 20 14:17:20 ns postfix/virtual[26699]: 08CEC1342DD: to=<hoge@window-shop.biz>, relay=virtual, delay=21,status=sent (delivered to maildir)
    Feb 20 14:17:20 ns postfix/qmgr[26694]: 08CEC1342DD: removed
  • /home/mailuserディレクトリ以下に、/home/mailuser/window-shop.bizというディレクトリが作成されていれば成功です。

日々の運用について

  • メインドメインの方は、ローカルのpasswdベースでの認証となり、バーチャルドメインの方は
    /etc/postfix/vmailboxにアカウントを記述(手作業)していくことになります。
    • /etc/postfix/vmailbox に、受け取るべきアカウントとドメイン、配送先を記述(羅列)する。
      hoge@window-shop.biz        window-shop.biz/hoge/Maildir/
      • hash を作成します。この作業を行わないと上記で記述した内容が反映されません。
        # /usr/sbin/postmap /etc/postfix/vmailbox
      • Postfixに vmailbox.db ファイルを再読み込みするように指示します。
        # /etc/rc.d/init.d/postfix reload
  • 商業運用ベースでは、手作業で運用なんて到底できないので、バーチャルドメインの記述部分を
    データベース化たりて対応しているんでしょうなあ。。きっと(笑。

参考にさせて頂いたサイト様


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-30 (水) 15:29:33