Postfixの設定

設定する内容

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

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

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

Postfixの設定手順

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

1.ログイン

サーバーにSSHで接続し、rootアカウントを使用してログインします。

2.viなどのテキストエディタで /etc/postfix/main.cf ファイルを開いて下さい。

viで /etc/postfix/main.cf ファイルを開くコマンドは以下の通りです。

[root@localhost ~]# vi /etc/postfix/main.cf
main.cfファイルには多くの設定項目が書かれていますが、以下では最低限設定しておいた方がよいと思われる項目をご案内致します。
  1. 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
    
  2. inet_interfacesの項目には利用するインタフェースを設定します。
    VPSの仕様上、この項目には「all」という値を設定する必要があります。 「inet_interfaces = all」の行頭に書かれている # を外してこの行を有効にして下さい。 さらに「inet_interfaces = localhost」の行頭に # を付けてこの行を無効にして下さい。
    # The inet_interfaces parameter specifies the network interface
    # addresses that this mail system receives mail on.  By default,
    # the software claims all active interfaces on the machine. The
    # parameter also controls delivery of mail to user@[ip.address].
    #
    # See also the proxy_interfaces parameter, for network addresses that
    # are forwarded to us via a proxy or network address translator.
    #
    # Note: you need to stop/start Postfix when this parameter changes.
    #
    inet_interfaces = all  (←行頭にある # を削除)
    #inet_interfaces = $myhostname
    #inet_interfaces = $myhostname, localhost
    #inet_interfaces = localhost
    
  3. 現時点ではIPv6に未対応のため、以下の設定を行います。
    # Enable IPv4, and IPv6 if supported
    #inet_protocols = all
    inet_protocols = ipv4
    
  4. また、スプールをMaildir形式にする指定を行います。
    # "Maildir/" for qmail-style delivery (the / is required).
    #
    #home_mailbox = Mailbox
    home_mailbox = Maildir/(←行頭にある # を削除する)
    
  5. さらにメール送信用サーバーとして使用できるようにするため、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」を続けて記述して下さい。
    書き換えが終了したらファイルを保存してテキストエディタを終了して下さい。
  6. これで基本設定は完了ですが、CRAM-MD5方式でSMTP認証を行いたい場合は、別途設定が必要になります。
    viなどのテキストエディタで /etc/sasl2/smtpd.conf ファイルを開いて下さい。
    viで /etc/sasl2/smtpd.conf ファイルを開くコマンドは以下の通りです。
    [root@localhost ~]# vi /etc/sasl2/smtpd.conf
  7. パラメータを追記します。
    pwcheck_method: saslauthd
    mech_list: plain login cram-md5(←パラメータを追記)
    CRAM-MD5認証用のアカウント・パスワードはSSH・FTP・POP3・IMAP4の認証時に参照される情報とは別に管理されるため、管理者アカウント・ユーザアカウントのパスワードとは別にCRAM-MD5認証用のアカウントとパスワードを作成する必要があります。
  8. 以下のコマンドを実行してCRAM-MD5認証用のアカウントとパスワードを作成して下さい。
    [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

3.以下のコマンドを実行し、Postfixとメール送信時の認証に使うsaslauthdを起動して下さい。

[root@localhost ~]# service postfix start
[root@localhost ~]# service saslauthd start

自動起動の設定

OSの再起動と同時にpostfix や saslauthdを自動起動したい場合は、chkconfig でpostfix や saslauthd をon に設定して下さい。
chkconfig の設定方法は、オンラインマニュアル内サービスの自動起動設定に掲載しておりますのでご参照下さい。

エイリアス設定

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

abuse adm amanda apache bin canna daemon dbus desktop dovecot dumper fax ftp ftpadm ftp-adm ftpadmin ftp-admin games gdm gopher halt hostmaster ident info ingres ldap lp mail mailnull manager marketing mysql named netdump news newsadm newsadmin nfsnobody nobody noc nscd ntp nut operator pcap postfix postgres 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つのVPS上でドメイン名が異なる複数のメールサーバーを運用することが出来ます。

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

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

  • このページのPostfixの設定手順に記載されている設定が完了しており、example.com というドメイン名のメールサーバーとして使用することは出来る状態になっている。
  • ******@mail.example.com というメールアドレス宛てのメールをこのVPS(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
    なお、この状態ですと、メールログ(/var/log/maillog)に「BOTH virtual_alias_domains and relay_domains」というwarningが出るため、以下設定を末尾に記述して頂くことをお勧めいたします。
    
    parent_domain_matches_subdomains = debug_peer_list,
                                       fast_flush_domains,
                                       mynetworks,
                                       permit_mx_backup_networks,
                                       qmqpd_authorized_clients,
                                       smtpd_access_maps

    CentOS 6のpostfixでは、初期状態で「parent_domain_matches_subdomains」ディレクティブにパラメータdebug_peer_list、fast_flush_domains、mynetworks、permit_mx_backup_networks、qmqpd_authorized_clients、 relay_domains、smtpd_access_mapsが設定されております。
    オンラインマニュアル通りにバーチャルドメインにサブドメインをご利用の場合、設定ファイル /etc/postfix/virtual と「virtual_alias_domains」ディレクティブで 設定されているドメインが重複することが原因で warning が出るようです。
    そのため、「parent_domain_matches_subdomains」からパラメータ「relay_domain」を除いた設定を明示的に記載することで、warning を回避します。
    main.cfのパラメータにつきましては「postconf」コマンドでご確認下さい。
    書き換えが終了したらファイルを保存してテキストエディタを終了して下さい。
  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
    ※本設定例の場合、あらかじめ "user1"、"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番ポートへの接続がブロックされる仕組み)を実施しているプロバイダから接続する場合、 標準設定のままではWebARENAのVPSを送信用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ファイルの編集を行います。必要な箇所の # を外して、submissionポートの設定を行って下さい。
    # Postfix master process configuration file.  For details on the format
    # of the file, see the master(5) manual page (command: "man 5 master").
    #
    # ==========================================================================
    # 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_enforce_tls=yes
      -o smtpd_sasl_auth_enable=yes  (←行頭にある # を削除)
      -o smtpd_client_restrictions=permit_sasl_authenticated,reject (←行頭にある # を削除)
    「-o」の前に書かれている半角スペースは必要な記述のため削除しないで下さい。削除すると正常に動作しなくなります。

    書き換えが終了したらファイルを保存してテキストエディタを終了して下さい。

  3. 以下のコマンドを実行し、書き換えた内容を有効にして下さい。
    [root@localhost ~]# service postfix reload

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