【AlmaLinux9】RspamdにDKIM、ARC、DMARC機能を追加する方法

記事内に広告が含まれています。

「AlmaLinx9」にインストールされている「Rspamd」に「DKIM」「ARC」「DMARC」の設定を追加する方法です。

「SPF」については、初期設定でメール受信時にチェックを行う設定となっているので、特に設定を行う必要はありません。

「AlmaLinux9」へ「Rspamd」をインストールする方法は下記のページで説明しています。

https://www.server-memo.net/server-setting/rspamd/almalinux9_rspamd_install.html

「SPF」「DKIM」「DMARC」「ARC」についての説明は以下のページなどを参照して下さい。

Rspamd構築手順

  1. 【AlmaLinux9】Rspamdをインストールする方法
  2. 【AlmaLinux9】RspamdにDKIM、ARC、DMARC機能を追加する方法‎
  3. 【AlmaLinux9】Rspamdに許可・不許可リスト(ホワイトリスト・ブラックリスト)の設定を追加する方法

DKIMの設定

「Rspamd」でDKIMの認証機能を有効化するために、下記の作業を行っていきます。

  • DKIM用の秘密鍵・公開鍵の作成
  • 設定ファイル「/etc/rspamd/local.d/dkim_signing.conf」作成
  • DNSへDKIMレコードの登録

DKIMは「Rspamd」の設定ウィザード「rspamadm configwizard」でも設定できますが、秘密鍵や公開鍵を再作成する場合にそなえて、ここでは手動での設定方法を説明します。

設定内容は、「rspamadm configwizard」を以下の内容で実行した場合に生成される設定ファイルと同じになるように作成します。

ただし、秘密鍵のパスとセレクタの設定は、手動で作成する秘密鍵とセレクタの内容に合わせて変更します。

下記が「rspamadm configwizard」のDKIM設定部分の抜粋です。

Do you want to setup dkim signing feature?[y/N]: y
How would you like to set up DKIM signing?
1. Use domain from mime from header for sign
2. Use domain from SMTP envelope from for sign
3. Use domain from authenticated user for sign
4. Sign all mail from specific networks

Enter your choice (1, 2, 3, 4) [default: 1]: 1
Do you want to sign mail from authenticated users? [Y/n]: y
Allow data mismatch, e.g. if mime from domain is not equal to authenticated user domain? [Y/n]: y
Do you want to use effective domain (e.g. example.com instead of foo.example.com)? [Y/n]: n
Enter output directory for the keys [default: /var/lib/rspamd/dkim/]:   # そのままEnterキーを押下
Enter domain to sign: server-memo.net
Enter selector [default: dkim]:     # そのままEnterキーを押下
Do you wish to add another DKIM domain?[y/N]: n

上記の内容で作成される設定ファイルが以下となります。

sign_authenticated = true;
use_esld = false;
use_domain = "header";
domain {
   server-memo.net {
        selector = "dkim";
        path = "/var/lib/rspamd/dkim/server-memo.net.dkim.key";
    }
}
allow_hdrfrom_mismatch = true;
allow_hdrfrom_mismatch_sign_networks = true;
allow_username_mismatch = true;

赤字の部分が、メールのドメイン名を設定したり、手動で作成した秘密鍵のパスやセレクタを設定する部分です。

DKIM用の秘密鍵・公開鍵の作成

DKIM用の秘密鍵と公開鍵は「rspamadm dkim_keygen」コマンドで作成することができます。

rspamadm dkim_keygen -s セレクタ -b 2048 -d ドメイン名 -k 秘密鍵.private > 公開鍵.txt

作成例

Rspamdの設定ウィザード「rspamadm configwizard」でDKIMを設定すると、秘密鍵と公開鍵は「/var/lib/rspamd/dkim」ディレクトリに作成されます。

手動で秘密鍵と公開鍵を作成する場合も、同じディレクトリを作成して、そこに鍵を生成することにします。

# mkdir /var/lib/rspamd/dkim
# cd /var/lib/rspamd/dkim

DKIM用の秘密鍵と公開鍵を下記の内容で作成します。

  • セレクタ: server-memo202501
  • ドメイン名: server-memo.net
  • 秘密鍵: server-memo.net.private
  • 公開鍵: server-memo.net.txt

秘密鍵はサーバに保管し、公開鍵の内容はDNSへ登録します。

# rspamadm dkim_keygen -s server-memo202501 -b 2048 -d server-memo.net -k server-memo.net.private > server-memo.net.txt
セレクタについて

セレクタはDNSに登録されているDKIMの公開鍵を識別するために使用される文字列で、私はメールアドレスの「ドメイン名+作成年月」といった内容で作成することが多いです。

同じドメイン内で複数のDKIM設定を行う場合、セレクタ名が重複しないように設定してください。

所有者変更

「/var/lib/rspamd/dkim」ディレクトリと、その中にある鍵ファイルの所有者とグループを「_rspamd」に変更します。

# chown -R _rspamd:_rspamd /var/lib/rspamd/dkim

設定ファイル作成

DKIM用の設定ファイル「/etc/rspamd/local.d/dkim_signing.conf」を作成します。

# vi /etc/rspamd/local.d/dkim_signing.conf

設定内容

「rspamadm configwizard」で作成される下記の設定ファイルを元にして、設定ファイルを作成していきます。

sign_authenticated = true;
use_esld = false;
use_domain = "header";
domain {
    ドメイン名 {
        selector = "セレクタ";
        path = "秘密鍵";
    }
}
allow_hdrfrom_mismatch = true;
allow_hdrfrom_mismatch_sign_networks = true;
allow_username_mismatch = true;

秘密鍵を以下の内容で作成しているため、設定ファイルは次のようになります。

  • メールドメイン: server-memo.net
  • セレクタ: server-memo202501
  • 秘密鍵: /var/lib/rspamd/dkim/server-memo.net.private
sign_authenticated = true;
use_esld = false;
use_domain = "header";
domain {
    server-memo.net {
        selector = "server-memo202501";
        path = "/var/lib/rspamd/dkim/server-memo.net.private";
    }
}
allow_hdrfrom_mismatch = true;
allow_hdrfrom_mismatch_sign_networks = true;
allow_username_mismatch = true;

DNSへ公開鍵情報の設定

公開鍵に記述されている内容をDNSに登録します。

# cat server-memo.net.txt 
server-memo202501._domainkey IN TXT ( "v=DKIM1; k=rsa;"      "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDm2WhMe5O45dE/RfudOyyRoifcPFo1I7fZ+TbWeULzWMb8prbmL4SABloJ99cRta0q1SG6lXUlns9TcFAZQ6b/Yz3kIzToWjgRU7X6FmEJ8A7bJn7/+u7T4Oyvfdj2eOO2l2zkvK/rnXqJu6xCmMy9zvP089GULxqJEX+Jjs7GnQIDAQAB" ) ;

登録方法は使用しているDNSサービスによって異なるなるため手順は省略しますが、ムームードメインの場合は以下のように設定します。

DNSに登録文字数の制限がある場合

私はムームードメインのDNSを使っているのですが、2025年01月の時点ではDNSに登録できる文字数の制限が255文字となっていたため、鍵の長さを「-b 2048」で指定するとDNSに登録することができませんでした。

このような場合は、鍵の長さを「-b 1024」と指定して鍵を作成することで生成される鍵の文字数が少なくなるので、DNSに登録することができるようになります。

# rspamadm dkim_keygen -s server-memo202501 -b 1024 -d server-memo.net -k server-memo.net.private > server-memo.net.txt

ARC(Authenticated Received Chain)設定

「ARC」の機能を有効化するために設定ファイルを作成していきます。

ARCの設定にも秘密鍵とDNSレコードの登録が必要ですが、どちらもDKIM用に作成・設定したものをそのまま利用できるため、ここではDKIMの設定で用いた秘密鍵とDNSレコードを使用することにします。

設定ファイル作成

ARC用の設定ファイル「/etc/rspamd/local.d/arc.conf」を作成します。

# vi /etc/rspamd/local.d/arc.conf

設定内容はDKIMで設定した下記の内容が流用が可能です。

use_esld = false;

domain {
    server-memo.net {
        path = "/var/lib/rspamd/dkim/server-memo.net.private";
        selector = "server-memo202501";
    }
}

DMARC設定

DMARCの認証機能を有効化するために、下記の作業を行います。

  • 設定ファイル「/etc/rspamd/local.d/dmarc.conf」作成
  • DNSへDMARCレコードの登録

設定ファイル作成

DMARC用の設定ファイル「/etc/rspamd/local.d/dmarc.conf」を作成します。

# vi /etc/rspamd/local.d/dmarc.conf

最低限の設定は以下のとおりとなります。

reportingの部分でDMARCの集約レポートを受け取る設定を許可しています。

action部分でDMARCの認証結果に基づいて、「Rspamd」が行うアクションの定義をしています。

  • 「quarantine = "add_header";」は認証結果が「quarantine」場合はメールヘッダーに情報を追加
  • 「reject = "reject";」は認証結果が「reject」の場合はメールの受信を拒否
reporting {
    enabled = true;
}
 
actions = {
    quarantine = "add_header";
    reject = "reject";
}

受信したメールのDMARCレポートを送信する設定もありますが、必須ではないので今回は省略しています。

設定方法については別途節目のページを作成する予定です。

DNSへの設定

DMARCレコードをDNSにの設定します。

基本の設定は下記のようになります。

_dmarc	3600	IN	TXT	"v=DMARC1; p=ポリシー; rua=mailto:メールアドレス"

設定内容説明

RMARCレコードの設定に内容について簡単に説明します。

より詳しい説明を下記のページで解説していますので、興味があれば参照してみてください。

https://vpslife.server-memo.net/dmarc-record_setting/

v=DMARC1

「v=」は必須の設定で、DMARCのバージョン「DMARC1」と設定します。

p=ポリシー

「p=」は必須の設定で、DMARCの認証結果についてのポリシーを、下記の3種類から選んで設定する必要が有ります。

  • 何もしない p=none
  • 隔離 p=quarantine
  • 拒絶 p=reject

ポリシー設定は、いきなり「拒否(reject)」とするのではなく、まずは「何もしない(none)」の状態から始めて、誤ってなりすましと判定されてしまっているメールがないか確認することをおすすめします。

その後、「隔離(quarantine)」に変更し、しばらく様子を見て、問題がないことが確認できたら、最終的に「拒否(reject)」に設定するのが良いでしょう

rua=mailto:メールアドレス

ruaタグでメールアドレスを設定すると、「SPF」や「DKIM」の認証結果をまとめたDMARC集計レポートが受信側がレポートを送信する設定場合に送られてきます。

送信されるメールの数や宛先が多いと、その分多くのレポートメールが送られてくるので、専用のメールアドレスを用意することをおすすめします。

設定例

実際の設定例です。

_dmarc IN TXT "v=DMARC1; p=none; rua=mailto:dmarc_report@server-memo.net"

ムームードメインでは下記のように設定しています。

メールヘッダーへ認証結果を追加する設定

メールを受信した際に、SPF、DKIM、DMARC認証結果の情報をメールヘッダーに追加する設定を行います。

# vi /etc/rspamd/local.d/milter_headers.conf

最低限の情報で良ければ、以下の設定を行います。

use = ["authentication-results"];

以下のメッセージがメールヘッダーに追加されます。

より詳しい情報が欲しい場合は、下記ページを参考にして設定を行って下さい。

https://rspamd.com/doc/modules/milter_headers.html

設定反映

すべての設定が完了しましたら、設定ファイルの構文チェックを行います。

# rspamadm configtest
syntax OK

問題がなければ「Rspamd」を再起動して設定を反映させます。

# systemctl restart rspamd

動作確認

実際にメールを送受信して動作確認を行っていきます。

メール送信時の動作確認

メールを実際に送信して、受信側でメールのヘッダー部分に記述されている「SPF」「DKIM」「DMARC」の認証状態を確認します。

今回はGmail宛にメールを送信した場合に認証結果を確認する方法説明します。

受信したメールの右側にある「その他」のアイコンをクリックします。

表示されたメニューから「メッセージのソースを表示」を選択します。

「SPF」「DKIM」「DMARC」の認証が「PASS」となっていれば、すべての認証設定が正常に動作しています。

メール受信時の動作確認

メールをgmailなどから送信して、受信したメールのヘッダーを確認し、「SPF」「DKIM」「DMARC」のチェックが行われているか確認をして下さい。

コメント

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