DMARCレポートを解析・可視化する parsedmarc cli を使ってみた
こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きな吉井 亮です。
DMARC 対応していますか?
前回は parsedmarc を使って DMARC レポートを解析・可視化しました。
今回は parsedmarc cli を使ってみます。
Grafana でグラフィカルになる代わりに csv/json ファイルが出力されます。
CLI インストール
Installation にインストール手順が記載されていますが、
ローカル汚したくない気持ちがあるので、docker compose を使います。
ディレクトリ構成はこのようにしました。
$ tree
.
├── Dockerfile
├── docker-compose.yml
├── input
│ └── example.xml
├── output
└── parsedmarc.ini
Dockerfile
FROM python:3.9.18-alpine3.19
RUN apk add --update --no-cache libxml2-dev libxslt-dev build-base libffi-dev \
&& pip install parsedmarc msgraph-core==0.2.2
docker-compose.yml
version: '3.5'
services:
parsedmarc:
build: .
volumes:
- ./input:/input:ro
- ./output:/output
- ./parsedmarc.ini:/parsedmarc.ini:ro
command: parsedmarc -c /parsedmarc.ini /input/* --debug
parsedmarc.ini
ini ファイルの書式は Using parsedmarc を参照ください。
[general]
save_aggregate = False
save_forensic = False
output = /output/
実行
input ディレクトリ配下に DMARC レポートを配置します。本エントリの例では example.xml となっていますが、ファイル名は何でも構いません。
DMARC レポート配置が終わったら、docker compose を実行します。
$ docker-compose up
[+] Building 0.0s (0/0) docker:desktop-linux
[+] Running 1/0
✔ Container cli-parsedmarc-1 Created 0.0s
Attaching to cli-parsedmarc-1
cli-parsedmarc-1 | INFO:cli.py:802:Starting parsedmarc
cli-parsedmarc-1 | DEBUG:__init__.py:952:Parsing /input/example.xml
cli-parsedmarc-1 exited with code 0
$ docker-compose rm
exit 0 で終わっていれば正常終了です。output ディレクトリ配下に csv/json ファイルが出力されているはずです。
CSV ファイルを見る
xml から csv に変換されて少し読みやすくなりました。
私の教科書とも言える以下のサイトを見ながら csv を理解していきます。
CSVの列名 | 説明 |
---|---|
xml_schema | |
org_name | レポーターの名称 (メール受信側) |
org_email | |
org_extra_contact_info | |
report_id | レポートID |
begin_date | 集計期間 |
end_date | 集計期間 |
errors | |
domain | |
adkim | DKIM 認証識別子のアライメントモード、r=relaxed, s=strict |
aspf | SPF 認証識別子のアライメントモード、r=relaxed, s=strict |
p | DMARC ポリシー (none, quarantine, reject) |
sp | サブドメインに対するポリシー |
pct | DMARC ポリシーを適用するメールの割合 |
fo | 失敗レポートを送信する条件 |
source_ip_address | 送信元メールサーバーの IP アドレス |
source_country | |
source_reverse_dns | |
source_base_domain | |
count | 集計期間に送信された回数 |
spf_aligned | SPF アライメントの結果 |
dkim_aligned | DKIM アライメントの結果 |
dmarc_aligned | DMARC アライメントの結果 |
disposition | メッセージに適用されたポリシー(none, quarantine, reject) |
policy_override_reasons | |
policy_override_comments | |
envelope_from | エンベロープ From |
header_from | メールヘッダ From |
envelope_to | |
dkim_domains | |
dkim_selectors | |
dkim_results | DKIM 認証結果 |
spf_domains | |
spf_scopes | SPF 認証対象。mfrom = エンベロープFrom、pra = ヘッダFrom |
spf_results | 下 SPF 認証結果 を参照 |
SPF 認証、SPF アライメント、DKIM 認証、DKIM アライメント を確認してどこに問題があるか把握し、対策を行います。
エンベロープ From とヘッダ From が一致しているか、一致していなくてもエンベロープ From で SPF と DKIM 認証をパスしているかなどを調査します。
ベアメールさんのサイトが詳しいです。感謝。
SPF 認証結果
一般的な意味ではなく、parsedmarc の出力結果での意味です。
値 | 説明 |
---|---|
none | SPF レコードが存在しないので認証は失敗 |
pass | SPF 認証に合格 |
hardfail | 受信側で破棄 |
softfail | 受信側に届くが、スパム判定される可能性 |
neutral | 認証結果に関わらず何もしない |
temperror | 一時的なエラーで認証が失敗している |
permerror | 様々な要因で認証が失敗している |
参考
DMARCレポートとは? 設定方法や集計レポートの読み方、解析ツールを解説
なぜSPF認証が失敗するのですか?SPF認証の失敗を修正するには?
DMARC 詳細仕様-2
DMARCアライメント:緩やかなアライメントモードと厳格なアライメントモード
Discussion