Open DMARC Analyzer + Open Report ParserをCentOSにインストール→諦めた

毎日送られてくるDMARCレポートを可視化したいと調査しているときの覚書。

環境: CentOS Stream 9, Nginx 1.22.1, PHP 8.1.14, MariaDB Server 10.5.16

オープンソースのOpen DMARC Analyzerをインストールしてみた。


1.Open DMARC Analyzerをインストール

GitHubの公式Readmeを参考に。

適当な場所にcloneする。
# cd /home/httpd/httpdocs/
# git clone https://github.com/userjack6880/Open-DMARC-Analyzer.git
# cd Open-DMARC-Analyzer/

config.phpを設定する。
# cp config.php.pub config.php
# less config.php

phpMyAdminで接続用ユーザーを作成して設定する。

これでブラウザからinstall.phpにアクセスしてみる。
http://vm-dev1/Open-DMARC-Analyzer/install.php

エラー

connecting to database... success
opening file... success
→ CREATE VIEW IF NOT EXISTS report_stats AS (
→ SELECT
→ report.serial, domain, rcount, disposition, reason,
→ policy_p, policy_pct, dkimdomain, dkimresult, dkim_align,
→ spfdomain, spfresult, spf_align, mindate, maxdate
→ FROM report RIGHT JOIN rptrecord
→ ON report.serial=rptrecord.serial
→ );
performing query... failed: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'dmarc.report' doesn't exist

Open Report Parserのインストールが必要らしい。


2.Open Report Parserをインストール

本当はこっちを先にインストールするべき。

epelはインストール済み。
公式サイトに従って必要なライブラリをインストールする。
# dnf install perl-File-MimeInfo perl-Mail-IMAPClient perl-MIME-tools perl-XML-Simple perl-DBI perl-Socket6 perl-PerlIO-gzip perl-libwww-perl unzip

cloneする。
# cd /home/httpd/httpdocs/
# git clone https://github.com/userjack6880/Open-Report-Parser.git
# cd Open-Report-Parser

設定ファイルを編集する。
# cp report-parser.conf.pub report-parser.conf
# less report-parser.conf

データベースの設定はOpen-DMARC-Analyzerと合わせる。

dmarc用の新しいメールアドレスを作成した。
さくらのメールボックスのIMAP設定方法は公式ヘルプを参考に。
参考: メールソフトの一般的な設定をしたい | さくらのサポート情報

$imapserver       = 'imap.server';
$imapuser         = 'dmarc@hoge.jp';
$imappass         = 'password';
$imapport         = '993';
$imapssl          = '1'; # If set to 1, remember to change server port to 993 and disable imaptls.
$imaptls          = '0';
$tlsverify        = '0';

確認のためにOutlookにもアカウントを追加した。
参考: Outlook 2019 / 2021 または Office365 の設定をしたい | さくらのサポート情報

実行してみる。
# ./report-parser.pl

エラー

Can't locate Mail/Mbox/MessageParser.pm in @INC (you may need to install the Mail::Mbox::MessageParser module) (@INC contains: /usr/local/lib64/perl5/5.32 /usr/local/share/perl5/5.32 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at ./report-parser.pl line 71.
BEGIN failed--compilation aborted at ./report-parser.pl line 71.

モジュールがあるか検索してそれらしいのをインストール。
# dnf search perl-Mail
# dnf search "message par"
# dnf install perl-Mail-Message perl-Email-MIME

実行してみる。
# ./report-parser.pl

同じエラー。
分からん。

検索するとソースコードは見つかった。

試しにビルドしてみる。
# cd /opt/software/
# curl -O https://cpan.metacpan.org/authors/id/D/DC/DCOPPIT/Mail-Mbox-MessageParser-1.5111.tar.gz
# tar -xzvf Mail-Mbox-MessageParser-1.5111.tar.gz
# cd Mail-Mbox-MessageParser-1.5111/
# perl Makefile.PL

Can't locate FindBin.pm in @INC (you may need to install the FindBin module) (@INC contains: . private-lib /usr/local/lib64/perl5/5.32 /usr/local/share/perl5/5.32 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at inc/Module/Install.pm line 236.
BEGIN failed--compilation aborted at Makefile.PL line 9.

必要なモジュールを検索してインストール。
# dnf search FindBin
# dnf install perl-FindBin perl-ExtUtils-MakeMaker

再度Makefileする。
# perl Makefile.PL
# make
# make test
# make install

Manifying 6 pod documents
Installing /usr/local/share/perl5/5.32/Mail/Mbox/MessageParser.pm
Installing /usr/local/share/perl5/5.32/Mail/Mbox/MessageParser/Grep.pm
Installing /usr/local/share/perl5/5.32/Mail/Mbox/MessageParser/Cache.pm
Installing /usr/local/share/perl5/5.32/Mail/Mbox/MessageParser/Config.pm
Installing /usr/local/share/perl5/5.32/Mail/Mbox/MessageParser/MetaInfo.pm
Installing /usr/local/share/perl5/5.32/Mail/Mbox/MessageParser/Perl.pm
Installing /usr/local/share/man/man3/Mail::Mbox::MessageParser.3pm
Installing /usr/local/share/man/man3/Mail::Mbox::MessageParser::Cache.3pm
Installing /usr/local/share/man/man3/Mail::Mbox::MessageParser::Config.3pm
Installing /usr/local/share/man/man3/Mail::Mbox::MessageParser::Grep.3pm
Installing /usr/local/share/man/man3/Mail::Mbox::MessageParser::MetaInfo.3pm
Installing /usr/local/share/man/man3/Mail::Mbox::MessageParser::Perl.3pm
Appending installation info to /usr/lib64/perl5/perllocal.pod

Open-Report-Parserに戻って実行。
# cd /home/httpd/httpdocs/Open-Report-Parser/
# ./report-parser.pl

Can't locate FileHandle/Unget.pm in @INC (you may need to install the FileHandle::Unget module) (@INC contains: /usr/local/lib64/perl5/5.32 /usr/local/share/perl5/5.32 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at /usr/local/share/perl5/5.32/Mail/Mbox/MessageParser.pm line 6.
BEGIN failed--compilation aborted at /usr/local/share/perl5/5.32/Mail/Mbox/MessageParser.pm line 6.
Compilation failed in require at ./report-parser.pl line 71.
BEGIN failed--compilation aborted at ./report-parser.pl line 71.

モジュールを検索してインストール。
# dnf search FileHandle
# dnf install perl-FileHandle
# ./report-parser.pl

同じエラー。

ソースコードを見つけたので同じようにビルドしてみる。

# cd /opt/software/
# curl -O https://cpan.metacpan.org/authors/id/D/DC/DCOPPIT/FileHandle-Unget-0.1634.tar.gz
# tar -xzvf FileHandle-Unget-0.1634.tar.gz
# cd FileHandle-Unget-0.1634/
# perl Makefile.PL
# make
# make test
# make install

Manifying 1 pod document
Installing /usr/local/share/perl5/5.32/FileHandle/Unget.pm
Installing /usr/local/share/man/man3/FileHandle::Unget.3pm
Appending installation info to /usr/lib64/perl5/perllocal.pod

Open-Report-Parserに戻って実行。
# cd /home/httpd/httpdocs/Open-Report-Parser/
# ./report-parser.pl

Can't locate JSON.pm in @INC (you may need to install the JSON module) (@INC contains: /usr/local/lib64/perl5/5.32 /usr/local/share/perl5/5.32 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at ./report-parser.pl line 77.
BEGIN failed--compilation aborted at ./report-parser.pl line 77.

モジュールを検索してインストール。
このあと同じようなエラーでインストールしたのをまとめた。
# dnf search JSON
# dnf install perl-JSON perl-LWP-Protocol-https perl-Time perl-Time-Piece perl-DBD-MySQL
# ./report-parser.pl

動いた。

取得してみる。
# ./report-parser.pl -i

エラー。

report-parser.confで$debug = 1;にしてみてもよくわからない。

メールサーバーにはアクセスできているみたい。

時間切れで諦めた。


【関連記事】