明滅するプログラマの思索

WEBエンジニアとして勤務している一介の男が、日々気づいたことをまとめるブログです

Postfix を利用して外部の qmail サーバからメールを送信する

Google Compute Engine は、Google の制約によりメール送信が行えません。
すなわち、SMTP(25番ポート)・SMTPS(465番ポート)・Submission(587番ポート)が閉じられています。
メールを送信する場合、サードパーティのメール送信ツール SendGrid を利用するよう推奨されています。
ここでは SendGrid を使わずに、自分で別のサーバにメールサーバ qmail を立て、そこを経由してメール送信を行えるようにしてみます。

導入環境

GCE側

ソフトウェア バージョン
CentOS 7.3
Postfix 2.10

GCE 側のIPを <gcp ip>と記述します。
また、GCEは25番ポートが閉じているため、25番ポートでのメール転送が行えません。
ここでは50025番ポートを使用することにします。

メールサーバ側

ソフトウェア バージョン
CentOS 6.9
qmail 1.03

メールサーバ側の IP を <qmail ip> と記述します。

GCE 側の設定

Postfix の設定ファイルを編集します。

vi /etc/postfix/main.cf

relayhost の設定を行います。

relayhost = [<qmail ip>]:50025

※ここでは SMTP認証の設定を行いません。

Postfix を再起動します。

systemctl restart postfix

qmail 側の設定

tcptules を使用して、CDBファイルを更新します。

vi /etc/tcp.smtp

以下を追記します。

<gce ip>:allow,RELAYCLIENT=""

CDBファイルを作成して、qmailを再起動します。

tcprules /etc/tcp.smtp.cdb /etc/tcp.tmp < /etc/tcp.smtp

tcpserver の Listen ポートを25から50025に変更します。

vi /etc/services

# 以下を追記します
csmtp       50025/tcp
csmtp       50025/udp
vi /etc/init.d/qmail

# SMTPリクエストを受け付ける tcpserver の ポートを smtp から csmtp に変更します

qmail を再起動します。

/etc/init.d/qmail restart

送信テスト

GCE 側で送信

mail godanism@xxx.com -S test
test
.

メールサーバ側で確認

tail /var/log/maillog

Sep 13 09:19:33 smtp: 1505261973.057387 tcpserver: status: 1/40
Sep 13 09:19:33 smtp: 1505261973.058786 tcpserver: pid 5230 from <gce ip>
Sep 13 09:19:33 smtp: 1505261973.059113 tcpserver: ok 5230 0:<qmail ip>:50025 :<gce ip>::44406
Sep 13 09:19:33 qmail: 1505261973.079575 new msg 786718
Sep 13 09:19:33 qmail: 1505261973.079760 info msg 786718: bytes XXX from <root@gcexxxx.com> qp 5231 uid 1111
Sep 13 09:19:33 smtp: 1505261973.080706 tcpserver: end 5230 status 0
Sep 13 09:19:33 smtp: 1505261973.080734 tcpserver: status: 0/40
Sep 13 09:19:33 qmail: 1505261973.082395 starting delivery 33: msg 786718 to remote godanism@xxx.com
Sep 13 09:19:33 qmail: 1505261973.082446 status: local 0/10 remote 1/20
Sep 13 09:19:33 qmail: 1505261973.207060 delivery 33: success: XXX.XXX.XXX.XXX_accepted_message./Remote_host_said:_250_ok_1505261973_qp_95444/
Sep 13 09:19:33 qmail: 1505261973.207087 status: local 0/10 remote 0/20
Sep 13 09:19:33 qmail: 1505261973.207093 end msg 786718

こんな感じで success になれば成功です。

まとめ

肝心な部分は、

  1. Postfix の relayhost
  2. tcpserver の cdbファイル

です。
送信できない場合は、firewall、SMTP認証、/var/qmail/control 直下のファイルの設定が怪しそうです。