メールサーバの構築_Postfixの設定

弊社製Postfixパッケージ(postfix-2.1.5-5sp)へのアップデートに伴うメールサーバの動作不具合に関する経緯と対処方法について。
2007年2月6日(火)に弊社にてSuitePROの仕様にカスタマイズを施した Postfix(パッケージ名:postfix-2.1.5-5sp)をリリース致しました。このRPMパッケージは毎日午前中に実行される自動アップデー ト機能により配信されるため、多くのお客様の仮想専用サーバにおきまして2月7日(水)にリリースしたバージョン(2.1.5-5sp)へのアップデートが行われました。 このアップデート終了後より、メールサー バが動作しなくなったとのお問い合わせを頂いており、弊社にてこの問題について調査と対処を行っております。 Postfixが正常に動作していない状態を確認した仮想専用サー バにつきましてはお客様ごとに状況に合わせ個別対応を実施させていただいておりますが、現在までに確認された事例と対応方法をお知らせいたします。メールの送信・配送が動作していない場合、 以下の方法で問題が解決する場合がございますのでご参照ください。

設定する内容

SuitePROの仮想専用サーバには初期状態で「Postfix」というメールサーバプログラムがインストールされています。 ほかに「sendmail」というメールサーバプログラムもインストールされていますが、 このマニュアルでは設定が比較的容易なPostfixを使用する方法を掲載しています。 メールサーバを構築する場合はPostfixの設定を行ってください。

このマニュアルでは、例として以下のようなご利用形態を前提として記述しております。 メールサーバに設定する内容はお客様のご利用形態によって変わりますが、 オンラインマニュアルに記載されていない設定については弊社のサポート対象外となりますので、 この例と異なるご利用形態でお使いになる場合はPostfixの設定方法について解説されている書籍・Webサイトなどをご参考に お客様にて設定ファイルの内容を書き換えてご利用ください。

  • 仮想専用サーバ上に example.com というアドレスのメールサーバを構築する。
  • メールサーバのセキュリティ対策としてSMTP認証を使えるように設定し、メール送信用のSMTPサーバとして使用できるようにする。
  • POP3およびIMAP4でメールが受信できるようにする。
  • 「example.com」というドメイン名で仮想専用サーバにアクセスするためのDNSの設定と「******@example.com」あてのメールを仮想専用サーバに配送するためのDNSの設定は完了している。

Postfixの設定手順

Postfixの設定手順は以下の通りです。

  1. サーバーにSSHで接続し、rootアカウントを使用してログインします。
  2. デフォルトの状態ではsendmailを使用する設定になっているため、Postfixを使用する設定に切り替える必要があります。 切り替えは「system-switch-mail」というコマンドを使用して行います。以下のコマンドを実行してください。
    [root@localhost ~]# system-switch-mail
    
    表示された画面でカーソルキーを使用して「Postfix」を選択し、Enterキーを押して下さい。
    「MTA 設定の更新は成功しました。」というメッセージが表示されれば切り替えは完了です。
  3. viなどのテキストエディタで /etc/postfix/main.cf ファイルを開いて下さい。
    viで /etc/postfix/main.cf ファイルを開くコマンドは以下の通りです。
    [root@localhost ~]# vi /etc/postfix/main.cf
    

    main.cfファイルには多くの設定項目が書かれていますが、 ここでは最低限設定しておいた方がよいと思われる項目をご案内致します。

    myhostnameの項目とmydomainの項目にはこのホストのホスト名とドメイン名を設定します。 ここではexample.comというドメイン名で使用しますので、両方とも example.com を設定します。

    # INTERNET HOST AND DOMAIN NAMES
    #
    # The myhostname parameter specifies the internet hostname of this
    # mail system. The default is to use the fully-qualified domain name
    # from gethostname(). $myhostname is used as a default value for many
    # other configuration parameters.
    #
    #myhostname = host.domain.tld
    #myhostname = virtual.domain.tld
    myhostname = example.com
    
    # The mydomain parameter specifies the local internet domain name.
    # The default is to use $myhostname minus the first component.
    # $mydomain is used as a default value for many other configuration
    # parameters.
    #
    #mydomain = domain.tld
    mydomain = example.com
    

    inet_interfacesの項目には利用するインタフェースを設定します。 仮想専用サーバの仕様上、この項目には「all」という値を設定する必要があります。 「inet_interfaces = all」の行頭に書かれている # を外してこの行を有効にして下さい。 さらに「inet_interfaces = localhost」の行頭に # を付けてこの行を無効にして下さい。

    # The inet_interfaces parameter specifies the network ...
    # addresses that this mail system receives mail on. ...
    # the software claims all active interfaces on the ...
    # parameter also controls delivery of mail to user@[ip.address].
    #
    # See also the proxy_interfaces parameter, for network ...
    # are forwarded to us via a proxy or network address translator.
    #
    # Note: you need to stop/start Postfix when this parameter ...
    #
    inet_interfaces = all  (←行頭にある # を削除)
    #inet_interfaces = $myhostname
    #inet_interfaces = $myhostname, localhost
    #inet_interfaces = localhost
    
    表示の都合上ここでは長いコメントが書かれている行を一部省略して記載しています。
    さらにメール送信用サーバとして使用できるようにするため、SMTP認証の設定を追加します。 main.cfファイルの末尾に以下の3行を追加して下さい。
    
    smtpd_sasl_auth_enable = yes
    broken_sasl_auth_clients = yes
    smtpd_recipient_restrictions = permit_sasl_authenticated, 
                                 reject_unauth_destination
    
    
    3行目~4行目は表示の都合上改行してありますが、実際は「permit_sasl_authenticated, 」の後に「reject_unauth_destination」を続けて記述して下さい。
    書き換えが終了したらファイルを保存してテキストエディタを終了して下さい。 これで基本設定は完了ですが、CRAM-MD5方式でSMTP認証の認証を行いたい場合は 管理者アカウント・ユーザアカウントのパスワードとは別に CRAM-MD5認証用のアカウントとパスワードを作成する必要があります。 以下のコマンドを実行してCRAM-MD5認証用のアカウントとパスワードを作成して下さい。
    CRAM-MD5認証用のアカウント・パスワードはSSH・FTP・POP3・IMAP4の認証時に参照される情報とは別に管理されます。
    [root@localhost ~]# saslpasswd2 -u (ホスト名) (アカウント名)
    Password:(パスワード)
    Again (for verification):(パスワード)
    
    たとえばお客様のホスト名が「example.com」で、「nttpc」というCRAM-MD5認証用のアカウントを作成する場合は以下のコマンドを実行します。
    [root@localhost ~]# saslpasswd2 -u example.com nttpc
    Password:(nttpcのCRAM-MD5用パスワード)
    Again (for verification):(nttpcのCRAM-MD5用パスワード)
    
    複数のCRAM-MD5認証用アカウントを作成したい場合は作成するアカウントの個数分繰り返して実行して下さい。
    さらに作成した認証用アカウントの情報をpostfixが参照できるように、以下のコマンドを実行します。
    [root@localhost ~]# chown postfix /etc/sasldb2
    
  4. 以下のコマンドを実行し、Postfixとメール送信時の認証に使うsaslauthdを起動してください。
    [root@localhost ~]# service postfix start
    [root@localhost ~]# service saslauthd start
    

自動起動の設定

上記の手順に従い、system-switch-mailコマンドを実行してPostfixを使用する設定を行うとPostfixはOS起動時に自動起動するように設定されます。 saslauthdについては自動起動の設定は行われませんので、コントロールパネルから設定を行って下さい。

OSの再起動と同時にsaslauthdを自動起動したい場合はコントロールパネルの「仮想専用サーバの起動/停止」メニューから 「サービス自動起動設定」を選択し、 saslauthdのチェックを「on」に変更して「サービス自動起動設定の変更」をクリックして下さい。

なお、Postfixの自動起動設定を変更したい場合は同じ設定画面のpostfixの項目で変更することが出来ます。

system-switch-mailコマンドでPostfixを使用する設定に切り替えていない場合「サービス自動起動設定」の画面にpostfixの項目が表示されません。

エイリアス設定

「info」や「support」など、いくつかのよく使われるアカウント名や システムが使用するアカウント名については初期状態でエイリアス設定が行われており、 そのアカウント宛てのメールは別のアカウントのメールボックスに転送されるようになっています。 初期状態でエイリアス設定が行われているアカウント名は以下の通りです。

abuse adm amanda apache bin canna daemon dbus decode desktop dovecot dumper fax ftp-adm ftp-admin ftp ftpadm ftpadmin games gdm gopher halt hostmaster ident info ingres ldap lp mail mailer-daemon mailman-owner mailman mailnull manager marketing mysql named netdump news newsadm newsadmin nfsnobody nobody noc nscd ntp nut operator pcap postfix postgres postmaster privoxy pvm quagga radiusd radvd rpc rpcuser rpm sales security shutdown smmsp squid sshd support sync system toor usenet uucp vcsa webalizer webmaster wnn www xfs

このままの状態では info@(ドメイン名) 宛てのメールが「info」のメールボックスに配送されないため、「info」を通常のメールアカウントとして使用することが出来ません。 通常のメールアカウントとして使用する場合はエイリアス設定を変更して転送を停止してください。

エイリアス設定を変更する手順は以下の通りです。

  1. viなどのテキストエディタで /etc/aliases ファイルを開いて下さい。 viで /etc/aliases ファイルを開くコマンドは以下の通りです。
    [root@localhost ~]# vi /etc/aliases
    
  2. (転送元アカウント名): (転送先アカウント名) という形式で1行につき1つのエイリアス設定が書かれています。 行頭に「#」が書いてある行はコメント行とみなされ無効になりますので、エイリアス設定による転送を停止したい場合は行頭に「#」を付けてください。
    たとえば、アカウント「info」のエイリアス設定を無効にする場合は以下のように「info: postmaster」行の行頭に「#」を記述します。
    #info:          postmaster
    

    書き換えが終了したらファイルを保存してテキストエディタを終了して下さい。
  3. 以下のコマンドを実行し、書き換えた内容を有効にして下さい。
    [root@localhost ~]# newaliases
    

    上記の設定を行った後、通常のメールアカウントと同様にメールの送受信が行えることをご確認ください。

バーチャルドメイン設定

Postfixのバーチャルドメイン機能を使用すると、1つの仮想専用サーバ上でドメイン名が異なる複数のメールサーバを運用することが出来ます。

Postfixの設定を行う前にネームサーバで複数のドメインを使用するための設定を行っておく必要がありますので、あらかじめ bindの設定 - バーチャルドメイン設定 に記載されているバーチャルドメインの設定を行っておいて下さい。

以降の説明は、例として以下のようなご利用形態を前提として記述しています。

  • このページのPostfixの設定手順 に記載されている設定が完了しており、example.com というドメイン名のメールサーバとして使用することは出来る状態になっている。
  • ******@mail.example.com というメールアドレス宛てのメールをこの仮想専用サーバ(example.com)に配送するためのネームサーバ設定は完了している。

[ ドメインごとにユーザを区別しない設定 ]

異なるドメインでもユーザ名が同じ宛先のメールは同一のアカウントのメールボックスに配送される設定です。 例えば example.com と mail.example.com を使用できるように設定した場合、 nttpc@example.com と nttpc@mail.example.com のどちらにメールを送信してもアカウント「nttpc」のメールボックスにメールが配送されるようになります。

この場合の設定手順は以下の通りです。

  1. サーバーにSSHで接続し、rootアカウントを使用してログインします。
  2. viなどのテキストエディタで /etc/postfix/main.cf ファイルを開いて下さい。
    viで /etc/postfix/main.cf ファイルを開くコマンドは以下の通りです。
    [root@localhost ~]# vi /etc/postfix/main.cf
    

    mydestinationの項目に追加するドメイン名を設定します。 ここではmail.example.comというドメイン名を追加しますので、すでに存在する行の末尾に「,」(カンマ)で区切って mail.example.com を追加します。
    # The mydestination parameter specifies the list of domains that this
    # machine considers itself the final destination for.
    #
    #   ・
    #   ・
    #(中略)
    #   ・
    #   ・
    #
    # See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS".
    #
    mydestination = $myhostname, localhost.$mydomain, localhost, mail.example.com
    #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
    #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
    #       mail.$mydomain, www.$mydomain, ftp.$mydomain
    

    書き換えが終了したらファイルを保存してテキストエディタを終了して下さい。
  3. 以下のコマンドを実行し、書き換えた内容を有効にして下さい。
    [root@localhost ~]# service postfix reload
    
  4. 使用しているアカウント宛てにメールを送信し、どちらのドメインのメールアドレスに送ってもメールが受信できることを確認して下さい。 例えば、「nttpc」というユーザアカウントをメールの受信に使用している場合 nttpc@example.com と nttpc@mail.example.com に1通ずつメールを送信し、 「nttpc」のメールボックスに両方のメールが届けばバーチャルドメインが正しく動作していることを確認出来ます。

[ ドメインごとにユーザを区別する設定 ]

宛先のアドレスごとに配送されるメールボックスを個別に指定することが出来る設定です。 例えば example.com と mail.example.com を使用できるように設定した場合、 nttpc@example.com 宛てのメールと nttpc@mail.example.com 宛てのメールが配送されるメールボックス(アカウント)を個別に指定することが出来ます。

この場合の設定手順は以下の通りです。

  1. サーバーにSSHで接続し、rootアカウントを使用してログインします。
  2. viなどのテキストエディタで /etc/postfix/main.cf ファイルを開いて下さい。
    viで /etc/postfix/main.cf ファイルを開くコマンドは以下の通りです。
    [root@localhost ~]# vi /etc/postfix/main.cf
    

    ファイルの末尾に以下の2行を追加します。 「virtual_alias_domains」の行に追加するドメイン名を記述して下さい。 ここではmail.example.comというドメイン名を追加しますので、「=」の右側に mail.example.com を記述しています。
    追加したいドメイン名が複数ある場合は「,」(カンマ)で区切って複数のアドレスを記述して下さい。
    
    virtual_alias_domains = mail.example.com
    virtual_alias_maps = hash:/etc/postfix/virtual
    
    

    書き換えが終了したらファイルを保存してテキストエディタを終了して下さい。
  3. viなどのテキストエディタで /etc/postfix/virtual ファイルを開いて下さい。 viで /etc/postfix/virtual ファイルを開くコマンドは以下の通りです。
    [root@localhost ~]# vi /etc/postfix/virtual
    

    このファイルには、「このメールアドレスに来たメールをこのアカウントのメールボックスに配送する」という設定を記述します。 ファイルの末尾に以下の形式で設定を記述して下さい。
    (メールアドレス) (アカウント)
    

    複数の設定を記述する場合は1行につき1つの設定を記述します。例えば nttpc@example.com 宛てのメールはユーザアカウント「user1」のメールボックスに、 nttpc@mail.example.com 宛てのメールはユーザアカウント「user2」のメールボックスに配送するように設定する場合は 以下のように記述して下さい。
    
    nttpc@example.com user1
    nttpc@mail.example.com user2
    
    
  4. 以下のコマンドを実行し、書き換えた内容を有効にして下さい。
    [root@localhost ~]# postmap /etc/postfix/virtual
    [root@localhost ~]# service postfix reload
    
  5. 設定したメールアドレス宛てにメールを送信し、それぞれ設定したアカウントのメールボックスから受信できることを確認して下さい。 上記の例のように設定した場合、ユーザアカウント「user1」で受信した時に nttpc@example.com 宛てのメール、 ユーザアカウント「user2」で受信した時に nttpc@mail.example.com 宛てのメールが受信出来ればバーチャルドメインが正しく動作していることを確認出来ます。

Submissionポート設定

SPAMメール対策でOP25B(任意のホストのTCP25番ポートへの接続がブロックされる仕組み)を実施しているプロバイダから接続する場合、 標準設定のままではSuitePROの仮想専用サーバを送信用SMTPサーバとして使用できない場合があります。 このような場合はSubmissionポートの設定を行うことで回避することが出来ます。

PostfixでSubmissionポートを使用する設定の手順は以下の通りです。

  1. viなどのテキストエディタで /etc/postfix/master.cf ファイルを開いて下さい。
    viで /etc/postfix/master.cf ファイルを開くコマンドは以下の通りです。
    [root@localhost ~]# vi /etc/postfix/master.cf
    
  2. master.cfファイルの編集を行います。 最初にインストールされたPostfixのバージョンによってmaster.cfの内容が異なりますので、現在の状態に応じて編集を行ってください。
    ・バージョン2.1.5-5のmaster.cfの場合
    
    # ==========================================================================
    # service type  private unpriv  chroot  wakeup  maxproc command + args
    #               (yes)   (yes)   (yes)   (never) (100)
    # ==========================================================================
    smtp      inet  n       -       n       -       -       smtpd
    #smtps    inet  n       -       n       -       -       smtpd
    #  -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
    #submission   inet    n       -       n       -       -       smtpd
    #  -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes -o smtpd_etrn_restrictions=reject
    
    

    上記の部分のうち末尾2行を以下のように変更します。
    
    submission   inet    n       -       n       -       -       smtpd
    -o smtpd_sasl_auth_enable=yes -o smtpd_etrn_restrictions=reject
    
    

    ・バージョン2.1.5-5spのmaster.cfの場合
    # ==========================================================================
    # service type  private unpriv  chroot  wakeup  maxproc command + args
    #               (yes)   (yes)   (yes)   (never) (100)
    # ==========================================================================
    smtp      inet  n       -       n       -       -       smtpd
    #submission inet n      -       n       -       -       smtpd
    #       -o smtpd_etrn_restrictions=reject
    #smtps    inet  n       -       n       -       -       smtpd
    #  -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
    #submission   inet    n       -       n       -       -       smtpd
    #  -o smtpd_etrn_restrictions=reject
    #  -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes
    

    上記の部分のうち末尾3行を以下のように変更します。
    
    submission   inet    n       -       n       -       -       smtpd
    -o smtpd_etrn_restrictions=reject
    -o smtpd_sasl_auth_enable=yes
    
    
    どちらのバージョンも「-o」の前に書かれている半角スペースは必要な記述のため削除しないでください。削除すると正常に動作しなくなります。

    書き換えが終了したらファイルを保存してテキストエディタを終了して下さい。
  3. 以下のコマンドを実行し、書き換えた内容を有効にして下さい。
    [root@localhost ~]# service postfix reload
    

    上記の設定を行った後、メールソフトの接続先SMTPポート番号を587番に変更してメールの送信が行えることをご確認ください。