SPF,DKIM,DMARCとARCに対応してみる

postfix

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にしてみた

コメント

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