ARCとは

ARCとは「Authenticated Received Chain」と言い、直訳すると「認証済み受信チェーン」となります。
SPF/DKIM/DMARC はそれぞれ本来のサーバから正しくメールが配信されているための仕組みです。

SPF=送信サーバのIPアドレスを確認し、「MAIL FROM」にあるドメインのSPFレコードをDNS検索して、そのIPアドレスが送信を許可されているかを照合する仕組みです。
DKIM=メールヘッダーやメール本文の一部を使って電子署名を付与して送信します。受信サーバはDNSから公開鍵を取得し、メールを検証し、内容が改ざんされていないか確認します。内容が改ざんされていないか確認をして、正しいメール(改ざんされていない)であることを確認します。
DMARC=SPFとDKIMの判定から総合的に正しいメールかどうかを判定します。

この3つがあれば十分と思われがちですが、実はメールが「転送」されると発信元が変わりSPFやDKIMの情報では受信サーバが「ドメインと発信サーバが違う」と判定します。

【参考図】
発信サーバ->受信A 兼 転送サーバ->受信Bサーバ
hasin.serverjusinA.serverjusinB.server
  1. 発信サーバからメールが発信されます。メールヘッダーにhasin.serverの印(SPF/DKIM)が付けられます。
  2. 受信A 兼 転送サーバで受信されたメールが改めて受信Bサーバに送信されます。その時にメールは「jusinA.server」からの発信となります。
  3. 受信Bサーバは受け取ったメールヘッダーを見ると「jusinA.server」ですが、メールにつけられている印「SPF/DKIM」が hasin.serverとなっているので「発信サーバ情報が一致しない」と判断され、不正メールとみなされる場合があります。
正しいメールが「不正」と判定されてしまうのは問題です。特にこのパターンにはまる傾向があるようです。
そこで「ARC」の登場となるわけです。
ARCを使うと、経由したサーバが認証結果を記録し、最終受信サーバに「途中までの認証結果は有効だった」という情報を引き継ぎます。
その認証結果を基に受信したメールを信頼するという仕組みです。ARCは以下のような感じで動きます。
[ 送信元 ]           [ 転送元 ]           [ 受信先 ]
  taiyudenki ---------> Gmail ------------> @nifty
      |                   |                   |
  (DKIM署名)          (ARC署名)           (ARC検証)
      |            「前の認証はOK」      「鎖がつながった!」
      +------------------印------------------> 合格
もう少しわかりやすい図

※注意※
ARC は DMARC の代わりではありません。
あくまで「途中の中継サーバが認証結果を記録する仕組み」です。

★dnf で openarcをインストールする
# dnf info openarc
メタデータの期限切れの最終確認: 4:03:54 前の 2025年07月14日 10時31分57秒 に実施しました。
利用可能なパッケージ
名前         : openarc
バージョン   : 1.0.0
リリース     : 0.15.Beta3.el9
Arch         : x86_64
サイズ       : 59 k
ソース       : openarc-1.0.0-0.15.Beta3.el9.src.rpm
リポジトリー : epel
概要         : An open source library and milter for providing ARC service
URL          : https://github.com/trusteddomainproject/OpenARC
ライセンス   : BSD and Sendmail
説明         : The Trusted Domain Project is a community effort to develop and maintain a
             : C library for producing ARC-aware applications and an open source milter for
             : providing ARC service through milter-enabled MTAs.

# dnf install openarc
メタデータの期限切れの最終確認: 4:07:14 前の 2025年07月14日 10時31分57秒 に実施しました。
依存関係が解決しました。
============================================================================================================================
 パッケージ                   アーキテクチャー         バージョン                              リポジトリー           サイズ
============================================================================================================================
インストール:
 openarc                      x86_64                   1.0.0-0.15.Beta3.el9                    epel                    59 k
依存関係のインストール:
 libopenarc                   x86_64                   1.0.0-0.15.Beta3.el9                    epel                    42 k

トランザクションの概要
============================================================================================================================
インストール  2 パッケージ

ダウンロードサイズの合計: 102 k
インストール後のサイズ: 187 k
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/2): libopenarc-1.0.0-0.15.Beta3.el9.x86_64.rpm                                           639 kB/s |  42 kB     00:00
(2/2): openarc-1.0.0-0.15.Beta3.el9.x86_64.rpm                                              785 kB/s |  59 kB     00:00
----------------------------------------------------------------------------------------------------------------------------
合計                                                                                        252 kB/s | 102 kB     00:00
トランザクションを確認しています
トランザクションの確認に成功しました。
トランザクションをテストしています
トランザクションのテストに成功しました。
トランザクションを実行しています
  準備中           :                  1/1
  インストール中   : libopenarc-1.0.0-0.15.Beta3.el9.x86_64              1/2
  scriptletの実行中: openarc-1.0.0-0.15.Beta3.el9.x86_64                 2/2
  インストール中   : openarc-1.0.0-0.15.Beta3.el9.x86_64                 2/2
  scriptletの実行中: openarc-1.0.0-0.15.Beta3.el9.x86_64                 2/2
  検証中           : libopenarc-1.0.0-0.15.Beta3.el9.x86_64              1/2
  検証中           : openarc-1.0.0-0.15.Beta3.el9.x86_64                 2/2

インストール済み:
  libopenarc-1.0.0-0.15.Beta3.el9.x86_64                         openarc-1.0.0-0.15.Beta3.el9.x86_64

完了しました!

★keyfileを作成する
# cd /etc/openarc
# ls -l
合計 4
-r--r-----. 1 openarc openarc 23 10月  3  2022 PeerList

# mkdir keys
# chown openarc:postfix /etc/openarc/keys
# chmod 700 /etc/openarc/keys
# ls -l
合計 8
-r--r-----. 1 openarc openarc   23 10月  3  2022 PeerList
drwx------. 2 openarc openarc 4096  7月 14 15:47 keys

※公式は以下の通りです
# opendkim-genkey -D (キーを保存するディレクトリ) -s (セレクタ名) -d (ドメイン) --restrict <-これは電子メール専用という意味

# opendkim-genkey -D /etc/openarc/keys -s usi.nu.arc.202601 -d usi.nu --restrict
# ls -l keys/
合計 16
-rw-------. 1 root root 916  7月 14 15:50 usi.nu.arc.202601.private    (秘密鍵)
-rw-------. 1 root root 339  7月 14 15:50 usi.nu.arc.202601.txt        (公開鍵、DNSレコード用)

所有者の修正
# chown -R openarc:postfix /etc/openarc/keys/usi.nu.arc.202601.*
# chmod 400 /etc/openarc/keys/usi.nu.arc.202601.private
# ls -l /etc/openarc/keys/
合計 8
-r--------. 1 openarc postfix 916  7月 14 15:50 usi.nu.arc.202601.private
-rw-------. 1 openarc postfix 339  7月 14 15:50 usi.nu.arc.202601.txt

★公開鍵を修正する(*.txt のファイルの中身を編集しておく)
# vi /etc/openarc/keys/usi.nu.arc.202601.txt
変更点
 s=email; -> うまく動作しないときは消してください
v=DKIM1    -> v=ARC1
DKIM key   -> ARC key  コメント欄
※v=DKIM1 のままでも動作します。もし v=ARC1 に書き換える場合は、受信側での検証結果(Authentication-Results)にエラーが出ないか要確認※

usi.nu.arc.202601._domainkey    IN      TXT     ( "v=DKIM1; k=rsa; s=email; "
"p=angoupasu.yamatoiebakawa" )  ; ----- DKIM key usi.nu.arc.202601 for usi.nu

dkimの書き方になっているので arc の書き方に変える
usi.nu.arc.202601._domainkey IN      TXT     ( "v=ARC1; k=rsa; "
"p=angoupasu.yamatoiebakawa" )  ; ----- ARC key usi.nu.arc.202601 for usi.nu

★openarc.serviceのoverride(上書き)
openarc は単体では動きますが、
Postfix からソケット(openarc.sock)経由で利用できないと ARC 署名が付きません。
そのため systemd の設定を上書きして、
・Postfix グループでソケットにアクセスできるようにする
・起動時に自動で /run/openarc を作らせる
という調整を行います。

-----
■ Group=postfix とは?
	openarc は通常 openarc ユーザーで動きますが、
	Postfix からは postfix グループの権限でソケットへ接続します。
	そこで
	
	Group=postfix
	
	と指定し、Postfix が openarc.sock を使えるようにしています。
-----
# systemctl edit openarc
--- 以下の内容に変更する ----
[Service]
Group=postfix
UMask=0007
RuntimeDirectory=openarc
RuntimeDirectoryMode=0755

ctrl+O(オー) で上書き
ctrl+x(エックス)で終了

※ override設定により、起動時に /run/openarc は自動生成され権限も付与されるため、手動設定は初回確認用となります。

◆◆注意◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
◆	保存したときに、以下のメッセージが出ていれば保存はされていません。                                  ◆
◆                                                                                                          ◆
◆	 # systemctl edit openarc                                                                           ◆
◆	Editing "/etc/systemd/system/openarc.service.d/override.conf" canceled: temporary file is empty.    ◆
◆                                                                                                          ◆
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
このメッセージの意味は「ファイルの中身が空っぽだったので、編集をキャンセルしました(保存しませんでした)」です。
何らかの問題でうまく保存できないようです。その場合は直接書き込むことにします。

  1. ディレクトリを作成します。編集ファイルの保存場所です。 # mkdir -p /etc/systemd/system/openarc.service.d
  2. 設定を書いたファイルを作成します。 # vi /etc/systemd/system/openarc.service.d/override.conf 以下、内容です [Service] Group=postfix UMask=0007 ※ RuntimeDirectory の設定は openarc.conf 側と競合したり、バージョンによって挙動が変わることがあるため、まずは一番重要な「グループ権限」と「UMask」だけ設定してシンプルに解決を図ります。 ※ UMask=0007 は、ソケットファイルを所有者とグループのみアクセス可能にするための設定です。
  3. 設定ファイルの変更をデーモンに認識させます。 # systemctl daemon-reload
  4. openarcを再起動します。 # systemctl restart openarc 再起動すると以下のメッセージが表示される場合があります。 Warning: The unit file, source configuration file or drop-ins of openarc.service changed on disk. Run 'systemctl daemon-reload' to reload units. これは、「手動で設定ファイルを書き換えたからデーモンファイルを先に読み込んでください」という意味です。 もう一度、systemctl daemon-reload を実行してから、openarc を再起動をしてください。
  5. Postfixを再起動します。 # systemctl restart postfix
★socketのグループをpostfixに変更。権限も設定 # chgrp postfix /var/run/openarc # chmod 755 /var/run/openarc ※※ socket 権限は systemd override により永続化するため、手動 chmod は初期確認用途とする ★openarc.confを編集(※ ARC では SignHeaders 指定は必須ではないが、明示指定として残す) ------ ■ SignHeaders とは? ARC 署名に含めるメールヘッダーを指定しています。 通常は自動で選ばれますが、 ここでは 重要なヘッダーだけを明示的に指定しています。 もし指定しなくても ARC 自体は動作しますが、 構成を分かりやすくするために記載しています。 ------- # vi /etc/openarc.conf ## See openarc.conf(5) or /usr/share/doc/openarc-1.0.0/openarc.conf.sample for more #PidFile /run/openarc/openarc.pid Syslog yes #UserID openarc:openarc UserID openarc:postfix #Socket local:/run/openarc/openarc.sock Socket local:/var/run/openarc/openarc.sock #SignHeaders to,subject,message-id,date,from,mime-version,dkim-signature SignHeaders to,subject,message-id,date,from,mime-version,dkim-signature,arc-seal,arc-message-signature,arc-authentication-results PeerList /etc/openarc/PeerList MilterDebug 6 EnableCoredumps yes ## After setting Mode to "sv", running ## opendkim-genkey -D /etc/openarc -s key -d ## and putting /etc/openarc #Mode sv #Canonicalization relaxed/simple #Domain example.com # change to domain #Selector key #KeyFile /etc/openarc/key.private #SignatureAlgorithm rsa-sha256 Mode sv Canonicalization relaxed/relaxed Domain usi.nu Selector usi.nu.arc.202601 KeyFile /etc/openarc/keys/usi.nu.arc.202601.private SignatureAlgorithm rsa-sha256 ## debug mode Syslog yes ★postfixのmain.cfを編集 milterを追加 (opendkim と opendmarc は追加済みと仮定) ------ ■ milter_protocol = 6 とは? Postfix と openarc(milter)が通信する際の プロトコルの世代番号です。 最近の Postfix では「6」が推奨されており、DKIM / DMARC / ARC などの milter を併用できるSMTP拡張に対応といった理由で指定しています。 ----- # openDKIM and openDMARC and openARC smtpd_milters = unix:/var/run/opendkim/opendkim.sock, unix:/run/opendmarc/opendmarc.sock, unix:/var/run/openarc/openarc.sock non_smtpd_milters = $smtpd_milters milter_default_action = accept milter_protocol = 6 ★再起動 # systemctl restart openarc /var/log/messages に以下のログがあればOK (エラーが無ければよい) Jun 14 12:10:59 mon systemd[1]: Stopping Authenticated Receive Chain (ARC) Milter... Jun 14 12:11:01 mon systemd[1]: openarc.service: Deactivated successfully. Jun 14 12:11:01 mon systemd[1]: Stopped Authenticated Receive Chain (ARC) Milter. Jun 14 12:11:01 mon systemd[1]: Starting Authenticated Receive Chain (ARC) Milter... Jun 14 12:11:01 mon systemd[1]: Started Authenticated Receive Chain (ARC) Milter. # systemctl restart postfix /var/log/messages に以下のログがあればOK (エラーが無ければよい) Jun 14 12:12:33 mon systemd[1]: Stopping Postfix Mail Transport Agent... Jun 14 12:12:33 mon systemd[1]: postfix.service: Deactivated successfully. Jun 14 12:12:33 mon systemd[1]: Stopped Postfix Mail Transport Agent. Jun 14 12:12:33 mon systemd[1]: postfix.service: Consumed 13.527s CPU time. Jun 14 12:12:33 mon systemd[1]: Starting Postfix Mail Transport Agent... Jun 14 12:12:33 mon systemd[1]: Started Postfix Mail Transport Agent. ★チェック # ls -l /var/run/openarc/ 合計 0 srwxrwx---. 1 openarc postfix 0 7月 14 10:38 openarc.sock ★リブート時に自動起動するように設定する。 サーバを再起動や電源投入をすると自動的に openarc が起動するようにします。 # systemctl enable openarc Created symlink /etc/systemd/system/multi-user.target.wants/openarc.service → /usr/lib/systemd/system/openarc.service. 確認をします。 # systemctl is-enabled openarc enabled ★ゾーンファイルの編集 【ネームサーバの設定を変更します】 $ORIGINを使っている場合は、完全版としてドメインを書いてドットで締めて下さい。 【例】 usi.nu.arc.202601._domainkey の場合 --- [決定版:FQDN形式] 末尾のドメイン名とドットを忘れずに --- usi.nu.arc.202601._domainkey.usi.nu. IN TXT ( "v=ARC1; k=rsa; " "p=angoupasu.yamatoiebakawa" ) --- [決定版:相対名形式] $ORIGIN usi.nu. が定義されている場合 --- usi.nu.arc.202601._domainkey IN TXT ( "v=ARC1; k=rsa; " "p=angoupasu.yamatoiebakawa" ) ARCのキーファイルを追記 DKIM/DMARC/ARCの公開鍵でセレクタ名の末尾にドットを忘れないこと! # cd /var/named # vi zone.file 2025122358 ; serial <- カウントを上げる事 ; openDKIM usi.nu.202506._domainkey.usi.nu. IN TXT ( "v=ARC1; k=rsa; p=angoupasu.yamatoiebakawa"); ; openDMARC _dmarc.usi.nu. IN TXT "v=DMARC1; p=reject; sp=reject; rua=mailto:hoge@usi.nu; ruf=mailto:hoge@usi.nu; fo=1; adkim=r; aspf=r" ; openARC usi.nu.arc.202601._domainkey.usi.nu. IN TXT ( "v=ARC1; k=rsa; p=angoupasu.yamatoiebakawa") 文法チェック # named-checkzone usi.nu /var/named/usi.zone.signed zone usi.nu/IN: loaded serial 2025122358 (DNSSEC signed) OK # named-checkconf # <-問題が無ければ何も表示されません ★再起動 # systemctl restart named ★動作確認 [root@dns named]# systemctl status named ● named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; preset: disabled) Active: active (running) since Mon 2025-07-14 16:50:37 JST; 5s ago Process: 223386 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin> Process: 223388 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/S> Main PID: 223389 (named) Tasks: 8 (limit: 11075) Memory: 24.3M CPU: 55ms CGroup: /system.slice/named.service 223389 /usr/sbin/named -u named -c /etc/named.conf 7月 14 16:50:37 dns.usi.nu named[223389]: zone usi.nu/IN: loaded serial 2026011401 (DNSSEC signed) 7月 14 16:50:37 dns.usi.nu named[223389]: zone usi.nu/IN: sending notifies (serial 2026011401) 7月 14 16:50:37 dns.usi.nu named[223389]: all zones loaded 7月 14 16:50:37 dns.usi.nu named[223389]: running 7月 14 16:50:37 dns.usi.nu systemd[1]: Started Berkeley Internet Name Domain (DNS). 7月 14 16:50:37 dns.usi.nu named[223389]: client @0x7f9a400263d8 133.18.195.89#48471 (usi.nu): transfer> 7月 14 16:50:37 dns.usi.nu named[223389]: client @0x7f9a400263d8 133.18.195.89#48471 (usi.nu): transfer> 7月 14 16:50:37 dns.usi.nu named[223389]: resolver priming query complete 7月 14 16:50:37 dns.usi.nu named[223389]: managed-keys-zone: Key 20326 for zone . is now trusted (accep> 7月 14 16:50:37 dns.usi.nu named[223389]: managed-keys-zone: Key 38696 for zone . is now trusted (accep> -/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-

★メール認証のバトンリレー(メールヘッダー)

メールが転送されると、送信元の証明(SPF)が途切れてしまうことがあります。その問題を解決するのがARC(Authenticated Received Chain)という仕組みです。
以下に、実際の転送過程で記録されたメールヘッダーのサンプルを掲載します。

配送ルート: usi.nuGmail@nifty

注目点は、各サーバーが「認証結果を封印(Seal)」してバトンを渡しているところです。
ヘッダー内の「i=1, i=2, i=3」という数字が、何番目に通過したサーバーであるかを示しています。


1. Gmail受信時のヘッダー(i=2)

Delivered-To: hoge@gmail.com
Received: by 2002:ac4:c8d5:0:b0:772:cbf4:a3bf with SMTP id e21csp212415pim;
        Wed, 11 Feb 2026 06:37:06 -0800 (PST)

ARC-Seal: i=2; a=rsa-sha256; t=1770820626; cv=pass;
        d=google.com; s=arc-20240605;
        b=EwAdFyrQhg... (署名略)
ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com;
        bh=IUas9qVYA... (ハッシュ略)
        b=X0K+eXBZKy... (署名略)

ARC-Authentication-Results: i=2; mx.google.com;
        dkim=pass header.i=@usi.nu;
        arc=pass (i=1);
        spf=pass;
        dmarc=pass header.from=usi.nu

Return-Path: <hogeusi@usi.nu>
Authentication-Results: mz.usi.nu; arc=none
ARC-Seal: i=1; a=rsa-sha256; d=usi.nu; s=usi.nu.arc.202601; cv=none;
        b=qloqux7xl... (署名略)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=usi.nu; s=usi.nu.202509;
        bh=IUas9qVYA... (ハッシュ略)
        b=OKGm51nLBN... (署名略)

To: "Test Gmail" <hoge@gmail.com>
From: usi.nu <hogeusi@usi.nu>
Subject: test mail

this is a test mail.

2. @nifty最終受信時のヘッダー(i=3)

Return-Path : <hoge+caf_=hogeusi=nifty.com@gmail.com>
Authentication-Results : nifty.com;
        dmarc=pass header.from=usi.nu;
        dkim=pass;
        spf=pass smtp.mailfrom=gmail.com;

ARC-Seal : i=3; a=rsa-sha256; t=1770820628; cv=pass;
        d=google.com; s=arc-20240605;
        b=bt+634H8Iq... (署名略)

ARC-Seal : i=2; a=rsa-sha256; t=1770820626; cv=pass;
        d=google.com; s=arc-20240605;
        b=EwAdFyrQhg... (署名略)

ARC-Seal : i=1; a=rsa-sha256; d=usi.nu; s=usi.nu.arc.202601; cv=none;
        b=qloqux7xl... (署名略)

ARC-Authentication-Results : i=3; mx.google.com;
        dkim=pass header.i=@usi.nu;
        arc=pass (i=1);
        spf=pass;
        dmarc=pass header.from=usi.nu

X-Forwarded-To : hogeusi@nifty.com
X-Forwarded-For : hoge@gmail.com hogeusi@nifty.com
Delivered-To : hoge@gmail.com
From : usi.nu <hogeusi@usi.nu>
Subject : test mail

this is a test mail.

以上です。

2026-02-11 初版
2026-02-13 systemctl edit の不具合の場合についてを加筆
       再起動・電源投入時にプログラム起動する手順を加筆

Let's PC の TOPに戻る
ホームページのTOPに戻る