Postfix に SRS を導入して転送時の SPF 認証をパスさせる

ConoHa Enterprise Linux 9
このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。
スポンサーリンク

以前構築したメールサーバーに、転送設定が必要になりました。

ConoHa VPS

単純に転送するだけだと、転送先のサーバーで 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.secret

SRS_SECRET のパーミッションを確認しておきます。

ls -l /etc/postsrsd.secret
(out) -rw-r--r-- 1 root root 25 Jul 22 12:53 /etc/postsrsd.secret

644 になっていたので、600 に変更しておきます。

chmod 600 /etc/postsrsd.secret
ls -l /etc/postsrsd.secret
(out) -rw------- 1 root root 25 Jul 22 12:53 /etc/postsrsd.secret

PostSRSd を起動し、自動起動も有効にします。

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_recipient

PostSRSd の最新のバージョン(2.x)では socketmap で設定できますが、今回インストールしたバージョン(1.x)では TCP で設定します。

GitHub - roehling/postsrsd: Postfix Sender Rewriting Scheme daemon
Postfix Sender Rewriting Scheme daemon. Contribute to roehling/postsrsd development by creating an account on GitHub.

Postfix をリロードして、設定を反映させます。

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 に変わった事が確認できました。

参考にしたサイト

ConoHa VPS

コメント

タイトルとURLをコピーしました