PostfixのリレーホストにGmailを使う
(2025/Feb/16変更。よりシンプルな方法に書き換えました)
サーバー運用時に、外部にメールでステータスを送りたいことがあります。そこでpostfixのリレーホストとしてGmailを使う設定を行ったので記しておきます。
- Debian 12
この設定では、postfixが受け取ったメールは全てgmailの個人アカウント名義の送信メールとしてgmailサーバーに渡されます。gmailサーバーは宛先に応じてgmailユーザーにメールを配達したり、他のメールサーバーに送ったりします。送信専門であり、外部からのメールの受信機能はありません。
以下では、利用するアカウントを foo@gmail.com とします。また、sudoが利用可能であると仮定しています。
Gmailの準備
Gmailアカウントは2段階認証を適用しておく必要があります。セキュリティページからイネーブルしておいてください。
次にGmailのアプリパスワードを取得します。アプリパスワードページを開き、適当なアプリケーション名を設定してパスワードを取得してください。アプリケーション名はあとからパスワードの整理をするときに自分が管理しやすい名前にします。postfixで良いでしょう。
Postfixと関連ツールのインストール
aptでツールをインストールします。
sudo apt update
sudo apt install -y postfix libsasl2-modules mailutils
インストール中にpostfixのサーバー設定をどうするか聞かれますので、No configuration
を選んでください。
選択を間違えた場合には次のコマンドで再選択できます。
sudo dpkg-reconfigure postfix
Postfixの設定
まずmail.confを編集します。
sudo nano /etc/postfix/main.cf
ファイルは空ですので、以下の内容を書き込みます。
# your preference may vary
inet_protocols = ipv4
inet_interfaces = loopback-only
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
# your box hostname
myhostname = debian-template.local
mydestination = $myhostname, localhost
# use Gmail with TLS as destination
relayhost = smtp.gmail.com:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/Entrust_Root_Certification_Authority.pem
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cache
smtp_tls_session_cache_timeout = 3600s
ここで、myhostname
はPCのホスト名をFQDNで指定します。私の場合ホスト名がdebian-templateで、自宅ではこれをdebian-template.local として運用しているため、myhostname = debian-template.local
としました。
変更が終わったらファイルを保存して閉じます。
次にGmailのアカウントとパスワードを書き込みます。メールアドレスを仮にfooとしています。postmapはsasl_passwdからpostfixが読み込むことのできる形式のファイルを作り出します。
sudo echo "smtp.gmail.com foo@gmail.com:Gmailのアプリパスワード" | sudo tee /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap hash:/etc/postfix/sasl_passwd
最後に、postfixを起動します。
sudo systemctl enable postfix
sudo systemctl start postfix
sudo systemctl status postfix
テスト
設定が終わったらテストメールを送ります。まず各アカウントについて整理しておきましょう
アカウント | 説明 |
---|---|
foo@gmail.com | リレーホストに使うためにアプリパスワードを取得したgmailアカウント |
bar | 作業中のLinuxアカウント |
baz@example.com | テストメールの宛先アカウント |
echo "テストメール本文" | mail -s "テストメール表題" baz@example.com
宛先のメールボックスでメールを開くと送信者情報はbar <foo@gmail.com>
になっています。
/etc/aliasesの設定
以上で外部のメールアドレスにメールを送ることができるようになりました。これに加えてホスト内のアカウント宛てのメールを外部にフォワードできると何かと便利です。
メールフォワードの設定をするには /etc/aliases ファイルを編集します。
# See man 5 aliases for format
postmaster: root
seiichi: root
root: baz@example.com
ファイル保存後にnewaliases
を実行して下さい。
sudo newaliases
これで、postmasterとseiichi宛てのメールはrootにフォワードされます。そしてroot宛てのメールはbaz@example.comにフォワードされます。テストするには
echo hello | mail -s "test to root" root
を実行します。上手くいかないときには
sudo postfix reload
を試してみて下さい。
Discussion