Postfixによるメールリレー設定

PostfixはUnix/Linux系OSで標準のメール転送エージェント(MTA)として採用されており、 メール送信には欠かせないソフトウエアの1つです。 Postfixにメールリレーの設定を行うことで、既存システムのメール送信処理を修正することなく、 Customers Mail Cloudを利用することができます。


メールリレーを設定する

Postfixをメールリレーサーバとして動作させるために以下の設定を行います。

/etc/postfix/main.cf

# transport にあるメールリレー設定を参照するよう transport_maps を追加する 
transport_maps = hash:/etc/postfix/transport

/etc/postfix/transport

localhost :
localhost.localdomain :
YOUR-HOSTNAME :
*     smtp:[SMTPホスト名]:10025

1-3行目はcrondなどのOSサービスが送信するメールをローカルのメールボックスに配送するための設定です。 YOUR-HOSTNAME は、hostname コマンドで出力されるこのサーバ自身のホスト名を指定します。

4行目が外部メールサーバへのメールリレー設定となります。 最初のアスタリスク(*)は宛先ドメインを全てマッチさせます。 smtp: は、SMTPによるメールリレーを指定しています。 [SMTPホスト名]は、メールリレー先サーバ名を指定しています(SMTPホスト名は[]で囲ってください)。 :10025 は SMTPの接続ポートを指定しています。

SMTPホスト名には以下を指定します。

サービスプラン    SMTPホスト名
無料トライアル sandbox.smtps.jp
Standard te.smtps.jp
Pro SUBDOMAIN.smtps.jp (SUBDOMAINは各ユーザに割り当てたドメイン)

transportファイルに設定を追加したら、以下コマンドにてdbファイルに反映します。

$ postmap hash:/etc/postfix/transport

SMTP認証を設定する

APIユーザでSMTP認証を行うため、以下の設定を行います。 サービスプラン「Pro」を利用しており、IPアドレス認証でSMTP接続する場合この設定は必要ありません。 代わりに管理コンソールの「リレーサーバ」設定 からSMTP接続を許可するIPアドレスを設定してください。

/etc/postfix/main.cf

# SMTP認証を有効とし、relay_password にある認証情報を参照するよう設定する 
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/relay_password
smtp_sasl_security_options = noanonymous

/etc/postfix/relay_password

[SMTPホスト名]:10025  username:password

[SMTPホスト名]:10025 は /etc/postfix/transport で設定したリレー先サーバと同じ内容を記述します。 username に APIユーザ名、password には APIキーを指定します。

relay_passwordファイルを設定したら、以下コマンドにてdbファイルに反映します。

$ postmap hash:/etc/postfix/relay_password

リレー動作を設定する

Customers Mail Cloudには以下の範囲でSMTP接続を行ってください。

Standard

SMTP同時接続数を10までとします。

Pro

送信IPあたり、SMTP同時接続数を10までとします。 例えば送信IPを4つ利用している場合、SMTP同時接続数は40までとなります。

SMTP同時接続数は以下の設定にて制御します。

/etc/postfix/main.cf

# SMTP同時接続数を制限する
default_destination_concurrency_limit = 10

また一部のSMTPホストがビジーであった場合、 Postfixが速やかに再送処理を行うように以下の設定を変更します。

/etc/postfix/main.cf

# queue から再送メールをチェックする間隔
queue_run_delay = 5s

# 最小メール再送間隔
minimal_backoff_time = 5s

# 最大メール再送間隔
maximal_backoff_time = 10s

STARTTLS を設定する

Postfix から Customers Mail Cloud までのSMTP通信を暗号化する場合、Postfix に STARTTLS の設定を行います。 Customers Mail Cloud から宛先メールサーバーまでのSMTP通信は、TLS暗号化を優先して使用します。 本設定を行うことにより、メール送信経路全体に対して可能な限りの暗号化を行うことができます。

/etc/postfix/main.cf

# STARTTLS を有効にする
# postfix バージョンが 2.2 以下である場合、 smtp_use_tls = yes を使用する
smtp_tls_security_level = may

# /var/log/maillog に TLS 関連のログを出力する
smtp_tls_loglevel = 1

# TLSで使用するサーバ証明書ファイル (CentOS6, 7)
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt

Postfix と Customers Mail Cloud の間でTLSコネクションが接続できた場合、 /var/log/maillog に以下のログが出力されます。

Nov 15 19:06:43 sv1 postfix/smtp[12630]: setting up TLS connection to sandbox.smtps.jp[153.128.30.207]:10025
Nov 15 19:06:43 sv1 postfix/smtp[12630]: Trusted TLS connection established to sandbox.smtps.jp[153.128.30.207]:10025: TLSv1.2 with cipher AES256-SHA (256/256 bits)

設定を反映する

以下コマンドで設定を反映します。

$ cd
$ service postfix reload

DNSキャッシュを導入する

Postfixはメールリレーを行う際、transportファイルに書かれたSMTPホスト名をDNSで解決します。 Customers Mail Cloudは、SMTPホスト名に複数のIPアドレスを登録しDNSラウンドロビンで応答することにより、 負荷分散と冗長化を実現しています。 このDNS参照はメールリレーの処理性能に大きく影響するため、 DNSキャッシュサーバを導入することを推奨しています。

DNSラウンドロビンに対応したDNSキャッシュサーバとして、dnsmasqを利用することができます。 以下にdnsmasqのインストールと設定方法を説明します。

インストール(RedHat/CentOSの場合)

$ yum install dnsmasq

設定ファイル

/etc/dnsmasq.conf ファイルの以下設定を変更します。

interface に lo を指定し、ローカルループバックでのみDNS問合せを受け付ける
< interface=lo
---
> #interface=

上記設定を有効にするため, bind-interfaces のコメントアウトを外す
< bind-interfaces
---
> #bind-interfaces

/etc/resolv.conf を以下の通り修正します。

nameserver 127.0.0.1 (DNSキャッシュを優先参照する)
nameserver 192.168.1.*** (既存のDNSサーバはそのまま残す)

※AWS EC2インスタンスの/etc/resolv.confはサーバ再起動時にデフォルト値に上書きされます。 これを無効にするため、NICの設定ファイル(/etc/sysconfig/network-scripts/ifcfg-eth0) の PEERDNS オプションを no に設定してください。

設定反映

設定を反映するため以下のコマンドを実行します。

$ cd
$ service dnsmasq reload

※reload を行った際に「dnsdomainname: Unknown host」というメッセージが出力された場合、 /etc/hosts にサーバ自身のホスト名が登録されていない可能性があります。 hostname コマンドで表示されるホスト名を /etc/hosts に登録してください。