PostfixのメールをGMail経由で送る


注意

追記2020/9/11: この記事は古いです。

GMailアカウントでLSA(安全性の低いアプリ)の設定を行い、SMTP認証(PLAIN)を行うことを前提としています。

一般のGMailに関してはアナウンスがないようですが、G SuiteのGMail利用に関しては、G Suiteアップデートブログ、安全性の低いアプリによる G Suite アカウントへの接続が無効に にあるように将来的には完全に利用できなくなります。

  • GMailアカウント: LSA設定で可能(今後、G Suite同様に無効化されるのか?その場合いつになるかは不明)
  • G Suiteアカウント: 2020/6/15以前にLSA設定したことがある場合は2021/2/16まで利用可能

目的

CentOSはデフォルトのMTAとしてPostfixを採用している。
minimal構成でインストールしてもPostfixがインストールされ起動しており、これはもったいないのでGMailで他所に中継する。

制限

例えばhoge.localというホストから発信されたメールは、下記の様にすべて同じGMailユーザから発信されたことになる。これによりマルチユーザ環境では基本使えない。あくまでも自分のローカル開発環境等にはいいかもと言う感じ。

From: root <ユーザ名@gmail.com>
X-Google-Original-From: [email protected] (root)

環境

CentOS 7.2.1511で確認した。

# rpm -qa|grep postfix
postfix-2.10.1-6.el7.x86_64
# rpm -qa|grep cyrus-sasl
cyrus-sasl-lib-2.1.26-20.el7_2.x86_64
cyrus-sasl-2.1.26-20.el7_2.x86_64
cyrus-sasl-plain-2.1.26-20.el7_2.x86_64
cyrus-sasl-devel-2.1.26-20.el7_2.x86_64

cyrus-sasl-plainがないとGMailとの認証できないので注意(minimalでは入ってなかったはず)

設定

中継設定

main.cfを編集

# vi /etc/postfix/main.cf

末尾に次の設定を追加、GMailを中継先にしTLSを使いSMTP認証(PLAIN)にする。

# GMail
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain

認証ユーザの設定

# vi /etc/postfix/sasl_passwd
[smtp.gmail.com]:587    <gmail_address>:<password>
中継先SMTPアドレス:ポート     認証ユーザ名:パスワード

パーミッションの変更とdb化

# chmod 600 /etc/postfix/sasl_passwd
# postmap hash:/etc/postfix/sasl_passwd

設定の有効化(再起動)

# systemctl restart postfix        # CentOS7/Systemd

reloadでもいいけど

確認

mailxパッケージをインストールしてあれば次の様に、自分のアドレス(GMail以外でも可)へメールを送信すると、中継登録したGMailアドレスからメールが届くはず。

$ mail [email protected]
Subject: test
test
EOT

EOTはCtrl-Dで

運用

alias設定

ローカルホストのrootと作業ユーザのメールエイリアスを登録する
一般ユーザは~/.forwardでも良いが…

# vi /etc/aliases

末尾に次の様にaliasを追加

上記例はrootとvagrantユーザへのメールが自分のメールアドレス[email protected]に届く設定(もちろんGMailでも可)

# newaliases

newaliasesは忘れずに

おまけlogwatchインストール

# yum install logwatch

logwatchをインストールしておけば、ログの集計結果が届くはず。ただし深夜も動いてるなら。