Zenn
📤

PostfixのリレーホストにGmailを使う

2025/02/13に公開

(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 ファイルを編集します。

/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

ログインするとコメントできます