user icon

SPFをテスト環境のPostfixに組み込む

以前作ったテスト環境のPostfixに、SPF(Sender Policy Framework)を組み込んでみます。
わざわざGoogle Domainsや、お名前.comから取得しなくても、試せるようにしています。

Dnsmasq

まずは自分のローカルドメインを名前引き出来るようにDnsmasqを入れて設定します。
ついでにresolv.confをDnsmasq用にコピー。
dnf install dnsmasq bind-utils
cp -p /etc/resolv.conf /etc/resolv_dnsmasq.conf

/etc/resolv.conf

nameserver 127.0.0.1
記載内容を一旦全て削除して、上記一行だけにしてしまいます。
※但し再起動で元に戻ってしまうので、再起動後も維持するならnmtui等でdnsを127.0.0.1に設定して下さい。

/etc/dnsmasq.conf

resolv-file=/etc/resolv_dnsmasq.conf
txt-record=virtual.localdomain,"v=spf1 ip4:192.168.10.79 ip4:127.0.0.1 ip6:::1 -all"
Dnsmasqが参照するnameserverの設定を/etc/resolv_dnsmasq.confにして、virtual.localdomainにTXTレコードを追加します。
終わったらDnsmasqを起動して、TXTレコードが引けるか確認。
systemctl enable dnsmasq --now
dig TXT virtual.localdomain
# 以下の行が出ればOK
# virtual.localdomain.    0       IN      TXT     "v=spf1 ip4:127.0.0.1 ip6:::1 -all"

SPF

Postfix用にpypolicyd-spfをインストールします。
 dnf install pypolicyd-spf

/etc/python-policyd-spf/policyd-spf.conf

Mail_From_reject = False
skip_addresses = 192.0.2.0/24
SPFにパスしなくてもメールが届くようMail_From_rejectをFalseに変更し、
ローカルメールをチェックするよう、skip_addressesを適当なアドレス帯(RFC5737で定義された例示用アドレス)に変更します。
※skip_addressesを空欄にするとエラーになってしまいましたので、何か入れないと駄目です。
起動して問題無い=何も出力されずに、待ち状態になる事を確認します。
/usr/libexec/postfix/policyd-spf /etc/python-policyd-spf/policyd-spf.conf

Postfix

man policyd-spfでPOSTFIX INTEGRATION例が記載されていますが、パスが違ったりするので微調整が必要です。

/etc/postfix/master.cf

policyd-spf unix -       n       n       -       0       spawn
  user=nobody argv=/usr/libexec/postfix/policyd-spf

/etc/postfix/main.cf

# 他に記載が有れば最後へ追加、なければ単に追加
smtpd_recipient_restrictions =
  #...,
  check_policy_service unix:private/policyd-spf

policyd-spf_time_limit = 3600
ここで注意ですが、smtpd_relay_restrictionsに記載しても動きませんでした。
Postfix2.10からはsmtpd_relay_restrictionsが追加されてreject_unauth_destinationとかもこちらに記載したりするのですが、それに気付かずに暫く唸っていました。
※そもそもリレー許可とスパムブロックのルールがsmtpd_recipient_restrictionsの下で結合され、エラーが発生しやすい構成になっていたのがsmtpd_relay_restrictionsが作られた起因らしいので、ちょっと一言有っても良いんじゃないとは思いましたが、まぁPostfix 2.10以前でも動きますからね・・・。
後はpostconfでWarning等が出ない事を確認してリロードしたら、/var/spool/postfix/private/policyd-spfが作られている筈です。
postconf smtpd_recipient_restrictions
systemctl reload postfix

メール

RoundCubeで自ドメイン宛にメールを飛ばして、メールのSPFヘッダーがpassになっていれば、SPFチェックをパスした事になります。
Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=::1; helo=192.168.10.79; envelope-from=yamada@virtual.localdomain; receiver=<UNKNOWN>
TXTレコードからSPFを正しく引けないと、上記はPassでなくNoneになります。

txt-record行をコメント化してdnsmasqをrestartさせると引けなくなるので、試してみても良いです。
Facebooktwitterlinkedintumblrmail

タグ: , , ,

名前
E-mail
URL
コメント

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)