DMARCレポートたちを可視化する

# はじめに
毎日届くたくさんのDMARCレポートたち。
XMLファイルを１つ１つ確認していくのは心が折れます。
そんな時、これら膨大なファイル群をローカルにて可視化できる OSS を見つけたので使ってみました。

https://github.com/debricked/dmarc-visualizer

簡単に説明すると3つのコンテナの集まりです。
- [`parsedmarc`](https://domainaware.github.io/parsedmarc/)：DMARCレポートを解析する
- [`Elasticsearch`](https://www.elastic.co/jp/elasticsearch)：解析されたレポートを保存する
- [`Grafana`](https://grafana.com/)：保存されたレポートを可視化する

```shell
git clone git@github.com:debricked/dmarc-visualizer.git
```

まずはこのリポジトリをクローンします。
使い方については、[公式ブログ](https://debricked.com/blog/analyze-and-visualize-dmarc-report/) を含め探せば見つかるので割愛します。
ただ、このままでは正常に動かなかったのでいくつか変更を加えます。

# 元のリポジトリに加えた変更

## dmarc.sample.iniの複製
まずは`parsedmarc`のサンプル設定ファイルがあるので、それをコピーして同階層に配置します。中身はサンプルのままで問題ありません。

```shell
cp parsedmarc/parsedmarc.sample.ini parsedmarc/parsedmarc.ini
```

## No module named 'msgraph' の対応
準備ができたところでコンテナ群を立ち上げます。

```shell
docker compose up
```

ですが、parsedmarcのコンテナで、`ModuleNotFoundError No module named 'msgraph'`というエラーが発生してしまいます。
これに関しては、こちらの記事を参考に修正させていただきました。

https://qiita.com/mziyut/items/eae11ed5c3511d841bff

## Grafana のバージョンを上げる
これで無事に全てのコンテナが立ち上がるのですが、`localhost:3000`にアクセスしてみると、一部グラフが表示されていません。`Grafana`で`Invalid interval specified, must be non-null and non-empty`というエラーが出て、SPFアライメントやDKIMアライメントがどれだけ満たされているかを示す円グラフが表示できていませんでした。
これに関しては、こちらのissueを参考に修正させていただきました。

https://github.com/debricked/dmarc-visualizer/issues/51

# 可視化されたDMARCレポートたち
いろんな受信メールサーバーからDMARCレポートが届いています。
![スクリーンショット 2024-02-03 13.51.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1504894/578252a5-bfbd-545b-e8d8-1f463b23ba5a.png)

SPFアライメントを満たせている割合が少ないですね...
![スクリーンショット 2024-02-03 13.50.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1504894/9047eef8-5779-b026-aad5-6d6d0d0b9cff.png)

メールの送信元をドメインやIPアドレスごとに降順で見ることもできます。
![スクリーンショット 2024-02-03 13.55.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1504894/79e6d249-90d5-7aeb-0d93-1a477fb45f60.png)

# おわりに
元のリポジトリに修正を加えたコードはここに置いています。

https://github.com/chima91/dmarc-visualizer

この OSS のおかげで綺麗に可視化できたわけですが、毎日大量に届くDMARCレポートたちをいちいちダウンロードして`files`配下に配置するのは面倒な作業でした。
そこで番外編ですが、Gmailに届くDMARCレポートたちをGoogle ドライブに毎日自動で保存するスクリプトが便利でした。
以下の記事を参考にさせていただきました。

https://engineer.crowdworks.jp/entry/dmarc-visualizer

[パソコン版ドライブ](https://support.google.com/drive/answer/10838124?visit_id=638422541407990786-905900742&rd=1#zippy=%2C%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E7%89%88%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%2C%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E7%89%88%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%82%92%E9%96%8B%E3%81%8F%2C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%84%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%82%92%E3%82%AA%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%A7%E9%96%8B%E3%81%8F) をダウンロードすることで以下のようなことができるようになります。

> - クラウドに保存されているファイルをパソコンで直接開く
> - 容量を使用せずにパソコンのファイル システムでファイルを表示、整理
> - パソコンから Google ドライブにフォルダを同期する
>   - 同期すると、ファイルがクラウドからダウンロードされ、パソコンのハードドライブからアップロードされます。
>   - 同期が完了すると、パソコン内のファイルとクラウド上のファイルが一致します。
>   - ファイルは最新に保たれ、アクセスできる状態になっています。変更内容はすべてのデバイスに適用されます。

これを利用して、Google ドライブから`dmarc-visualizer/files`配下にDMARCレポートたちをコピーします。

![スクリーンショット 2024-02-03 9.57.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1504894/f0e875d5-6057-a77e-9183-df61fd59b6db.png)

これで`files`配下へのコピーが一段と楽になりました!
可視化したDMARCレポートたちの結果を見て対応を進めていこうと思います。