以前構築したメールサーバーに、転送設定が必要になりました。
単純に転送するだけだと、転送先のサーバーで SPF 認証が失敗してしまうので、SRS(Sender Rewriting Scheme)を導入して転送時の Return-Path(エンベロープ差出人)を自サーバーのドメインに書き換える必要があります。
PostSRSd を使って SRS の設定をしたので、手順を記録しておきます。
環境
- OS:AlmaLinux release 9.8 (Olive Jaguar)
- PostSRSd:1.12
- Postfix:3.5.25
PostSRSd のインストール
dnf install postsrsd
(out) Last metadata expiration check: 3:31:10 ago on Wed Jul 22 09:21:59 2026.
(out) Dependencies resolved.
(out) ================================================================================
(out) Package Architecture Version Repository Size
(out) ================================================================================
(out) Installing:
(out) postsrsd x86_64 1.12-3.el9 epel 50 k
(out)
(out) Transaction Summary
(out) ================================================================================
(out) Install 1 Package
(out)
(out) Total download size: 50 k
(out) Installed size: 155 k
(out) Is this ok [y/N]: y
(out) Downloading Packages:
(out) postsrsd-1.12-3.el9.x86_64.rpm 280 kB/s | 50 kB 00:00
(out) --------------------------------------------------------------------------------
(out) Total 114 kB/s | 50 kB 00:00
(out) Running transaction check
(out) Transaction check succeeded.
(out) Running transaction test
(out) Transaction test succeeded.
(out) Running transaction
(out) Preparing : 1/1
(out) Installing : postsrsd-1.12-3.el9.x86_64 1/1
(out) Running scriptlet: postsrsd-1.12-3.el9.x86_64 1/1
(out) Verifying : postsrsd-1.12-3.el9.x86_64 1/1
(out)
(out) Installed:
(out) postsrsd-1.12-3.el9.x86_64
(out)
(out) Complete!PostSRSd の設定ファイルの位置を確認します。
rpm -qc postsrsd
(out) /etc/default/postsrsd設定ファイルを編集し、SRS_DOMAIN にドメインを記載します。
同一サーバで複数ドメインをホストしている場合は、SRS_EXCLUDE_DOMAINS にメインのドメイン以外をカンマ区切りで列挙します。(単一ドメイン運用ならコメントアウトのままで OK です)
# Default settings for PostSRSd
# Local domain name.
# Addresses are rewritten to originate from this domain. The default value
# is taken from `postconf -h mydomain` and probably okay.
#
SRS_DOMAIN=example.com
# Exclude additional domains.
# You may list domains which shall not be subjected to address rewriting.
# If a domain name starts with a dot, it matches all subdomains, but not
# the domain itself. Separate multiple domains by space or comma.
#
SRS_EXCLUDE_DOMAINS=example.net,example.org
# First separator character after SRS0 or SRS1.
# Can be one of: -+=
SRS_SEPARATOR==
# Secret key to sign rewritten addresses.
# When postsrsd is installed for the first time, a random secret is generated
# and stored in /etc/postsrsd.secret. For most installations, that's just fine.
#
SRS_SECRET=/etc/postsrsd.secretSRS_SECRET のパーミッションを確認しておきます。
ls -l /etc/postsrsd.secret
(out) -rw-r--r-- 1 root root 25 Jul 22 12:53 /etc/postsrsd.secret644 になっていたので、600 に変更しておきます。
chmod 600 /etc/postsrsd.secret
ls -l /etc/postsrsd.secret
(out) -rw------- 1 root root 25 Jul 22 12:53 /etc/postsrsd.secretPostSRSd を起動し、自動起動も有効にします。
systemctl start postsrsd
systemctl enable postsrsd
(out) Created symlink /etc/systemd/system/multi-user.target.wants/postsrsd.service → /usr/lib/systemd/system/postsrsd.service.Postfix と連携
Postfix の main.cf の最終行に、PostSRSd を追加します。
# PostSRSd
sender_canonical_maps = tcp:127.0.0.1:10001
sender_canonical_classes = envelope_sender
recipient_canonical_maps = tcp:127.0.0.1:10002
recipient_canonical_classes = envelope_recipient, header_recipientPostfix をリロードして、設定を反映させます。
systemctl reload postfix確認
postmap -q を使うと、Postfix が PostSRSd に対して行う問い合わせを、実際にメールは送らずに確認することができます。
書き換え(forward)の確認
10001 番ポートは、送信元アドレス(エンベロープ送信者)をどう書き換えるかを返します。送信元ドメインによって動作が変わるため、3 パターンを確認します。
SRS_DOMAIN に設定したドメイン
SRS_DOMAIN に設定したドメインからチェックしていきます。
postmap -q "user@example.com" tcp:127.0.0.1:10001
(out) user@example.com入力したアドレスがそのまま返れば成功です。
SRS_EXCLUDE_DOMAINS のドメイン
SRS_EXCLUDE_DOMAINS を設定している場合は確認してください。
postmap -q "user@example.net" tcp:127.0.0.1:10001
何も返ってこなければ成功です。SRS0= が返った場合は SRS_EXCLUDE_DOMAINS の記述漏れなので、追記して systemctl restart postsrsd してください。
外部ドメイン
最後に、外部ドメインの場合を確認します。
postmap -q "user@test.invalid" tcp:127.0.0.1:10001
(out) SRS0=<ハッシュ>=<タイムスタンプ>=test.invalid=user@<SRS_DOMAIN>自ドメインは書き換えず、外部ドメインだけが書き換わっていれば正常です。
復元(reverse)の確認
10002 番ポートは、SRS アドレスを元のアドレスに戻します。ハッシュ署名が含まれるため、手で入力したアドレスでは確認できません。上記で確認した外部ドメインの書き換えの出力をそのまま渡します。
postmap -q "SRS0=<ハッシュ>=<タイムスタンプ>=test.invalid=user@<SRS_DOMAIN>" tcp:127.0.0.1:10002
(out) user@test.invalid元のアドレスが返れば正常です。
実際に転送して確認
Gmail に転送して、SPF(Sender Policy Framework)が FAIL から PASS に変わった事が確認できました。


コメント