以前作ったテスト環境 の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させると引けなくなるので、試してみても良いです。
Tags: CentOS , Dnsmasq , Postfix , SPF
This entry was posted on 木曜日, 4月 20th, 2023 at 17:08 and is filed under Postfix , 未分類 . You can follow any responses to this entry through the RSS 2.0 feed.
You can skip to the end and leave a response. Pinging is currently not allowed.