AlmaLinux 9 に Open DMARC Analyzer を導入して DMARC レポートの解析をする

Linux
Open DMARC Analyzer を導入して DMARC レポートの解析をする
このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。
スポンサーリンク

ConoHa の VPS にメールサーバーを構築して、DMARC の集計レポートを受け取るように設定を行いましたが、XML ファイルを人力で分析するのは至難の業なのでツールを導入して可視化できるようにしたいと思います。

無料の DMARC 解析ツールは dmarc-visualizer(parsedmarc + Elaticsearch + Grafana)が主流(?)のようですが、今回はシンプルな Open DMARC Analyzer + Open Report Parser の組み合わせで行こうと思います。

環境

  • サーバー: ConoHa VPS
  • OS: AlmaLinux 9

過去に RHEL9 で構築した記事を検証しながら AlmaLinux 9 で再構築したメールサーバーなので、実質的に下記の記事の続きとなります。

事前準備

Open DMARC Analyzer はデータベースを基に解析ページを作成しますが、メールに添付された XML ファイルの分析・データベースへの登録は Open Report Parser が行います。

DMARC レポートの受信設定

Open Report Parser は指定したメールアカウントの、指定したフォルダーをチェックする仕組みになっていますので、DMARC レポートが届いたら自動的に専用のフォルダーに振り分け設定をしておくと運用が楽になります。

レポートが送られてきたら、Sieve を使って Archive 内の DMARC フォルダーに振り分けるように設定しました。

SnappyMail で Sieve のルールの追加する方法は以前の記事を参照してください。

MySQL の設定

Open DMARC Analyzer と Open Report Parser が共通で使用するデータベースを用意しておきます。

phpMyAdmin にログインして「dmarc」ユーザーを作成してください。

同名のデータベースを作成してすべての権限を与えるようにしました。

※生成したパスワードは後で使用しますので、控えておいてください。

Open Report Parser のインストール

基本的には公式の CentOS 用の手順に沿って進めれば大丈夫なのですが、Perl モジュールのパッケージで見つからないもの(perl-Mail-Mbox-MessageParser)がありました。

GitHub - userjack6880/Open-Report-Parser: A Perl based tool to parse DMARC reports from an IMAP mailbox or from the filesystem, and insert the information into a database. Derived from Techsneeze's dmarcts-report-parser
A Perl based tool to parse DMARC reports from an IMAP mailbox or from the filesystem, and insert the information into a ...

手順の perl-Mail-Mbox-MessageParser 以外をインストールします。

※EPEL リポジトリが必要になりますので、事前に設定しておいてください。(設定方法は以前の記事を参照してください。)

また、依存関係で必要な関連パッケージもインストールしておきます。

Perl の Mail::Mbox::MessageParser モジュールの導入

パッケージ管理でインストールしたかったのですが、どのリポジトリにも perl-Mail-Mbox-MessageParser を見つけることができませんでした。

GitHub - coppit/mail-mbox-messageparser: A fast and simple Perl mbox folder reader
A fast and simple Perl mbox folder reader. Contribute to coppit/mail-mbox-messageparser development by creating an accou...

GitHub に開発者のリポジトリがあったので、そこからインストールします。

本来ならリポジトリの説明にある通り make コマンドでインストールするべきなのですが、構築している環境に make コマンドが入っておらず、環境を汚したくなかったのでダウンロードして直接配置しました。

ダウンロードした Config.pm を修正します。

Perl の FileHandle::Unget モジュールの導入

GitHub - coppit/filehandle-unget: A Perl FileHandle which supports ungetting of multiple bytes
A Perl FileHandle which supports ungetting of multiple bytes - coppit/filehandle-unget

これも perl-FileHandle-Unget のパッケージが見つからなかったので、同様にダウンロードして直接配置しました。

Open-Report-Parser のインストール

やっと Open-Report-Parser 本体のインストールになります。

開発者のリポジトリから Git コマンドで /usr/share/Open-Report-Parser にダウンロードして、設定ファイルを report-parser.conf にリネームします。

設定ファイルを編集します。

私の環境では Single-dbox 形式の Archive フォルダー内に DMARC フォルダーを配置しているので、$imapdmarcfolder の指定が Dbox.Archive.DMARC となっていますが、Maildir 形式の場合は INBOX.DMARC とかになると思います。

動作確認

オプションを付けずに実行して、エラーが出ないか確認します。

初回取り込み

問題なさそうなので、-i オプションで設定ファイルを反映させて実行します。

エラーメッセージが出なければうまく動作しているはずです。phpMyAdmin を使って dmarc データベースの report テーブルに取り込んだデータが格納されていることを確認しましょう。

実行時にエラーが出る場合

実行時に Use of uninitialized value in concatenation (.) or string at ./report-parser.pl line 447. のエラーが出る場合は、$imapdmarcfolder の指定が正しくない可能性が高いです。

パスの指定が .(ドット)で始まったり、パスの区切りが /(スラッシュ)だとエラーになります。-d オプションを付けてエラーメッセージを確認しましょう。

データベースに取り込んだメールは不要なので、削除するように設定ファイルを変更します。

定期実行

cron に登録して定期的に実行するようにします。

Perl のライブラリパスを指定しないと動かないので注意してください。

[Question]: How to set up cron? · Issue #27 · userjack6880/Open-Report-Parser
So, I have the basic functions working by reading the report files from a directory. Now I want to automate reading the ...

以上で、Open-Report-Parser で DMARC レポートをデータベースに取り込むところまではできました。

Open DMARC Analyzer をインストール

続いて、データベースに取り込んだ DMARC レポートを表示するための Open DMARC Analyzer を入れて行きます。

GitHub - userjack6880/Open-DMARC-Analyzer: Open DMARC Analyzer is an Open Source DMARC Report Analyzer to be used with DMARC reports that have been parsed by John Levine's rrdmarc script or techsneeze's dmarcts-report-parser.
Open DMARC Analyzer is an Open Source DMARC Report Analyzer to be used with DMARC reports that have been parsed by John ...

開発者のリポジトリから Git コマンドで /usr/share/Open-DMARC-Analyzer にダウンロードします。

kevinoo/phpWhois のインストール

Open DMARC Analyzer を動かすには、先ほどインストールした Open-Report-Parser に加えて「kevinoo/phpWhois」または「MaxMind DB Reader PHP API」のどちらかが必須になるようです。

MaxMind DB は面倒そうだったので、今回はお手軽な phpWhois をチョイスしました。

Composer を使ってインストールするので root ではなく、ユーザーとして実行していきます。

Composer が入っていない場合は、ローカルインストールしていきます。既に入っている場合は次のステップまで進んでください。

Composer を使って kevinoo/phpWhois をインストールしていきます。

※OpenLiteSpeed なので所有者を nobody に変更していますが、Apache などの場合は適宜変更してください。

Open DMARC Analyzer の設定

再び root ユーザーで説明していきます。

データベースのパスワードと、GeoIP2 の設定を変更します。また、好みに応じてページ当たりに表示する期間を調整します。

Web サーバーの設定変更

OpenLiteSpeed の管理画面から「バーチャルホスト」>(ドメイン名)>「コンテキスト」と辿り、Open DMARC Analyzer を外部から閲覧できるように設定します。

ついでに管理者の IP アドレスからしかアクセスできないように設定しました。

Apache の設定例

Apache での設定は、こんな感じになると思います。

セットアップスクリプトを実行

https://(ドメイン名)/dmarc-analyzer/install.php にブラウザからアクセスすると、初回セットアップ用のスクリプトが走り、dmarc データベースに report_stats という名前のビューが作成されます。

削除処理が失敗した場合

パーミッションエラーで削除できなかった場合は、手動で削除してください。

動作確認

改めて https://(ドメイン名)/dmarc-analyzer/ にアクセスすると、Open DMARC Analyzer のページが正しく表示されました。

件数が多いと、Domain Summary を開くのにすごく時間がかかります。大規模なサーバーの場合は DATE_RANGE の設定を -1m(1ヶ月)ではなく -1w(1週間)にした方が良いかもしれません。

Sender IP アドレスをクリックしても詳細レポートが表示されない場合は、GeoIP2 が有効になっているか phpWhois が正しくセットアップされていない可能性があります。

まとめ

思ったより導入が大変でしたが、きちんと DMARK レポートの分析ができるようになったので良かったです。一度設定しておけば運用自体には手間がかからないのも良いですね。

コメント

タイトルとURLをコピーしました