はじめに
SendmailとFreeBSDを使用した環境でSPFとDMARCを設定してみました。
受信したメールのエンベロープFromとヘッダFromが異なる場合に受信拒否できることを確認します。
DMARCは、Googleのガイドラインにて対応が求められたこともあって、急速に普及が進んでいます。
DMARCについては、下記ブログにて分かりやすく説明されております。
ベアメール : DMARCとは? 仕組みやメリット、導入方法まで解説
(https://baremail.jp/blog/2022/05/09/2490/)
環境
FreeBSD : 14.1
sendmail : 8.18.1
bind : 9.18.27
opendmarc : 1.4.2
SPF, DMARCの設定
opendmarcの導入・設定
SPF, DMARCはどちらもopendmarcを使用して設定できます。
pkgを用いてopendmarcをインストールします。
# pkg install opendmarc
opendmarcをインストールすると、/usr/local/etc/mail内にopendmarc.conf.sampleというファイルができているはずです。
conf.sampleファイルを用いてconfファイルを作成します。
# cp /usr/local/etc/mail/opendmarc.conf.sample /usr/local/etc/mail/opendmarc.conf
confファイルを編集します。
# DMARC検証で失敗した場合にメッセージの受信を拒否する
RejectFailures true
# opendmarcによってSPF検証を実施するために、ヘッダのSPF検証結果を無視する
SPFIgnoreResults true
# opendmarcがSPF検証を実施する
SPFSelfValidate true
confファイルの内容について、詳しくは下記ドキュメントをご参照ください。
opendmarc.conf(5)
https://manpages.debian.org/unstable/opendmarc/opendmarc.conf.5.en.html
設定を適用・反映するためにopendamrcを再起動します。
# service opendmarc restart
sendmailの設定
sendmail.mcにMilter設定を追記します。
INPUT_MAIL_FILTER(`opendmarc', `S=inet:8893@localhost')
設定を適用・反映します。
# cd /etc/mail
# make
# service sendmail restart
DNSの設定
ゾーンファイルに以下のSPFレコードとDMARCレコードを追記します。
IN TXT "v=spf1 ip4:送信元のIPアドレス -all"
_dmarc IN TXT "v=DMARC1; p=reject;"
設定を適用・反映します。
# service named reload
# service named restart
メール送信テスト
受信拒否確認
SPFレコードは登録済みなattack.localからahoaho.localへメールを送信します。
以下のsendmailコマンドでメール送信し、ヘッダFromはhogehoge.localとします。
sendmail -t <<EOL
From: mail@hogehoge.local
To: mail@ahoaho.local
Subject: testmail
test 2024/8/18
EOL
すると、メールは受信されず、maillogファイルにエラーコードが表示されます。
sm-mta[47351]: 44L5i8ei047351: Milter: data, reject=550 5.7.1 rejected by DMARC policy for hogehoge.local
受信拒否を確認できました。
正常なメールの受信確認
hogehoge.localからahoaho.localにメールを送信し、ヘッダFromとエンベロープFromに差異がない場合は、以下のメールヘッダが追加されます。
Authentication-Results: ahoaho.local; dmarc=pass (p=reject dis=none) header.from=hogehoge.local
Authentication-Results: ahoaho.local; spf=pass smtp.mailfrom=hogehoge.local
おわりに
SPFとDMARCの組み合わせは理解しやすいフィッシングメール対策となっています。
今回はDKIMを導入しませんでしたが、ぜひDKIMも取り入れた設定にもチャレンジしてみてください!