はじめに

DMARCの履歴ファイルを元に送信元ドメインへレポート送付する場合は、

  1. 履歴ファイル(c:\mail\dmarc\report\epstdmarc.dat) を履歴データとしてSQLサーバへ追加する。
  2. 定期的にSQLから抽出したデータよりレポート生成する。
  3. レポートをメールとして送信元ドメインへ送信する。
  4. SQL上から過去となる履歴データ(デフォルト90日後)を削除する。
といった手順を日時で行うように設定します。

なおSQLへ蓄えられたデータは、簡易なものですが、ブラウザ上で参照可能です。
http://<example.co.jp>/dmarc/dashboard.php 登録データ一覧
http://<example.co.jp>/dmarc/index.php データ分類:円グラフ

WINDOWS環境での構築手順

  1. SQLサーバのインストール
    MySQL 5.6 のインストーラのダウンロードページからダウンロードします。

    インストール項目は、"Server Only"を選択します。
    この際Windows Visualstadio2010コンポ―ネントも一緒にインストールします。
    デフォルトのインストール先は、"C:\ProgramData\MySQL\MySQL Server 5.6"となっています。
    DBの管理ユーザの"root" パスワードは任意に設定します。

    インストール完了後に、"C:\ProgramData\MySQL\MySQL Server 5.6\my.ini"の以下の箇所を書き換えて保存します。
    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    ↓ "STRICT_TRANS_TABLES"を削除。
    sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

    設定後、サービスの再起動(管理者コマンドプロンプトから)を行います。
    C:\Users\Administrator>sc stop mysql56
    C:\Users\Administrator>sc start mysql56

  2. データベースの構築
    initdb.bat(以下の内容)を使ってSQLサーバのデータベースを一括で構築します。
    ※ epstdmarc-v1.0x.zipの解凍先、"C:\Program Files\EPOST\MS\epstdmarc\report"に同ファイルが用意されています。
    echo "CREATE DATABASE epstdmarc;" > initrcdb.sql
    echo "CREATE USER 'epstdmarc'@'localhost' IDENTIFIED BY 'epstsecret';" >> initrcdb.sql
    echo "GRANT ALL PRIVILEGES ON epstdmarc.* TO epstdmarc;" >> initrcdb.sql
    echo "flush privileges;" >> initrcdb.sql
    "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql" -h localhost -u root -p<rootに設定したいパスワード(デフォルトは"secret"にしてあります。)> < initrcdb.sql
    "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql" -h localhost -u epstdmarc -pepstsecret < ./db/schema.mysql
    echo sql db success.

    作成後、コマンドプロンプトからinitdb.batを実行しデータベースとスキーマを一括登録します。
    作成が出来ているかを以下コマンドを実行し確認します。
    cd C:\Program Files\MySQL\MySQL Server 5.6\bin
    C:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -h localhost -u root -p<rootで設定したパスワード> SQLサーバのポートを変更している(例:9000に設定している)場合は、
    C:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -h localhost -u root -p<rootで設定したパスワード> --port 9000
    としてデータベースへ接続を行い、データベース名 "epstdmarc" が作成されていることを確認します。
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | epstdmarc          |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    5 rows in set (0.00 sec)
    ユーザ名 "epstdmarc" が作成されていることを確認します。
    mysql> select user,host from mysql.user;
    一旦接続を終了します。
    mysql> quit
    作成テーブル(domains,ipaddr,etc...)が作成したアカウントで操作できることを確認します。
    C:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -h localhost -u epstdmarc -pepstsecret
    mysql> use epstdmarc;
    mysql> show tables;
    +---------------------+
    | Tables_in_epstdmarc |
    +---------------------+
    | domains             |
    | ipaddr              |
    | messages            |
    | reporters           |
    | requests            |
    | signatures          |
    +---------------------+
    6 rows in set (0.00 sec)
    DBが正しく作成されていることが確認できたので接続を終了します。
    mysql> quit
  3. Perlのインストール Unix/Linux環境のPerlと近い感覚で使うことができる、Strawberry Perlをダウンロードして、インストールします。
    新たにコマンドプロンプトを起動させ、"Strawberry Perl"のPATHが設定されているかを確認します。
    C:\Users\Administrator>set path
    Path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin
    :

    インストール後に、コマンドプロンプトから以下コマンドを実行させ"Switch.pm"モジュールを追加します。
    C:\Users\Administrator>cpan install Switch.pm
    Loading internal logger. Log::Log4perl recommended for better logging
    CPAN: CPAN::SQLite loaded ok (v0.217)
    CPAN: LWP::UserAgent loaded ok (v6.42)
    Fetching with LWP:
    http://cpan.strawberryperl.com/authors/01mailrc.txt.gz
    CPAN: YAML::XS loaded ok (v0.80)
    Fetching with LWP:
    http://cpan.strawberryperl.com/modules/02packages.details.txt.gz
    Fetching with LWP:
    http://cpan.strawberryperl.com/modules/03modlist.data.gz
    Creating database file ...
    :
    Running make install for CHORNY/Switch-2.17.tar.gz
    Installing C:\STRAWB~1\perl\site\lib\Switch.pm
    Appending installation info to C:\STRAWB~1\perl\lib/perllocal.pod
    CHORNY/Switch-2.17.tar.gz
    C:\STRAWB~1\c\bin\gmake.exe install UNINST=1 -- OK
    次に、スクリプトが動作可能か確認します。
    cd "C:\Program Files\EPOST\MS\epstdmarc\report"
    C:\Program Files\EPOST\MS\epstdmarc\report>perl opendmarc-expire
    上記実行で何らかのエラーが出ていないことを確認します。

  4. PHPのインストール
    今回は php7.4.2を使用。
    PHP For Windows: Binaries and sources ReleasesからNon Thread Safe版の zipファイルをダウンロードし、好きな場所に展開(解凍)してください。
    解凍後、解凍先フォルダへコマンドプロンプトを移動し確認のため、"php"を実行します。
    このとき、"vcruntime140.dll 14.0 not compatible with PHP build"などDLLが不足しているメッセージが表示される場合は、以下リンクから
    https://visualstudio.microsoft.com/ja/downloads/
    その他のツールとフレームワーク下にある、"Visual Studio 2019 の Microsoft Visual C++ 再頒布可能パッケージ"(64bit版OSは、x64とx86両方)をダウンロードしてインストールします。

    PHPを展開(解凍)したフォルダ内にある"php.ini-development"を"php.ini"としてコピーします。
    コピーした、php.iniの以下の箇所を編集しPHPからのmysqlへ接続可能にするため以下行を書き換えて保存します。
    ;extension_dir = "ext" ⇒ extension_dir = "c:\<PHPをインストールしたフォルダ>\ext"
    ;extension=mysqli ⇒ extension=php_mysqli.dll

  5. IISのインストール
    [インターネット インフォメーション サービス] ⇒ [World Wide Web サービス] ⇒ [アプリケーション開発機能] ⇒ [CGI]
    にチェックが入っていることを確認してインストールしてください。

  6. IIS上でPHPを動作可能にする。
    1. 仮想ディレクトリの作成
      1. エイリアス:dmarc
      2. 物理パス:C:\Program Files\EPOST\MS\epstdmarc\report\web
    2. アクセス権限の設定
      1. 仮想ディレクトリ"dmarc"のフォルダのプロパティーを開く。
      2. [セキュリティ] タブの [編集] をクリックする。
      3. [追加] をクリックする。
      4. 場所の指定をコンピュータに設定し、オブジェクト名にiis_iusrsと入力して [名前の確認] をクリックする。
      5. 選択するオブジェクト名が認識されたら、[OK] をクリックする。
      6. アクセス許可は特に変更せず、[OK] をクリックする。
    3. IISへのPHPランタイムの登録
      1. 接続ペイン内のコンピューター名のノードをクリックする。
      2. 機能ビューが表示されていることを確認し、[ハンドラー マッピング] をダブルクリックする。
      3. 操作ペインから [モジュールマップの追加] をクリックする。
      4. 以下の内容を入力する。i.要求パス → *.php
        • モジュール → FastCgiModule
        • 実行可能ファイル → <PHPをインストールしたフォルダ>\php-cgi.exe
        • 名前 → PHP_via_FastCGI
    4. [要求の制限] ボタンをクリックする。
    5. マップタブの [要求のマップ先が次の場合のみハンドラーを呼び出す] にチェックを入れ、[ファイルまたはフォルダー] を選択して [OK] をクリックする。
    6. [OK] をクリックする。
    ★ 設定変更後は、IISをコンピュータ名単位で再起動させ、以下リンクが表示できるか確認します。
    http://<example.co.jp>/dmarc/test.phpPHP設定情報一覧
    http://<example.co.jp>/dmarc/testsql.phpSQL接続確認結果
    正常に接続できた後は、"test.php"および"testsql.php"は不要となりますので、フォルダから削除しておきます。

  7. 日時処理の登録 DMARCの検査で作成された履歴データを定期的にデータベースへ保存後、必要なら送信元ドメインへレポート送信し、90日を過ぎたデータを削除する設定をバッチファイル"epstdmarc-send-reports.bat"として作成し、タスクマネージャへ登録します。
    [epstdmarc-send-reports.bat] (太字の箇所を適切に設定してください。)
    cd "c:\program files\epost\ms\dmarc\report"

    set SMTPSERVER=172.0.0.1
    set SMTPPORT=25
    set FROMADDR=noreply-dmarc-support@example.co.jp
    set DOMAIN=example.co.jp

    REM Database and History File Info
    set DBHOST=localhost
    set DBUSER=epstdmarc
    set DBPASS=epstsecret
    set DBNAME=epstdmarc
    set HISTDIR=c:\mail\dmarc\report
    set HISTFILE=epstdmarc

    REM Move history file temp dir for processing
    move %HISTDIR%\%HISTFILE%.dat %HISTDIR%\%HISTFILE%.$$

    REM Import temp history file data and send reports
    perl opendmarc-import -dbhost=%DBHOST% -dbuser=%DBUSER% -dbpasswd=%DBPASS% -dbname=%DBNAME% -verbose < %HISTDIR%\%HISTFILE%.$$
    perl opendmarc-reports -dbhost=%DBHOST% -dbuser=%DBUSER% -dbpasswd=%DBPASS% -dbname=%DBNAME% -verbose -interval=86400 -smtp-server %SMTPSERVER% -smtp-port %SMTPPORT% -report-email %FROMADDR% -report-org %DOMAIN%
    perl opendmarc-expire -dbhost=%DBHOST% -dbuser=%DBUSER% -dbpasswd=%DBPASS% -dbname=%DBNAME% -verbose

    REM Delete temp history file
    del %HISTDIR%\%HISTFILE%.$$

  8. タスクマネージャーへの登録 コマンドラインで、以下のように登録(ログオンされていなくても18時に処理実行する場合:日時処理)します。
    C:\Users\Administrator>schtasks /create /ru "" /rp /tn "DMARC Report" /tr "C:\PROGRA~1\EPOST\MS\epstdmarc\report\epstdmarc-send-reports.bat" /sc daily /st 18:00:00

  9. 統計情報の参照 データベースへ履歴ファイルが登録されるようになると、以下の参照が可能になります。
    http://<example.co.jp>/dmarc/dashboard.php登録データ一覧
    http://<example.co.jp>/dmarc/index.php円グラフ

    Copyright© E-POST Inc. 2020

    -許可なく内容の転載を禁じます。-