はじめに

epstdmarc は、Windows Server製品用のコマンドプロンプトで実行可能な送信ドメイン認証Domain-based Message Authentication, Reporting and Conformance (DMARC) へ対応したヘッダ記載(シグネチャ及び判定ヘッダ)履歴ファイルの作成プログラムで弊社メールサーバー製品にアドインすることにより、メール受領時において送信ドメイン認証(DMARC)を機能させることが可能になります。
epstarc は、Windows Server製品用のコマンドプロンプトで実行可能なARC(Authenticated Received Chain)用ヘッダを追加し、各段階での認証評価を表示する電子メール認証機能の仕組みを付加することが可能になります。
本アドインプログラムのみで、メール受信時には、SPF、DKIM、DMARC、ARCの判定結果のヘッダへの記載が可能且つ、メール送信時は、DKIM用のシグネチャヘッダの記載を実施しますので別途SPFやDKIMアドインプログラムの組込みは不要です。
本機能の設定は、

  1. メール受信時のヘッダ記載(シグネチャ及び判定ヘッダ)と履歴ファイルの作成(本ページで解説)
  2. 履歴ファイルをデータベースへインポート後、日時処理で送信元ドメインへレポート送付(別ページで解説)
という2部構成です。
"DMARCの履歴ファイルを元に送信元ドメインへレポート送付"を行わない場合は、"epstdmarc.ini"内の"HistoryFile"を空欄として本ページのみの設定で完了します。

ご使用の条件に同意されない限り、本ソフトウェアの使用はできません。

ご使用の条件

  1. 本ソフトウェア(バージョン)は、著作権は、株式会社イー・ポストに帰属します。
  2. 弊社は、本ソフトウェアの使用に関して直接、または間接に生じる損害について責任は一切負かねますのでご了承ください。
  3. 本ソフトウェアを転載する場合は、事前に弊社へのメールをお願いいたします。
  4. 本ソフトウェアに逆アセンブルや改造をくわえることの無いよう、お願いいたします。

使用環境

Windows 2008 R2/2012(R2)/2016/2019 Server

ファイル構成

"epstdmarc.zip"には以下のファイルが含まれています。

  1. readme.html  (このファイル)
  2. readme-report.html (DMARCの履歴ファイルを元に送信元ドメインへレポート送付する場合の設定手順)
  3. epstdmarc.exe (DKIM署名およびSPF/DKIM/DMARC検証用 DOSプログラム本体)OpenDMARCを利用するためのラッパープログラム兼SPF,DKIM検証プログラム
  4. epstdmarc.ini (epstdmarc.exe実行時の設定テーブル)
  5. epstarc.exe (ARCメール(Authenticated Received Chain)ヘッダを追加する DOSプログラム本体)OpenARCを利用するためのラッパープログラム
  6. epstarc.<domain>.ini (epstarc.exe実行時のドメイン別設定テーブル)epstdmarc.exeより呼び出します
  7. epstdkim.ini (DKIM署名および検証対応テーブル)
  8. libdkim.dll (DKIM ライブラリDLL libdkim-1.0.21) LIBDKIM
  9. sendmail.exe (DMARC検証でfail判定時に送信元へのアラートメール通知用メールクライアント DOSプログラム)
  10. sednmail.ini (sendmail.exe 実行時の設定テーブル)
  11. sign.bat (openssl にてDKIM署名&検証用の秘密鍵、公開鍵の生成用)
  12. openssl.exe (opensslプロジェクト openssl-1.1.1d) OPENSSL
  13. libcrypto-1_1.dll (openssl用DLL)
  14. libssl-1_1.dll (openssl用DLL)
  15. reportフォルダ
    • initdb.bat (sqlサーバへユーザ及びデータベースを一括登録するためのバッチファイル)
    • epstdmarc-send-reports.bat (日時処理用のバッチファイル)
    • opendmarc-expire (データベースより90日以降のデータを削除するためのPerlスクリプトファイル)
    • opendmarc-import (データベースへ履歴ファイルを登録するためのPerlスクリプトファイル)
    • opendmarc-reports (データベースから送信元ドメインへ履歴送付するためのPerlスクリプトファイル)
    • report/dbフォルダ (データベースへ登録用)
      • README.schema (データテーブルの説明:英文)
      • schema.mysql (登録データベースのスキーマファイル)
    • report/webフォルダ (IISへの設定用)
      • test.php (PHP設定情報一覧)
      • testsql.php (SQL接続確認用)
      • dashboard.php (データベースへ登録されているデータ一覧を表示)
      • opendmarc-dashboard-config.php (dashboard.phpを動作するための設定ファイル)
      • index.php (データベースへ登録されているデータから統計表示)
      • opendmarc-report-analyzer.conf (index.phpを動作するための設定ファイル)
      • default.css (index.phpを動作するためのcssファイル)
      • function.php (index.phpを動作するためのphpファイル)
      • list.php  (index.phpを動作するためのphpファイル)
      • message.php  (index.phpを動作するためのphpファイル)
      • result.php (index.phpを動作するためのphpファイル)

インストール

epstdmarc.zipを"C:\Program Files\EPOST\MS\epstdmarc"フォルダへ解凍します。

DNSへの設定

  1. 初めに、送信先が、SPF/DKIM/DMARCの判定が行えるようにドメインの管理者がDNSサーバのTXTレコードにそれぞれ設定を行います。
    1. SPFレコードの設定例
      example.co.jp. IN TXT "v=spf1 ip4:12.34.56.78 include:example.co.jp -all"
    2. DKIMレコードの設定例
      test._domainkey.example.co.jp. IN TXT "v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDth595Mu7MWD2twVKMKnyJJRc6+cFnkjBy2xNyxha95IjrUP3Vr1EP8nN4P2fL6b5qA6B7ELquKKxdjYRUmP04uSWmDMzpYWoacz5LwQS2DwfFPuAZF7fk0OKkyta+AbXuDULytHOt6wmY6zkiDrEpGREfGB4vVbtTkGoCaozmkQIDAQAB"
      ※署名データの作成方法はDKIM署名データの作成を参照して下さい。
    3. ARC用レコードの設定例
      arc_test._domainkey.example.co.jp. IN TXT "k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDth595Mu7MWD2twVKMKnyJJRc6+cFnkjBy2xNyxha95IjrUP3Vr1EP8nN4P2fL6b5qA6B7ELquKKxdjYRUmP04uSWmDMzpYWoacz5LwQS2DwfFPuAZF7fk0OKkyta+AbXuDULytHOt6wmY6zkiDrEpGREfGB4vVbtTkGoCaozmkQIDAQAB"
      ※署名データの作成方法はDKIM署名データの作成を参照して下さい。(ARCレコードの設定もDKIMレコードの設定と同様の手順です。)
    4. DMARCレコードの設定例
      _dmarc.example.co.jp. IN TXT "v=DMARC1; p=none; rua=mailto:dmarc-ra@example.co.jp; ruf=mailto:dmarc-ra@example.co.jp"

  2. DKIM署名データの作成
    DKIM署名、検証用の秘密鍵、公開鍵を作成するため、DOS プロンプトよりインストールフォルダ"C:\Program Files\EPOST\MS\epstdmarc"へ移動し "sign.bat" を実行します。
    実行書式
    sign.bat <セレクタ名>
    実行例: セレクタ名を'test'とした場合
    sign.bat test
    フォルダ内に、test.private(秘密鍵), test.public(公開鍵) の2つのファイルが作成されたことを確認してください。
    この2つファイルは、メールヘッダへのDKIMサイン時に使用する為に必要になりますので、インストールフォルダ"C:\Program Files\EPOST\MS\epstdmarc"から削除しないでください。
    ※)
    sign.batはデフォルトで1024bit長の鍵を生成します。
    2046bit長の鍵を生成したい場合は、メモ帳等で編集し'1024'の記載を'2048'に変更し実行してください。
    openssl genrsa -out %1.private 1024openssl genrsa -out %1.private 2048
    なお、2048bit長で作成された公開鍵をDNSのTXTレコードに登録する、255バイト以下単位になるように鍵のレコードを2つに分けてそれぞれダブルクォーテーションで囲って登録します。
    2048bit長の公開鍵をDNSのTXTレコードに設定する場合
    ふたつに分ける
    test._domainkey.example.co.jp. 300 IN TXT "v=DKIM1; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GP....""....oQm5sqLjz2eU76GlJwIDAQAB..."
    ふたつに分ける

  3. 次に、作成した公開鍵(test.public)をDNSに定義します。
    test.public はメモ帳で開き、先頭行の"-----BEGIN PUBLIC KEY-----"および最終行の"-----END PUBLIC KEY-----"と改行を除去し、1行にしたものを定義します。
    -----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtK9uRps4+UCQ8+bMtK5l3fZQP


    oQm5sqLjz2eU76GlJwIDAQAB
    -----END PUBLIC KEY-----
    ↓ 改行を削除し1行にする。
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtK9uRps4+UCQ8+bMtK5l3fZQP....oQm5sqLjz2eU76GlJwIDAQAB
    [DNSへの設定例(試験運用時 t=y)]
    test._domainkey.example.co.jp. 300 IN TXT "v=DKIM1; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtK9uRps4+UCQ8+bMtK5l3fZQP....oQm5sqLjz2eU76GlJwIDAQAB...<省略>"
    [DNSへの設定例(正式運用時 t=y を削除)]
    test._domainkey.example.co.jp. 300 IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtK9uRps4+UCQ8+bMtK5l3fZQP....oQm5sqLjz2eU76GlJwIDAQAB...<省略>"
  4. 次に、DKIMの実行動作を規定する定義ファイル dkim.iniをメモ帳で開き署名する接続許IPアドレスや送信元エンベロープを定義します。

動作確認方法

  1. 署名と検証
    DOS プロンプトよりインストールフォルダ"C:\Program Files\EPOST\MS\epstdmarc"へ移動します。
    任意のEML形式のメールファイルを用意し、以下の命令を実行します。
    epstdmarc.exe <送信元IP> <送信元エンベロープ(From address)> <EML形式のファイル名> <実行したマシン名FQDN>
    と実行すると、指定したEML形式のファイル名のヘッダに、"DKIM-Signature: "に続くヘッダが記載されます。
    本例では、epstdmarc.iniファイルで指定した、送信元IP若しくは、送信元エンベロープでアクションとして "test" が記載されている行と一致した場合にヘッダが追加されることになります。
    また、"verify"が記述されている行と一致した場合、"Authentication-Results: "のヘッダが追加されます。
    epstarc.exeが同一フォルダ上に存在している場合は、"ARC-Seal:","ARC-Message-Signature:,"ARC-Authentication-Results:"の3つのヘッダが追加されます。

epstdkim.ini ファイル定義例

'書式
'<Sign IP or エンベロープFROM><TAB><ACTION>
' <ACTION>は,none,verify,セレクタ(DNSに定義した名称)のいずれかを記載
' none = 何もしない
' verify = 検証
' その他の文字列 = 記載した文字列をセレクタとして署名
@example.co.jp test ← エンベロープの送信元が example.co.jp の全てのメールアドレスに, test(セレクタ名)で署名する。
* verify ← 上記以外のメールを検証する。(検証が不要な場合は、削除またはnoneを指定)

epstdmarc.ini ファイル定義例

項目意味
FailureReports(BOOL値)true
DMARCテストが失敗し、メッセージの送信者がそのレポートを要求している場合、障害レポートの生成を行います。
レポート形式はRFC6591に準拠しています。
FailureReportsOnNone(BOOL値)false
"FailureReports"の補足として、"none"ポリシーを設定しているドメインへの障害レポートの生成を行います。
FailureReportsSentBy(文字列)noreply-dmarc-support@example.co.jp
障害レポートを送信するときに使用されるFrom:ヘッダの内容を設定します。
HistoryFile(文字列)c:\program files\epost\ms\dmarc\report\epstdmarc.dat
DMARC集計レポートの生成に使用できるレコードを書込むファイル名をフルパスで指定します。
順次書込まれたレコードは、受信した単一のメッセージに関する情報を含む行の集合として、DMARC集計レポートの生成に必要なすべての関連情報が含まれます。
これは、集約レポートを抽出できるリレーショナルデータベース(SQLサーバ等)に定期的にインポートされることを想定したものです。
不要の場合は空欄とします。
指定した場合は、このパス(ディレクトリ)は事前に手動で作成しておく必要があります。
ReportCommand(文字列)sendmail.exe -tjp
FailureReportsが有効な場合、障害レポート送信用の外部コマンドを指定します。
デフォルトは"sendmail.exe -tjp"です。
RecordAllMessages(BOOL値)false
設定され、 HistoryFileにファイル名が指定されている場合、受信したすべてのメッセージをファイルに記録する場合有効にします。
未設定の場合(デフォルト:false)、From:ドメインがDMARCレコードを発行したメッセージのみをファイルに記録されます。

sendmail.ini ファイル定義例

項目意味
family=(数値)0
アドレスファミリーを指定します。IPv4=0/IPv6=1
charset=(文字列)iso-2022-jp
送信メールの文字コードを指定します。
smtpserver=(文字列)127.0.0.1
接続SMTPサーバのアドレスを指定します。
port=(数値)25
接続SMTPサーバのポートを指定します。
esmtp=(数値)0
SMTP接続時にSMTP認証を行う場合'1'を指定します。
authid=(文字列)
SMTP認証時のIDを指定します。
authpass=(文字列)
SMTP認証時のパスワードを指定します。
ssl=(数値)0
SSL/TLSによるSMTP接続時に'1'を指定します。
debug=(数値)0
実行状態をトレース表示する場合'1'を指定します。
timeout=(数値)300
無通信タイムアウト時間(秒単位)を指定します。

epstarc.<自身のホスト名>.ini ファイル定義例

※自身のホスト名は、TELNET等でSMTPサービスに接続した際に応答される "220 xxx.hogehoge.jp E-POST ESMTP Receiver..." で応答されるホスト名です。
たとえば、応答結果のホスト名が、"xxx.hogehoe.jp" の場合は、"epstarc.xxx.hogehoe.jp.ini"ファイルとして定義します。
'書式
'<設定項目><SP>又は<TAB><ACTION>

epstarc.<自身のホスト名>.ini ファイル定義例

項目設定値意味
Modesvs=sign v=verify
AuthservIDxxx.hogehoge.jpTELNET等でSMTPサービスに接続した際に応答される "220 xxx.hogehoge.jp E-POST ESMTP Receiver..." で応答されるホスト名(FQDN)
Domainhogehoge.jpドメイン名
Canonicalizationrelaxed/simple左辺ヘッダの正規化/左辺本文の正規化
Selectorarc_e0001DNSのTXTレコードにARC用に使用する識別名 (DKIMの設定方法と同じ)
KeyFileC:\PROGRA~1\EPOST\MS\epstdmarc\e0001.privateセレクタに対応する秘密鍵ファイル(フルパスで指定:スペースが含まれる場合はショートネームで指定)
SignHeadersto,subject,message-id,date,from,mime-version,dkim-signature 署名の生成時に含めるヘッダー フィールドのセットを指定します。
指定はカンマ区切りで行い、大文字と小文字の区別はありません。
ARC 仕様で義務付けられているヘッダー・フィールドがリストに省略されている場合、それらのフィールドは暗黙的に追加されます。 デフォルトでは、DKIM仕様に「署名すべき(SHOULD)」と記載されているフィールド(RFC6376、5.4節)が署名されます。
SignatureAlgorithmrsa-sha256署名用アルゴリズムを指定します

E-POST Mail(SMTP) Server シリーズへのアドイン方法

  1. epstrs.exeのバージョンは、v4.78以降で利用可能になります。バージョンが古い場合は動作しませんのでご注意ください。
  2. epstdkimの実行パスの設定項目に本プログラムを設定することで、DMARC(SPF,DKIMも含む)判定が有効になります。
    既にepstdkim.exeを設定している場合は、epstdmarc.exeと書換えてください。
  3. 以下のレジストリ値を新規に作成し、値を設定します。
    HKEY_LOCAL_MACHINE
    → SYSTEM
    → CurrentControlSet
     → Services
      → EPSTRS
      → OnDKIM DWORD値 (SPF確認の有無 0:しない / 1:する)1 を設定
      → DomainAUTHDKIM 文字列 (フルパスでepstdmarc.EXEを指定します。
      メールサーバーのインストールフォルダ(空白の含まれるパス)に保管した場合は、ショートパス名 "c:\PROGRA~1\EPOST\MS\epstdmarc\epstdmarc.exe" を設定します。)
  4. 設定後、EPSTRSを再起動します。
  5. ログの取得について
    epstdmarc.exe インストールフォルダ下に"dmarclog"という名称でフォルダを作成しますと、以降メール受信時にログが出力されます。
    "dmarclog"フォルダを削除することにより、ログは記録されなくなります。

関連リンク

OPENSSL
LIBDKIM
OpenDMARC
OpenARC

その他

ご意見などは、E-mail:info@e-postinc.jp までお願いいたします。
また、最新の情報は"http://www.e-postinc.jp/"にて行う予定です。

変更履歴

v1.00 2020.01.22
公開
v1.01 2020.02.01
送信元エンベロープが空欄の場合引数が一致しなくなる不具合を修正。
v1.02 2020.02.10
1カラム目にdotがあるとそのdotが消えてしまう不具合を修正。
v1.03 2020.06.23
判定結果が失敗時のエラー詳細コードを返すようにした。
v1.04 2023.12.20
プレフィックス無しのIP判定が失敗する不具合を修正。
v1.05 2024.01.19
1.ARC(Authenticated Received Chain)用ヘッダを追加。
2.ヘッダ1項目が2048byteを越えると該当行からヘッダ分離されてしまう不具合。
3.ARCヘッダに2048bitでサインするとハングしてしまう不具合。
v1.06 2024.02.17
1.ARC実行の結果(成功有無)をログに記録するようにした。
2.本文中に1カラム目のdotがあると、誤ったサインの結果を出力した不具合。
3.Subject:ヘッダが未指定のDKIMサインの判定が失敗していた不具合。

Copyright© E-POST Inc. 2020-2024

-許可なく内容の転載を禁じます。-