Postfixによるメール転送設定

前回、「Postfixによるメール送信設定」の記事を書きましたが、今回はその続編として、メール転送設定について書きます。

ここでいう「メール転送」は、

  • プライベートネットワーク内のサーバーでインターネットに接続できない。
  • 複数台のサーバー構成で、インターネットへのメール送信を一元化したい。

などの場合に、中継サーバーを経由してインターネットにメールを送信することをいいます。
メールの受信およびメールボックスの構築は含んでいませんのでご注意ください。

設定方法や各パラメータの意味については、基本的には、前回の記事「Postfixによるメール送信設定」を参照してください。
ここでは、メール転送にあたり、変更となるアクセス制御、パラメータやログについて記載します。

isdネットワーク構成

前回と同じく、サーバーはCentOS 6を想定、ネットワーク構成とIPアドレスは下図のとおりとします。
(クリックすると大きく表示されます。)

201606MailRelay1

  • 送信元サーバー
    • Server A, IPアドレス 172.16.10.5
    • Server B, IPアドレス 172.16.10.6
  • 中継サーバー
    • Server C, IPアドレス 172.16.1.11

※中継サーバーはインターネットアクセス可能。

isdアクセス制御

必要に応じて、以下のアクセス許可設定を行います。

  • ファイアウォールで、送信元サーバーから中継サーバーへのTCP/25の通信を許可。
  • 送信元サーバーのiptablesで、TCP/25のOutbound通信を許可。
  • 中継サーバーのiptablesで、TCP/25の送信元サーバーからのInbound通信を許可。

isdPostfixの設定

中継サーバーの設定

※誤って relayhost の設定があったので削除しました。

 # vi /etc/postfix/main.cf

--
...
myhostname = example.jp
mydomain = example.jp
myorigin = $mydomain
append_at_myorigin = yes
append_dot_mydomain = yes
inet_interfaces = all
inet_protocols = ipv4
mydestination = localhost
mynetworks = 127.0.0.1, 172.16.10.5, 172.16.10.6
--

 

変更となるパラメータは次の2つです。

  • inet_interfaces = all

inet_interfacesパラメータで、待ち受ける(=Listenする)ネットワークアドレスを指定します。
他のサーバーからもSMTP接続を許可するため、allとします。

  • mynetworks = 127.0.0.1, 172.16.10.5, 172.16.10.6

mynetworksパラメータで、メールリレーを許可するホストのIPアドレスリスト、レンジを指定します。
サーバー自身の127.0.0.1に加え、送信元サーバーのIPアドレスを記載します。
サブネット全体が信頼できるのであれば、172.16.10.0/24 のようにレンジで指定してもよいでしょう。
仮にここで全IPアドレスを表す 0.0.0.0/0 として、ファイアウォールの設定でTCP/25のInbound通信を許可すると、いわゆる「オープンリレー」サーバーとなりスパムメールのたたき台となってしまうので注意が必要です。

送信元サーバーの設定

 # vi /etc/postfix/main.cf

--
...
myhostname = example.jp
mydomain = example.jp
myorigin = $mydomain
append_at_myorigin = yes
append_dot_mydomain = yes
inet_interfaces = localhost
inet_protocols = ipv4
mydestination = localhost
mynetworks = 127.0.0.1
relayhost = [172.16.1.11]
--

 

  • relayhost = [172.16.1.11]

relayhostパラメータで、メールの転送先となる中継サーバーのIPアドレスを指定します。

※[]は、「DNSでMXレコードの名前解決をしない」ことを意味します。

  • myhostname = example.jp

myhostnameは、mydomainと同じとしてあります。
myhostnameパラメータの値は、デフォルトではsmtp_helo_nameパラメータとして使用され、「宛先のメールサーバーとSMTP接続した際に、SMTP EHLOコマンドで送るホスト名」となり、メールヘッダのReceivedフィールドに記録されます。
ですので、「メールヘッダでどのサーバーから送信されたものか判別したい」ということであれば、myhostnameにはサーバーごとにユニークなホスト名を設定するとよいでしょう。
メール送信時のSMTPの接続先は中継サーバーのみで、中継サーバーではDNSによるホスト名のチェックは行わないので、「DNSで正引きできるホスト名」でなくても問題ありません。
 

送信元サーバー、中継サーバーのPostfixの設定は以上です。
あとは、Postfixを起動して、自動起動設定や、root宛メールの転送設定などを行います。
メール送信テストも忘れずに。

isdメール送信ログ

送信元サーバーからメールを送信したときのメールログは以下のようになります。

送信元サーバーのログ

‘relay=172.16.1.11[172.16.1.11]:25’
‘status=sent’
のとおり、中継サーバーへのメールを転送し、正しく送信されたことがわかります。

 # less /var/log/maillog

--
Jun 23 15:51:44 mailtest2 postfix/pickup[1697]: 761AD7BE4: uid=0 from=<user1>
Jun 23 15:51:44 mailtest2 postfix/cleanup[1703]: 761AD7BE4: message-id=<20160623xxxxxx.761AD7BE4@mail337.inaba-serverdesign.jp>
Jun 23 15:51:44 mailtest2 postfix/qmgr[1698]: 761AD7BE4: from=<user1@example.jp>, size=564, nrcpt=1 (queue active)
Jun 23 15:51:44 mailtest2 postfix/smtp[1705]: 761AD7BE4: to=<宛先アドレス>, relay=172.16.1.11[172.16.1.11]:25, delay=0.05, delays=0.02/0/0.02/0.01, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 7F1F57BE4)
Jun 23 15:51:44 mailtest2 postfix/qmgr[1698]: 761AD7BE4: removed
--

 

中継サーバーのログ

‘client=unknown[172.16.10.5]’
‘to=<宛先アドレス> ~ status=sent’
のとおり、送信元(SMTPクライアント)からのメールを中継し、宛先アドレスに正しく送信されたことがわかります。

 # less /var/log/maillog

--
Jun 23 15:51:44 mailtest1 postfix/smtpd[1476]: 7F1F57BE4: client=unknown[172.16.10.5]
Jun 23 15:51:44 mailtest1 postfix/cleanup[1472]: 7F1F57BE4: message-id=<20160623xxxxxx.761AD7BE4@mail337.inaba-serverdesign.jp>
Jun 23 15:51:44 mailtest1 postfix/qmgr[1467]: 7F1F57BE4: from=<user1@example.jp>, size=773, nrcpt=1 (queue active)
Jun 23 15:51:44 mailtest1 postfix/smtpd[1476]: disconnect from unknown[172.16.10.5]
Jun 23 15:51:44 mailtest1 postfix/smtp[1474]: 7F1F57BE4: to=<宛先アドレス>, relay=<宛先のメールサーバー>[<宛先メールサーバーのIPアドレス>]:25, delay=0.23, delays=0/0/0.16/0.06, dsn=2.0.0, status=sent (250 2.0.0 u5N6piOt024243 Message accepted for delivery)
Jun 23 15:51:44 mailtest1 postfix/qmgr[1467]: 7F1F57BE4: removed
--

 

isdメール中継サーバーの冗長化

上記のような構成の場合、中継サーバーに障害が発生すると、送信元サーバーからのメールが送信できなくなります。
下図のように中継サーバーを複数台用意して冗長構成とすると、中継サーバー1台に障害が発生しても、別の中継サーバーからメール送信が可能となります。

201606MailRelay2
 

  • 送信元サーバー
    • Server A, IPアドレス 172.16.10.5
    • Server B, IPアドレス 172.16.10.6
  • 中継サーバー
    • Server C, IPアドレス 172.16.1.11
    • Server D, IPアドレス 172.16.1.12

この場合、2台の中継サーバーの設定は全く同じで問題ありません。
(メールヘッダに記録されるmyhostnameのみ変更してもよいでしょう。)

送信元サーバーのPostfixの設定は次のようにします。

 # vi /etc/postfix/main.cf

--
...
myhostname = example.jp
mydomain = example.jp
myorigin = $mydomain
append_at_myorigin = yes
append_dot_mydomain = yes
inet_interfaces = localhost
inet_protocols = ipv4
mydestination = localhost
mynetworks = 127.0.0.1
relayhost = [172.16.1.11]
smtp_fallback_relay = [172.16.1.12]
--

 

  • relayhost = [172.16.1.11]
  • smtp_fallback_relay = [172.16.1.12]

smtp_fallback_relayパラメータで、relayhostパラメータで指定したサーバーにSMTP接続できない場合の代替となる中継サーバーのIPアドレスを指定します。
relayhostがプライマリ中継サーバー、smtp_fallback_relayがセカンダリ中継サーバーのような意味合いとなります。

isdまとめ

Postfixによるメール転送設定についてまとめました。
この構成とする場合は、中継サーバーを複数台用意して冗長構成とするとよいと思います。

(関連記事)
・Postfixによるメール送信設定
https://inaba-serverdesign.jp/blog/20160620/postfix_send_mail.html
 

Follow me!