OpenDMARC

メールのSPF・DKIMを補強する送信ドメイン認証技術(DMARC)を取り扱うプログラム。
別途スクリプトを組み合わせる事で、ドメイン認証レポート送信する事も出来る。
DMARCは仕組み上、単体利用する事が出来ない点に注意する。

構築環境

今回検証した環境はこちら

  • Debian 9.5 x86_64
  • CentOS 7.5 x86_64
  • openSUSE 42.3 x86_64

他には下記の通りに構築。

  • 今回は、OpenDKIMを構築済みの環境にOpenDMARCを新規構築
  • OpenDKIMは [127.0.0.1:TCP/10027] で待ち受ける
  • OpenDMARCは [127.0.0.1:TCP/20027] で待ち受ける
  • 汎用性を持たせる為、LocalSocketは利用しない

構築

1. インストール
OpenDMARCはディストリビューション毎にパッケージ名の差異が無いので、
各パッケージ管理システムに応じてインストールする。

  • Debian
    # apt-get install opendmarc
  • CentOS
    # yum install opendmarc
  • openSUSE
    # zypper install opendmarc

 
2. 設定
項目についてはOpenDMARCのドキュメントに詳細が書いてあるので割愛。
DMARC評価結果はAuthentication-Resultsヘッダに追記するので、必要に応じてauthserv-idを設定する。
 

 設定内容

 
3. MTA設定
OpenDMARCを呼び出す為、MTA(Postfix)にmilter設定を追加する。
milterを追加する時、DKIM認証の前にDMARCを追加するとDKIM認証が崩れる。
回避するにはDKIM認証を弱く(relaxed/relaxed)するか、DKIM認証の後にDMARC評価を追加する。
下記は、DKIM認証後にDMARC評価を行うmilter設定となる。

  • /etc/postfix/main.cf
    smtpd_milters=inet:127.0.0.1:10027,inet:127.0.0.1:20027
    non_smtpd_milters=$smtpd_milters

 
4. 稼働テスト
実際にメールを受信してSPF/DKIM/DMARCのヘッダーが追加されるかテストする。
GmailはSPF/DKIM/DMARC全てに対応しているので、Gmailからメールを送信する事でテストを行う。
設定が正常に出来ていると下記の様なヘッダが追加される。

Authentication-Results: mx.***-*****.com; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: mx.***-*****.com; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=********;
Authentication-Results: mx.***-*****.com; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=209.85.***.***.; helo=***.google.com; envelope-from=*****@gmail.com; receiver*****@***.***.***)




DMARCレポート

DMARCは受信メール情報を蓄積しておき、正規のメール送信元ドメインに評価レポートを送る仕組みがある。
OpenDMARCもテキストデータでDMARC評価結果が蓄積されているので、
専用のコマンドを用いて加工すればレポート送信が可能となる。

モジュールインストール

DMARCレポートを生成・送信するにはMySQLとperlが必要となる。
MySQLはコチラで構築手順を公開しているのでこの場では割愛する。
perlについてはCPANでモジュールを下記の様にインストールする。
 
下記はopenSUSE環境で構築した場合の参考コマンドとなる。
ただし、単にモジュールインストールを流し込んだだけなので、
実際には構築環境に合わせて必要な物をインストールする。
 

  • CPANインストール
    cpan[X]> install Domain::PublicSuffix
    cpan[X]> install Switch
    cpan[X]> install DBI
    cpan[X]> install File::Basename
    cpan[X]> install File::Temp
    cpan[X]> install Net::Domain
    cpan[X]> install Getopt::Long
    cpan[X]> install IO::Handle
    cpan[X]> install IO::Compress::Zip
    cpan[X]> install POSIX
    cpan[X]> install MIME::Base64
    cpan[X]> install Net::SMTP
    cpan[X]> install Time::Local
    cpan[X]> install Net::DNS
    cpan[X]> install Domain::PublicSuffix
    cpan[X]> install DBD::mysql
    cpan[X]> install HTTP::Request
     
  • zypperインストール
    zypper install perl-Switch perl-DBI perl-File-Basename-Object perl-File-Temp perl-Net-Domain-TLD
    zypper install perl-Getopt-Long-Descriptive perl-IO-Handle-Util perl-Mail-Sender perl-Net-SMTP-SSL

データベース作成

DMARC評価データをDBに蓄積する為、MySQLに新規DBを作成してスキーマを流し込む。
DB名をopendmarc以外にしている場合、スキーマに埋め込んであるdatabase名と不整合が発生し、
スキーマインポートが出来ない場合がある。
database名の不整合が発生したら、スキーマ内のdatabase名を変更して対応する。

> 下記条件でDBを構築した場合のコマンド例
> IP      : 127.0.0.1
> Database: opendmarc
> User    : db_user
> Password: db_pass
---
mysql -u db_user -p opendmarc < /usr/share/doc/packages/opendmarc/schema.mysql


レポート送信

DMARCレポートを送信するには、下記3コマンドを実行する必要がある。
OpenDMARCでは、これらを実行するコマンドが用意されているので活用する。
 

  1. OpenDMARCの生成したデータをDB化
  2. DBからレポート送信対象のデータ読込み
  3. 期限切れデータをDBから削除

 
上記の操作を自動化する為に、GitHubでサードパーティのスクリプトが用意されている。
今回は利用しないが、自動化を楽に実装する場合は活用する。
 

 トピック
 

 

  • OpenDMARCのレポートデータをDB化
    /usr/sbin/opendmarc-import  --dbhost=127.0.0.1 --dbuser=db_user --dbpasswd=db_pass --dbname=opendmarc --verbose < /var/run/opendmarc/opendmarc.dat
  • レポート生成とレポート送信
    /usr/sbin/opendmarc-reports --dbhost=127.0.0.1 --dbuser=db_user --dbpasswd=db_pass --dbname=opendmarc --verbose --interval=86400 --report-email report@mail.hogehoge.com --report-org mail.hogehoge.com
  • 期限切れレポートの削除
    /usr/sbin/opendmarc-expire  --dbhost=127.0.0.1 --dbuser=db_user --dbpasswd=db_pass --dbname=opendmarc --verbose

レポート表示

DBにインポートしたDMARC評価データは表示専用のWebアプリがあるので活用する。
アプリのインストール方法は、配布先のGitHubで公開しているのでそちらを参照。
参考画像として、opendmarc-dashboardを筆者の実環境で実行したキャプチャを掲載しておく。

 

left,nowrap

添付ファイル: filewiki_opendmarc_01.png 814件 [詳細]