DMARC の導入

あわせて読みたい
「Google社・米国Yahoo社が2024年2月よりメール受信の厳格化」に対応するためのまとめ 【SPF、DKIM、DMA... 迷惑メールや不正行為の対応するための手段として、SPF、DKIM、DMARC等の技術が使われてきました。今までは、比較的容易に対応可能なSPFだけ対応していれば問題なく利用...

DMARC(Domain-based Message Authentication, Reporting & Conformance) は、電子メールのセキュリティを向上させるために設計された技術です。特に、電子メールスプーフィングやフィッシング詐欺からドメインを保護することが目的です。DMARCは、SPF(Sender Policy Framework)およびDKIM(DomainKeys Identified Mail)という2つの既存の電子メール認証技術に依存し、それらを補完します。

目次

動作原理

以下の手順でDMARCが機能します。

  • ポリシーの公開: ドメイン所有者は、DNSレコード(具体的にはTXTレコード)にDMARCポリシーを公開します。このポリシーには、メール認証の期待値、違反報告の受信先、および違反メッセージの処理方法が記載されています。
  • メールの送信: メール送信者は、SPFおよび/またはDKIMを使用して送信されたメールに署名します。
  • メールの受信: メール受信者のシステムは、受信したメールからドメインを抽出し、そのドメインのDMARCポリシーを取得します。
  • 認証チェック: メール受信者のシステムは、DMARCポリシーに従ってSPFとDKIMを検証し、その結果を元にメールの承認または拒否を決定します。
  • 報告: メール受信者のシステムは、ドメイン所有者が指定したアドレスに認証結果の報告を送信します。これにより、ドメイン所有者はメールの送信状況を把握し、不正なメール送信を検出できます。

DMARCポリシー

DMARCポリシーには、以下の要素が含まれます。

v: DMARCプロトコルのバージョン

現在は、 DMARC1

p: メール受信者が認証に失敗したメールをどのように扱うかを示すポリシー

none

このポリシーでは、DMARCチェックに失敗したメールに対して特別な処理は行われません。受信サーバーは、DMARCレポートを生成してドメイン所有者に送信するだけです。しかし、これでドメイン所有者は送信されたメールのDMARC認証状況を把握し、問題がある場合は対策を立てることができます。これは一般的にDMARCの導入初期段階で使用されるポリシーです。

v=DMARC1; p=none; rua=mailto:dmarcreports@example.com

quarantine

このポリシーでは、DMARCチェックに失敗したメールは、受信者のスパム/ジャンクフォルダに配信されます。メールは拒否されず、受信者が自己判断で開くことができます。しかし、認証に失敗したメールは通常の受信トレイに届かないため、フィッシングや他の悪意ある攻撃から保護されます。

v=DMARC1; p=quarantine; rua=mailto:dmarcreports@example.com

reject

このポリシーでは、DMARCチェックに失敗したメールは完全に拒否されます。つまり、メールは受信者に届かず、スパム/ジャンクフォルダにも入りません。これは最も厳格なDMARCポリシーであり、ドメイン所有者は認証プロセスが正しく機能していることを確信している場合にのみ使用すべきです。

v=DMARC1; p=reject; rua=mailto:dmarcreports@example.com

ドメイン所有者は一般的に、DMARCポリシーを none から始め、徐々に quarantine や reject に移行します。これにより、DMARCの導入に伴う潜在的な問題や配信の遅延を最小限に抑えることができます。

rua: 集約レポート

DMARC 集約レポート(RUA)は、ドメイン管理者が DMARC 認証結果や電子メール配信の問題を監視・解析するための重要な情報源です。集約レポートは、DMARC ポリシーに定義された rua タグを使用して設定されます。このタグには、レポートを送信すべきメールアドレスが含まれています。

集約レポートは、以下のような情報を提供しています。

  • 送信元 IP アドレス
  • DKIM 署名と SPF 記録の検証結果
  • DMARC の検証結果
  • 送信されたメールの総数
  • DMARC ポリシーに従ってアクションが実行されたメールの数

通常、これらのレポートは XML 形式で提供されます。そして、ドメイン管理者はこれらの情報を使用して、認証で失敗したメールの原因を特定し、改善策を講じることができます。

rua タグを追加する際は、以下のように DMARC レコードに記述します。

v=DMARC1; p=none; rua=mailto:dmarcreports@example.com

上記の例では、dmarcreports@example.com が集約レポートの送り先メールアドレスとして指定されています。このように設定することで、ドメイン管理者はメール認証に関する貴重な情報を得ることができ、安全性を向上させる取り組みに役立てることができます。

ruf: 個別レポート

DMARC 個別レポート(RUF)は、電子メールが DMARC ポリシーに違反した場合に、その詳細情報を提供する機能です。DMARC レコードに ruf タグを追加することで、個別レポートの受信先メールアドレスを指定できます。

個別レポートは、以下のような情報を含みます。

  • 送信元 IP アドレス
  • 関連するメッセージヘッダー(From、To、Date 等)
  • DKIM 署名と SPF 記録の検証結果
  • DMARC の検証結果

個別レポートは、RFC 6591(ARF: Abuse Reporting Format)に従ってフォーマットされています。DMARC の個別レポートを受信することで、ドメイン管理者は具体的なメール認証エラーや攻撃の詳細を把握し、問題解決に役立てることができます。

ruf タグを追加する際は、以下のように DMARC レコードに記述します。

v=DMARC1; p=none; rua=mailto:dmarcreports@example.com; ruf=mailto:dmarcfailures@example.com;

上記の例では、dmarcfailures@example.com が個別レポートの送り先メールアドレスとして指定されています。ただし、個別レポートは大量のデータを生成する可能性があるため、使用には注意が必要です。まずは集約レポート(RUA)から始め、問題が特定できない場合に限り、個別レポート(RUF)を利用することをお勧めします。

fo:レポートを受け取る条件

fo タグ(Failure Reporting Options)は、メール送信者が DMARC 認証に失敗したメールに関するレポートを受け取る方法を指定します。fo=1 は、メール送信者が SPF または DKIM の少なくとも1つに対して認証に失敗したメッセージに関するレポートを受け取ることを意味します。

fo タグに指定できるオプションは以下の通りです。

  • 0:両方の SPF と DKIM が失敗している場合にのみ、報告を受け取ります。(デフォルト)
  • 1:SPF または DKIM の少なくとも1つが失敗すると、報告を受け取ります。
  • d:DKIM 署名結果のみで失敗した場合に報告を受け取ります。
  • s:SPF の認証結果のみで失敗した場合に報告を受け取ります。

これらのオプションは複数選択可能で、次のような形式で指定できます:fo=1:s:d

例えば、次の DMARC レコードで fo=1 を使用します。

_v=DMARC1; p=none; rua=mailto:reports@example.com; ruf=mailto:reports@example.com; fo=1;

この設定により、少なくとも SPF または DKIM の1つが失敗した場合、メール送信者は関連するレポートを受け取ることになります。これらのレポートは、認証に問題があるメールの確認に役立ちます。

adkim: DKIM識別子の整合性モード

adkim タグは、DKIM(DomainKeys Identified Mail)識別子の整合性モードを指定するために使用されます。

  • r (リラックス): これはデフォルト値で、送信者ドメインと DKIM 署名のドメインがサブドメインのレベルでも一致する場合に、整合性と見なします。例えば、example.com と sub.example.com が整合性があるとみなされます。
  • s (ストリクト): このモードでは、送信者ドメインと DKIM 署名のドメインが完全に一致していなければなりません。サブドメインのレベルでの整合性は受け入れられません。

adkim の設定によって、DKIM 検証結果がどのように DMARC 検証に影響するかが決まります。

DMARC レコードに adkim タグを追加する方法は次のとおりです。

v=DMARC1; p=none; rua=mailto:dmarcreports@example.com; adkim=s;

上記の例では、adkim の値が s に設定されているため、DKIM の整合性モードはストリクトとなります。この設定では、送信者ドメインと DKIM 署名のドメインが完全に一致しなければ、DMARC 検証は失敗します。

aspf: SPF識別子の整合性モード

 aspf タグは、SPF(Sender Policy Framework)識別子の整合性モードを指定するために使用されます。

aspf タグには2つの値があります。

  • r (リラックス): これはデフォルト値で、送信者ドメインと SPF の検証済みドメインがサブドメインのレベルでも一致する場合に、整合性と見なします。例えば、example.com と sub.example.com が整合性があるとみなされます。
  • s (ストリクト): このモードでは、送信者ドメインと SPF の検証済みドメインが完全に一致していなければなりません。サブドメインのレベルでの整合性は受け入れられません。

aspf の設定によって、SPF 検証結果がどのように DMARC 検証に影響するかが決まります。

DMARC レコードに aspf タグを追加する方法は次のとおりです。

v=DMARC1; p=none; rua=mailto:dmarcreports@example.com; aspf=s;

上記の例では、aspf の値が s に設定されているため、SPF の整合性モードはストリクトとなります。この設定では、送信者ドメインと SPF の検証済みドメインが完全に一致しなければ、DMARC 検証は失敗します。

pct: ポリシーを適用するメールの割合を示す数字

pct タグは、指定した DMARC ポリシーを適用するメールの割合(パーセンテージ)を設定します。これにより、DMARC ポリシーを徐々に導入して効果を評価しながら、影響を最小限に抑えることができます。

pct タグの値は 0 から 100 の整数で、デフォルト値は 100 です。たとえば、pct=20 に設定すると、受信者は送信されたメールのうち 20% に対して DMARC ポリシー(p タグで指定されたポリシー)を適用し、残りの 80% は通常どおり受け取ります。

以下に pct タグを含む DMARC レコードの例を示します。

v=DMARC1; p=quarantine; pct=50; rua=mailto:dmarcreports@example.com;

上記の例では、pct の値が 50 に設定されています。この設定では、受信者は送信されたメールの半分 (50%) に対して quarantine ポリシーを適用します。それ以外のメールは通常どおり受け取ります。これにより、DMARC ポリシーの導入を段階的に行いながら、送信メールと受信者への影響を確認することができます。


例えば、以下のようなDMARCポリシーがあります。

v=DMARC1; p=reject; rua=mailto: [email protected]; ruf=mailto: [email protected]; adkim=s; aspf=s; pct=100

これは、認証に失敗したメールを全て拒否し、集約報告と個別報告を指定したアドレスに送信することを指定しています。また、DKIMおよびSPFの整合性モードは厳格です。

DMARC の利点

メインを保護するために設計された技術です。DMARCは、SPFとDKIMの既存のメール認証技術を拡張し、電子メールの送信者と受信者の間で信頼性を確立する支援をします。

以下は、DMARC導入の主な利点です。

  • セキュリティ向上: DMARCは、メールスプーフィングやフィッシング攻撃を効果的に防ぐことができます。これにより、組織のブランドおよびメールトラフィックの信頼性が向上します。
  • 可視性: DMARCでは、送信メールの認証状況と不正使用の試行に関する詳細な報告が行われるため、ドメイン所有者はメール送信に関する情報をリアルタイムで把握できます。
  • 電子メール配信率の改善: DMARC認証が成功したメールは、ISP(インターネットサービスプロバイダ)により受信者の受信ボックスに適切に配信される可能性が高くなります。これにより、重要なビジネスメールが迷惑メールフォルダに振り分けられるリスクが低減されます。
  • インターネットコミュニティの信頼性向上: DMARCの導入により、組織はISPやお客様に対して、セキュリティ管理が適切に実施されていることをアピールできます。これは、ビジネスの信頼性向上につながります。

DMARCの導入は、メール認証、配信率改善、および企業ブランド保護の点で非常に重要です。ただし、正確に機能させるためには、適切なSPFおよびDKIM設定と、継続的な監視・管理が必要です。

DMARC(Domain-based Message Authentication, Reporting & Conformance)の導入

前提条件

Postfix, MariaDB, DKIM がすでに導入済みを前提とします。

あわせて読みたい
Postfix, PostfixAdmin, Dovecot の導入 (MariaDB連携, SMTP-Auth, Sieve) https://int-design.jp/content/spf-dkim-dmarc-arc-gmail/ Postfixは、オープンソースの高速かつセキュアなSMTPサーバーです。主にメールの送信機能(MTA:Mail Transf...
あわせて読みたい
MariaDB(MySQL) の導入 MariaDBは、MySQLをベースに開発されたオープンソースのデータベース管理システムです。MySQLからのリレーショナルデータベース管理システムMariaDBは、性能の向上や新...
あわせて読みたい
DKIM (DomainKeys Identified Mail) の導入 + 転送メール強制DKIM再署名の実験 https://int-design.jp/content/spf-dkim-dmarc-arc-gmail/ DKIM (DomainKeys Identified Mail) は、電子メールの送信者がメールの内容を改ざんされないよう保護し...

Postfix と MariaDB を使って DMARC に対応する方法を説明します。まず、OpenDMARC をインストールし、設定していきます。

OpenDMARC をインストール

sudo yum install epel-release -y

sudo yum install opendmarc -y

MariaDB に opendmarc データベースとユーザーを作成

mysql -u root -p
CREATE DATABASE opendmarc;
GRANT ALL ON opendmarc.* TO 'opendmarc'@'localhost' IDENTIFIED BY 'ここにパスワード';
FLUSH PRIVILEGES;

OpenDMARC スキーマをインポート

スキーマファイルを修正

下記のようにスキーマファイルをインポート中にエラーがでるためスキーマファイルを修正します。

mysql -u opendmarc -p opendmarc < /usr/share/opendmarc/db/schema.mysql
Enter password: 
ERROR 1067 (42000) at line 58: Invalid default value for 'lastsent'

MySQL のバージョンによって、最初の ‘TIMESTAMP’ カラムは常に ‘CURRENT_TIMESTAMP’ をデフォルトとして使用するため、lastsent TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:00' がエラーを引き起こします。

この問題を解決するために、lastsent カラムの型を DATETIME に変更し、デフォルト値を ‘1970-01-01 00:00:00’ に設定することができます。修正後の CREATE TABLE 文は次のようになります。

sudo vi /usr/share/opendmarc/db/schema.mysql
-- A table for logging reporting requests
CREATE TABLE IF NOT EXISTS requests (
        id INT NOT NULL AUTO_INCREMENT,
        domain INT NOT NULL,
        repuri VARCHAR(255) NOT NULL DEFAULT '',
        adkim TINYINT NOT NULL DEFAULT '0',
        aspf TINYINT NOT NULL DEFAULT '0',
        policy TINYINT NOT NULL DEFAULT '0',
        spolicy TINYINT NOT NULL DEFAULT '0',
        pct TINYINT NOT NULL DEFAULT '0',
        locked TINYINT NOT NULL DEFAULT '0',
        firstseen TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
        lastsent DATETIME NOT NULL DEFAULT '1970-01-01 00:00:00',

        PRIMARY KEY(id),
        KEY(lastsent),
        UNIQUE KEY(domain)
);
mysql -u opendmarc -p opendmarc < /usr/share/opendmarc/db/schema.mysql

OpenDMARC の設定

/etc/opendmarc.conf ファイルを編集します。

sudo vi /etc/opendmarc.conf
AuthservID your.server.name
PidFile /var/run/opendmarc/opendmarc.pid

Syslog true
TrustedAuthservIDs your.server.name
UMask 0002

UserID opendmarc:opendmarc

#IgnoreHosts /etc/opendmarc/ignore.hosts
HistoryFile /var/run/opendmarc/opendmarc.dat

Socket inet:8893@localhost
SoftwareHeader true

OpenDMARC には、デフォルトのポート番号がありません。ただし、標準的な実践として、本格的なプロダクション環境では、通常の Well-Known Ports(1〜1023)よりも高い範囲を選択することが望ましいです。

例として、49152〜65535 のプライベートポート範囲内からポート番号を選択できます。具体的なおすすめのポート番号としては、8893 を提案します。

OpenDMARC を設定する際に、以下のように opendmarc.conf 設定ファイルでソケットポート番号を指定することができます。
また、Postfix などのメールサーバーと組み合わせる場合は、メールサーバーの設定ファイルにも、OpenDMARC のポート番号を指定してください。

Postfix の設定

/etc/postfix/main.cf ファイルに以下の設定を追加します。
OpenDKIMとOpenDMARCとOpenARCで、 異なるポート番号を smtpd_milters および non_smtpd_milters オプションに追加します。

sudo vi /etc/postfix/main.cf
# OpenDKIM(8891) & OpenARC(8892) & OpenDMARC(8893)
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
sudo systemctl restart postfix

OpenDMARC サービスの有効化と起動

sudo systemctl enable opendmarc
sudo systemctl start opendmarc

Postfix を再起動

sudo systemctl restart postfix

DNS に DMARC レコードを追加

DNS に DMARC レコードを追加するために、以下のような TXT レコードを作成します。

_dmarc.example.com.  IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com; ruf=mailto:dmarc@example.com; fo=1"

これで、Postfix と MariaDB を使用して DMARC に対応する方法が完了です。
ここで指定したメールアドレス宛にレポートメールが送信されてきます。
例えば Gmailであれば From: noreply-dmarc-support@google.com からzipファイル届きます。

DMARC の動作確認

DMARCが正しく動作しているかどうかを受信したメールヘッダーで確認することができます。メールヘッダには、Authentication-Results や Received-SPFDKIM-Signature 項目が含まれています。この内容を確認することで、DMARCの動作状況を判断することができます。

以下は、メールヘッダーのサンプルです。

Authentication-Results: spf=pass (sender SPF authorized) smtp.mailfrom=example.com; dmarc=pass header.from=example.com
Received-SPF: pass (example.net: domain of example.com designates 1.2.3.4 as permitted sender)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=selector;

メールヘッダーで次の項目を確認してください。

  • Authentication-Results: この行で、dmarc=pass の値が見つかりますか? これがDMARCがPASSしていることを示しています。
  • Received-SPF: ここで spf=pass を見つけることができれば、SPFチェックが正常に実行されたことがわかります。
  • DKIM-Signature: 署名されたメールを示すためにこのフィールドが存在していることを確認してください。また、正しいドメイン(d=)とセレクタ(s=)が指定されていることも重要です。

これらの項目がすべて正しく設定されていれば、DMARCが正常に動作していることがわかります。

レポート送信

ヒストリーファイル

デフォルトは、/var/spool/opendmarc/opendmarc.dat です。
メールを受信すると作成されます。
予め空ファイルを用意しておく必要はありません。

-rw-rw-r--   1 opendmarc opendmarc  312  7月  1 07:43 opendmarc.dat

gmailからメールメールを送信してみます。

sudo cat /var/spool/opendmarc/opendmarc.dat 
job 4E87A66BB8
reporter example.com
received 1688129359
ipaddr *.*.*.*
from gmail.com
mfrom gmail.com
dkim gmail.com 20221208 0
spf 0
pdomain gmail.com
policy 15
rua mailto:mailauth-reports@google.com
pct 100
adkim 114
aspf 114
p 110
sp 113
align_dkim 4
align_spf 4
arc 7
arc_policy 2 json:[]
action 2

必要なパッケージをインストール

Perlモジュールが必要なので、cpanをインストールします。
DBD::mysql には、mariadb-devel パッケージが必要です。

sudo yum install cpan
sudo yum install mariadb-devel

インストールできない場合は、almalinux-crb.repo を有効にするか、リポジトリからrpmをダウンロードしてきてインストールしてください。
https://repo.almalinux.org/almalinux/9/CRB/x86_64/os/Packages
DBD::mysqlのインストール時に testでエラーがでるので -T でスキップします。

sudo cpan Switch
sudo cpan JSON
sudo cpan -T DBD::mysql
sudo cpan HTTP::Request

opendmarc-import

opendmarc-import コマンドは、DMARC レコードをデータベースにインポートするためのものです。
--verbose オプションは、ツールが出力する情報の詳細度を増やすために使用します。

sudo opendmarc-import -verbose -dbpasswd=ここにパスワード < /var/spool/opendmarc/opendmarc.dat
opendmarc-import --help
opendmarc-import: usage: opendmarc-import [options]
	--dbhost=host      database host [localhost]
	--dbname=name      database name [opendmarc]
	--dbpasswd=passwd  database password [opendmarc]
	--dbport=port      database port [3306]
	--dbuser=user      database user [opendmarc]
	--input=file       input file [STDIN]
	--help             print help and exit
	--verbose          verbose output
	--version          print version and exit

opendmarc-reports

opendmarc-reports は、DMARC 集計レポートを生成して送信するためのユーティリティです。
--verbose オプションは、ツールが出力する情報の詳細度を増やすために使用します。

opendmarc-reports -dbpasswd=ここにパスワード -verbose -report-email 'reports@example.com' -report-org 'example.com'
opendmarc-reports --help
opendmarc-reports: usage: opendmarc-reports [options]
	--day              send yesterday's data
	--dbhost=host      database host [localhost]
	--dbname=name      database name [opendmarc]
	--dbpasswd=passwd  database password [opendmarc]
	--dbport=port      database port [3306]
	--dbuser=user      database user [opendmarc]
	--domain=name      force a report for named domain
	--help             print help and exit
	--interval=secs    report interval [86400]
	--keepfiles        keep xml files (in local directory)
	 -n                synonym for --test
	--nodomain=name    omit a report for named domain
	--noupdate         don't record report transmission
	--report-email     reporting contact [postmaster@example.net]
	--report-org       reporting organization [example.net]
	--smtp-port        smtp server port [25]
	--smtp-server      smtp server [127.0.0.1]
	--test             don't send reports
	                   (implies --keepfiles --noupdate)
	--utc              operate in UTC
	--verbose          verbose output
	                   (repeat for increased output)
	--version          print version and exit

opendmarc-expire

opendmarc-expire コマンドは OpenDMARC データベース中の古いエントリを削除するためのものです。

sudo opendmarc-expire -verbose -dbpasswd=ここにパスワード
opendmarc-expire --help
opendmarc-expire: usage: opendmarc-expire [options]
	--alltables        expire rows from all tables
	--dbhost=host      database host [localhost]
	--dbname=name      database name [opendmarc]
	--dbpasswd=passwd  database password [opendmarc]
	--dbport=port      database port [3306]
	--dbuser=user      database user [opendmarc]
	--expire=days      expiration time, in days [180]
	--help             print help and exit
	--verbose          verbose output
	--version          print version and exit

レポートの可視化 opendmarc-dashboard

OpenDMARC Dashboardは、DMARCレポートを分析し、視覚化するための一連のPHPスクリプトです。これにより、ドメイン所有者は送信メールのDMARC適合性をモニタリングし、アクティブな脅威を追跡することが可能になります。その主な機能は以下の通りです。

  • 自動的に RUA レポート(聚合レポート)を受け入れる
  • レポートデータを MySQL データベースに保存する
  • グラフィカルなダッシュボードでデータを表示する

インストール

git clone https://github.com/techsneeze/dmarcts-report-parser.git
cd dmarcts-report-parser
cp dmarcts-report-parser.conf.sample dmarcts-report-parser.conf
vi dmarcts-report-parser.conf

設定ファイルを自分の環境に合わせて調整する必要があります。設定可能なオプションとその説明はGitHubのREADME.mdに詳細に記述されています。
https://github.com/techsneeze/opendmarc-dashboard

使用方法

php ./dmarcts-report-parser.php

これにより、RUAレポートが自動的にパーザと解析され、指定したMariaDBデータベースに格納されます。その後、ダッシュボードを開くことで結果を視覚的に表示します。

レポートをcrontabで定期実行

シェルスクリプト等で3つのコマンドをまとめておくと良いかと思います。
ここでは、PHPスクリプトで作成しました。パスは利用環境に合わせてください。
※MariaDBのパスワードは、引数で渡すより環境変数で渡した方が安全ですが、ここでは引数実装しています。
$dbpasswdが定義されていなければOPENDMARC_PASSWORD環境変数を参照するようです。

vi /root/opendmarc-send-reports.php
<?php

/**
 * opendmarcのレポートを定期実行するための PHPスクリプト
 */

$_HISTFILE = "/var/spool/opendmarc/opendmarc.dat";
$_DBPASS   = "ここにパスワード";

$_REPORT_ORG  = "example.com";
$_REPORT_EMAIL = "reports@example.com";

// ヒストリーファイルが作成されていない場合は空ファイルを作成
if (!file_exists($_HISTFILE)) {
  touch($_HISTFILE);
}

// opendmarc-import の実行
$tmpfile = "{$_HISTFILE}.tmp";
rename($_HISTFILE, $tmpfile);
$output = shell_exec("/usr/sbin/opendmarc-import -verbose -dbpasswd={$_DBPASS} < {$tmpfile}");
echo $output;
unlink($tmpfile);

// opendmarc-reports の実行
$output = shell_exec("/usr/sbin/opendmarc-reports -dbpasswd={$_DBPASS} -verbose -report-email '{$_REPORT_EMAIL}' -report-org '{$_REPORT_ORG}'");
echo $output;

// opendmarc-expire の実行
$output = shell_exec("opendmarc-expire -verbose -dbpasswd={$_DBPASS}");
echo $output;
chmod 0700 /root/opendmarc-send-reports.php
# /usr/bin/php /root/opendmarc-send-reports.php
opendmarc-import: started at Sat Jul  1 08:38:22 2023
opendmarc-import: connected to database
opendmarc-import: updating at line 21
opendmarc-import: terminating at Sat Jul  1 08:38:22 2023
opendmarc-reports: started at Sat Jul  1 08:38:22 2023
opendmarc-reports: selected 0 domain(s)
opendmarc-reports: terminating at Sat Jul  1 08:38:22 2023
opendmarc-expire: started at Sat Jul  1 08:38:22 2023
opendmarc-expire: connected to database
opendmarc-expire: expiring messages older than 180 day(s)
opendmarc-expire: expiring signatures on expired messages (id < 1)
opendmarc-expire: expiring arcauthresults on expired messages (id < 1)
opendmarc-expire: expiring arcseals on expired messages (id < 1)
opendmarc-expire: expiring request data older than 180 days
opendmarc-expire: terminating at Sat Jul  1 08:38:22 2023
opendmarc-expire: no rows deleted
opendmarc-expire: no rows deleted
opendmarc-expire: no rows deleted
opendmarc-expire: no rows deleted
opendmarc-expire: no rows deleted

動作確認して問題がなければ、root のcrontab に登録します。

crontab -e
0 2 * * * /usr/bin/php /root/opendmarc-send-reports.php > /dev/null 2>&1

今後の作業(オプション)

  • レポートが正しく送信できているか senderbccを設定してメールを確認してみる。
    どのようなレポートが送信されているか気になりますよね。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次