ARC (Authenticated Received Chain) とは、電子メールの認証結果を伝搬させるために設計された技術です。具体的には、DMARC や DKIM といった認証方法で得られた結果を、メールの転送過程で維持する目的で開発されました。
メールが配信される際、複数のサーバーを経由して宛先に届きます。このプロセスでは、一部のアクション(例えばリストサーバーやメール転送エージェントなど)が電子メールのコンテンツやヘッダーを変更し、これによって認証が失敗することがあります。
ARC の主な目的は、前述の認証メカニズムで行われたチェックの結果を保持し、メールが他のサーバーに渡されるたびにその情報を追加することです。最終的な受信者のサーバーは、それらの ARC 情報を検証して、メールが途中で改ざんされていないことを確認できます。
これにより、正当なメールが転送やリストサーバーの仲介によって認証に失敗するリスクを減らすことができ、電子メールの信頼性とセキュリティを向上させます。
前提条件
すでに、Postfix, DKIM, DMARC が導入済みという前提です。
AlmaLinux9.2の環境で検証しています。
OpenARC の導入
必要なパッケージをインストールします。
sudo yum -y install epel-release
sudo yum -y install openarc
OpenARC の設定
OpenARC の設定ファイルを作成します。
sudo vi /etc/openarc.conf
設定例
PidFile /var/run/openarc/openarc.pid
Socket inet:8892@localhost
Mode sv
AuthservID example.net
Selector default
Domain example.net
KeyFile /etc/openarc/keys/example.net/default.private
#
SignHeaders to,subject,message-id,date,from,mime-version,dkim-signature
PeerList /etc/openarc/PeerList
MilterDebug 6
EnableCoredumps yes
設定ファイルを保存し、example.net
と Selector
の値を適切なものに置き換えてください。
次に、秘密鍵を作成します。
mkdir /etc/ssl/private/
openssl genrsa -out /etc/ssl/private/arc.key.pem 2048
Postfix の設定
Postfix に OpenARC を連携させます。
Postfix の設定ファイル /etc/postfix/main.cf
を編集し、以下の設定を追加します。
sudo vi /etc/postfix/main.cf
# OpenDKIM:8891 & OpenDMARC:8893 & OpenARC:8892
milter_protocol = 6
milter_default_action = accept
smtpd_milters = inet:localhost:8891,inet:localhost:8892,inet:localhost:8893
non_smtpd_milters = inet:localhost:8891,inet:localhost:8892,inet:localhost:8893
これにより、メール送信時にローカルホストの 8893 ポートにある OpenARC milter に接続します。
ARC 鍵ペアの用意
鍵ペアは、OpenDKIMで生成したものを使用します。
sudo cp -r /etc/opendkim/keys/ /etc/openarc
sudo chown -R openarc.openarc /etc/openarc/keys
ファイルの所有者とグループを openarc に変更しておきます。
DKIM/ARCレコードをDNSに追加
公開鍵をDNSに追加するため、 以下のレコードを追加します。(<selector>
と <your_public_key>
は実際の値に置き換えてください)。
すでに、DKIMを導入している場合は、登録されているはずです。
<selector>._domainkey IN TXT "v=DKIM1; k=rsa; p=<your_public_key>"
OpenARCの設定の確認
rootアカウントで1行で実行する場合は、sudo
とsu
コマンドを組み合わせて使用します。以下のコマンドで、openarc
ユーザーとしてopenarc -n
を実行できます。
sudo su -s /bin/bash openarc -c "openarc -n"
このコマンドでは、-s
オプションを使用して/bin/sh
シェルを指定し、-c
オプションでopenarc -n
コマンドを実行しています。
サービスの起動と有効化
OpenARC サービスを起動し、自動起動設定を有効にします。
4. OpenARC サービスの起動と有効化
sudo systemctl enable openarc
sudo systemctl start openarc
これで ARC 対応のメールサーバーが構築されました。テストメールを送信して、セットアップが正常に完了したことを確認してください。メールヘッダー内に ARC 署名が追加されているはずです。
OpenARCの動作確認
ARC署名が正しく動作しているかどうかを受信したメールヘッダーで確認することができます。メールヘッダには、
ARC-Authentication-Results
, ARC-Message-Signature
, および ARC-Seal
といった項目が含まれています。これらの内容を確認することで、ARC署名の動作状況を判断することができます。
以下は、メールヘッダーのサンプルです。
ARC-Authentication-Results: i=1; mx.example.com;
spf=pass (example.com: domain of example-spf@example.com designates 1.2.3.4 as permitted sender) smtp.mailfrom=example-spf@example.com;
dkim=pass (1024-bit key; unprotected) header.d=example.com header.i=@example.com header.b="aBcDeFgH";
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=selector;
ARC-Seal: i=1; a=rsa-sha256; s=selector; d=example.com; t=1234567890; cv=none
メールヘッダーで次の項目を確認してください
Authentication-Results
この行が存在し、SPFやDKIMの結果が表示されているか確認してください。
このヘッダーには、ARC(Authenticated Received Chain)の検証結果が含まれています。arc=pass
が含まれている場合、メールは正常に検証され、送信されました。
Authentication-Results: example.com; arc=pass (example.net)
このヘッダーには以下の検証結果が含まれています。
- ARC: arc=passとあれば、ARC署名は有効です。
- DKIM:
dkim=pass
とあれば、DKIM署名は有効です。 - SPF:
spf=pass
とあれば、SPFレコードも有効です。 - DMARC:
dmarc=pass
とあれば、DMARCポリシーも遵守されています。
RC-Message-Signature
このヘッダーは、openarc
によって生成され、メールの署名情報が含まれています。これはARCチェーンの一部です。
署名されたメールを示すためにこのフィールドが存在していることを確認してください。また、正しいドメイン(d=
)とセレクタ(s=
)が指定されていることも重要です。
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=example.net;
s=test; t=1612005887;
h=from:message-id:date:mime-version:dkim-signature:dkim-signature;
bh=aa2cwT1Vd/S5MpJptBktWXfPvxKt9w7Rt6Y3NsFuO4I=;
b=rUcIVlpp+m76IQEHBkbTKucNG1vdbZORpa0lDff21eZpMaAQnqLSE/dz8OiDRPfbkB
acnNwQDYzBnzvhLfauG1MJ0f+rnk4oHlgw6ogonmO+N0bzpojxztv/c9DQLLKFC3NY
MgEgIyRni0fB1xQ8dqn68qGz6fnAyhXsrX2Bq46A=
ARC-Seal
これはARCチェーンをシールするために使用されます。cv=none
が表示されていれば、これが最初のARCシグニングエージェントであることを示します。以降のメール転送時に cv=pass
が表示されることを期待します。
ARC-Seal: i=1; a=rsa-sha256; t=1686651959; cv=none;
これらの項目がすべて正しく設定されていれば、ARC署名が正常に動作していることがわかります。