SPFとDKIMとDMARCとARCに対応してみた。
SPFの設定
メール送信側としての設定
postfixの設定
正しくメールが送信できるように設定しておくこと。送信に関して特に設定することはない。
DNSへの登録
DNSのTXTレコードにSPFの情報を登録することによって、他サイトのメールサーバにて当サイトのSPF検証を行ってくれるようになる。
当サイトのDNSサーバはMyDNSを利用している。MyDNSでは自動的にSPFレコードを設定してくれているがTXTレコードを記載することによって自分でも設定が可能。
以下のように設定した。
@ IN TXT "v=spf1 mx include:_spf.google.com -all"
また、受信だけのドメインについては、以下のようにしている。
@ IN TXT "v=spf1 -all"
メールサーバは内部DNSを参照しているのでこちらにも設定しておく。
メール受信側としての設定
postfixの設定(SPF検証)
受信したメールについて、SPF検証を行うように設定する。
pypolicyd-spfのインストール
SPF検証を行う方法はいくつかあるようだが、情報の多かったpypolicyd-spfを利用してみる。以下のコマンドを実行してインストールする。
# dnf -y install pypolicyd-spf
定義ファイル/etc/python-policyd-spf/policyd-spf.confの修正
SPF検証時の動作を決めるパラメータ。内容は以下のようにした。各パラメータの意味は他のサイトの情報を参考にして。
debugLevel = 1
TestOnly = 1
HELO_reject = False
Mail_From_reject = False
PermError_reject = False
TempError_Defer = False
skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0/104,::1
postfixの設定
/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パラメータを以下のように修正する。
smtpd_recipient_restrictions = permit_mynetworks,
permit_auth_destination,
permit_sasl_authenticated,
check_policy_service unix:private/policyd-spf
postfixを再起動するとSPFの検証を行うようになる。
DKIMの設定
opendkimのインストール
# dnf -y install opendkim opendkim-tools
キーの作成(RSA)
以下の例は当サイトの例。ドメインごとにディレクトリを作成しそこにファイルを格納する。鍵長を2048bitに、セレクタ名には8桁の作成年月日を設定した。
# mkdir -p /etc/opendkim/keys/yo7612.com
# cd /etc/opendkim/keys/yo7612.com
# opendkim-genkey -b 2048 -D /etc/opendkim/keys/yo7612.com/ -d yo7612.com -s 20240309
# chown -R opendkim:opendkim /etc/opendkim/keys/*
上記のディレクトリに秘密鍵(セレクタ名.private)とDNS登録用のファイル(セレクタ名.txt)が作成される。
キーの作成(ED25519)
秘密鍵の作成。
# /etc/opendkim/keys/yo7612.com
# openssl genpkey -algorithm ed25519 -out 20240309-ed25519.txt
上記の秘密鍵から公開鍵を作成する。
# openssl pkey -in 20240309-ed25519.txt -pubout -out 20240309-ed25519.private
DNSへの登録
内部DNS(nsd)に以下の情報を登録する。上記で作成したDNS登録用ファイルの内容をそのままzoneファイルに登録すればよい。
20240309._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=文字列省略" )
_adsp._domainkey IN TXT "dkim=unknown"
MyDNSでは、TXTレコードに1024バイトの文字列が登録可能である。ただし、括弧やダブルクォーテーションは値として利用できないようなので、別途テストエディタなどで以下のように一行に整えて登録した。
v=DKIM1; k=rsa; p=文字列省略
2024/3/12 追記 DKIM ADSPは廃止されていた。_adsp._domainkeyのレコードは不要である。
情報の確認コマンド。
# opendkim-testkey -d yo7612.com -s 20240311 -vvv
opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: checking key '20240311._domainkey.yo7612.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK
#
opendkimの定義体
/etc/opendkim.confの修正を行う。以下の内容を設定する。SoftwareHeader についてはテストが完了したらyesにしておく。
Mode sv
keyFile→コメントにする
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
SoftwareHeader no
Socket inet:8891@localhost
以下各項目の説明。
Mode
Selects operating modes. Valid modes are s (sign) and v (verify). Default is v.
Must be changed to s (sign only) or sv (sign and verify) in order to sign outgoing messages.
KeyFile
コメントにする。KeyTableで指定するので不要。
KeyTable
KeyTable で指定するファイルに以下の内容を記載する。
20240309._domainkey.yo7612.com yo7612.com:20240309:/etc/opendkim/keys/yo7612.com/20240309.private
SigningTable
SigningTable で指定するファイルに以下の内容を記載する。
*@yo7612.com 20240309._domainkey.yo7612.com
ExternalIgnoreList
基本的にデフォルトでよい。
127.0.0.1
::1
InternalHosts
ExternalIgnoreList と同じファイルを指定する。
Socket
Socket inet:8891@localhost
systemctl
# systemctl enable opendkim
# systemctl start opendkim
Postfixの設定
postfixのmain.cfに以下の内容を追加する。修正が終わったらpostfixを再起動する。
### DKIM Settings
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
DMARCの設定
SPFとDKIMの設定を終えておく。
DNSの設定
DMARCの情報をDNSに登録する。当サイトではサブドメイン運用はしない。
_dmarc IN TXT "v=DMARC1; p=none; sp=reject; rua=mailto:dmarc@yo7612.com"
当サイトではメールを送信しないドメインを使用している。以下のように設定した。
_dmarc IN TXT "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s; rua=mailto:dmarc@example.com"
情報を確認するコマンド。
# opendmarc-check yo7612.com
DMARC record for yo7612.com:
Sample percentage: 100
DKIM alignment: relaxed
SPF alignment: relaxed
Domain policy: none
Subdomain policy: reject
Aggregate report URIs:
mailto:dmarc@yo7612.com
Failure report URIs:
(none)
#
opendmarcのインストール・設定
以下のコマンドでインストールする。
# dnf -y install opendmarc
/etc/opendmarc.conf を編集する。以下の項目を設定する。
AuthservID bearcat.yo7612.com
HistoryFile /var/spool/opendmarc/opendmarc.dat
IgnoreHosts /etc/opendmarc/ignore.hosts
Socket inet:8893@localhost
SoftwareHeader true
SPFIgnoreResults true
SPFSelfValidate true
Syslog true
TrustedAuthservIDs bearcat.yo7612.com
UMask 0002
UserID opendmarc:mail
つづいて/etc/opendmarc/ignore.hosts を編集する。以下の内容を記載する。
127.0.0.1
::1
上記ファイルの所有権を設定する。
# chown opendmarc.opendmarc /etc/opendmarc/ignore.hosts
自動起動の設定。
# systemctl enable opendmarc
# systemctl start opendmarc
# systemctl status opendmarc
これでopendmarcの設定は完了である。
postfixの設定
/etc/postfix/main.cf のsmtpd_milters に inet:127.0.0.1:8893 を追加する。
### DKIM and OpenDMARC Settings
smtpd_milters = inet:127.0.0.1:8891, inet:127.0.0.1:8893
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
この後postfixをリスタートして設定は完了である。
OpenARCの設定
openarcのインストール
以下のコマンドでインストールする。
# dnf -y install openarc
openarcの定義修正
/etc/openarc.conf を編集する。以下のように設定した。
Syslog yes
UserID openarc:openarc
###Socket local:/run/openarc/openarc.sock
Socket inet:8892@localhost
SignHeaders to,subject,message-id,date,from,mime-version,dkim-signature
PeerList /etc/openarc/PeerList
MilterDebug 6
EnableCoredumps yes
Mode sv
Canonicalization relaxed/simple
Domain yo7612.com # change to domain
Selector 20240311
KeyFile /etc/openarc/keys/yo7612.com/20240311.private
SignatureAlgorithm rsa-sha256
鍵のコピーとアクセス権設定
鍵はDKIMと同じものを利用できるが、所有権の関係からコピーして利用する。
/etc/openarc.confのKeyFileに指定した場所にコピーする。
最後に chown -R openarc:openarc /etc/openarc/keysを実行しておく。
postfixの設定
/etc/postfix/main.cf のsmtpd_milters に inet:127.0.0.1:8892 を追加する。
### DKIM, OpenDMARC and OpenARC Settings
smtpd_milters = inet:127.0.0.1:8891, inet:127.0.0.1:8893, inet:127.0.0.1:8892
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
この後postfixをリスタートして設定は完了である。
以上で、SPF/DKIM/DMARC/ARCの設定はとりあえず完了である。
課題
OpenARCで複数ドメインの取り扱いがわからない。
→ 上記の設定をすてて、Rspamdにしてみた。
コメント