必要なパッケージのインストール
# aptitude install opendkim opendkim-tools opendmarc
秘密鍵と公開鍵の生成
# opendkim-genkey -D /etc/opendkim/ -d phase-d.com -s 20151225
# chown opendkim:opendkim /etc/opendkim/20151225.*
;; QUESTION SECTION:
;20151225._domainkey.phase-d.com. IN TXT;; ANSWER SECTION:
20151225._domainkey.phase-d.com. 3599 IN TXT “v=DKIM1\; k=rsa\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9WEbYB2XwCs+IPEWsMc8FrlecH6rxnR+Em24zyN4wmmlW2CweZfCmJv1h0/MiFyJ/uWlPx0O/IedzXnZSgvSCIOKRZdfjndGv3kZ2s0ueB4d1Rp+6tIFiyNzIXVYNTuJo8aTZH4Hopdfpkj9nYfjdFQX8mkre7773EfThUr2BqwIDAQAB”
/etc/opendkim.confの設定
Syslog yes
UMask 002Domain phase-d.com
KeyFile /etc/opendkim/20151225.private
Selector 20151225Mode sv
OversignHeaders From
SignatureAlgorithm rsa-sha256
AutoRestart Yes
AutoRestartRate 10/1hInternalHosts /etc/opendkim/TrustedHosts
ExternalIgnoreList /etc/opendkim/TrustedHosts
KeyTable /etc/opendkim/KeyTable
SigningTable /etc/opendkim/SigningTable
/etc/opendkim以下その他の設定
==> KeyTable <==
20151225._domainkey.phase-d.com phase-d.com:20151225:/etc/opendkim/20151225.private==> SigningTable <==
phase-d.com 20151225._domainkey.phase-d.com
DMARC定義をTXTレコードして公開
$ dig txt _dmarc.phase-d.com
;; QUESTION SECTION:
;_dmarc.phase-d.com. IN TXT;; ANSWER SECTION:
_dmarc.phase-d.com. 3600 IN TXT “v=DMARC1\; p=reject\; rua=mailto:postmaster@phase-d.com”
/etc/opendmarc.confの設定
AuthservID HOSTNAME
FailureReportsBcc postmaster@phase-d.com
HistoryFile /var/run/opendmarc/opendmarc.dat
IgnoreAuthenticatedClients true
IgnoreMailFrom phase-d.com
PidFile /var/run/opendmarc/opendmarc.pid
RejectFailures false
Syslog true
SyslogFacility mail
TrustedAuthservIDs HOSTNAME
UMask 002
UserID opendmarc:opendmarc
続いてOpenDMARCの設定。こっちもあまりデフォルトからは変えてないです。受信したメールの統計情報がHistoryFileとして保存されるので、これはスクリプトを使って1日1回程度送信元にレポートをフィードバックしてあげます。この辺は任意というかボランティア精神的なところはありますが。
本当は各ドメインのDMARCポリシーにしたがって処理をできれば良いんでしょうけど、manを読んだ感じだとRejectFailuresという「DMARC判定にFailしたらReject」というのしか無いっぽいのでひとまず結果をヘッダに付記してあとは振り分けルールなどで対応というのが現状の最適解なのかなと思っています。
レポート用MySQLの設定
mysql> CREATE DATABASE opendmarc;
mysql> GRANT ALL PRIVILEGES ON opendmarc.* TO opendmarc IDENTIFIED BY ‘opendmarc’;# mysql -h localhost -u opendmarc -p opendmarc < /usr/share/doc/opendmarc/schema.mysql
DMARCのレポート送信はMySQLを使ってお手軽に行える枠組みがあります。統計を送るサーバにMySQLが動いてないといけないというネックはありますが、一応こんな感じで実施できます。この場合はlocalhostでMySQLが動いてる想定ですが、別に別ホストで動いてても問題ありません。
ひとまずこのような具合でそれ用のデータベースを作って、用意されているスキーマを流し込みます。ちなみに少なくともパスワードは環境に合わせて任意に変えましょう。
レポート送信スクリプト設定
#!/bin/bash
# Imports data from OpenDMARC’s opendmarc.dat file into a local MySQL DB
# and sends DMARC failure reports to domain owners.
# Based on a script from Hamzah Khan (http://blog.hamzahkhan.com/)# Database and History File Info
DBHOST=’localhost’
DBUSER=’opendmarc’
DBPASS=’opendmarc’
DBNAME=’opendmarc’
HISTDIR=’/var/run/opendmarc’
HISTFILE=’opendmarc’
LOG=’/var/log/opendmarc-reports.log’# Make sure history file exists
touch ${HISTDIR}/${HISTFILE}.dat# Move history file temp dir for processing
mv ${HISTDIR}/${HISTFILE}.dat /tmp/${HISTFILE}.$$# Import temp history file data and send reports
/usr/sbin/opendmarc-import -dbhost=${DBHOST} -dbuser=${DBUSER} -dbpasswd=${DBPASS} -dbname=${DBNAME} -verbose < /tmp/${HISTFILE}.$$ >> ${LOG} 2>&1
/usr/sbin/opendmarc-reports -dbhost=${DBHOST} -dbuser=${DBUSER} -dbpasswd=${DBPASS} -dbname=${DBNAME} -verbose -interval=86400 -report-email ‘postmaster@phase-d.com’ -report-org ‘phase-d.com’ >> ${LOG} 2>&1
/usr/sbin/opendmarc-expire -dbhost=${DBHOST} -dbuser=${DBUSER} -dbpasswd=${DBPASS} -dbname=${DBNAME} -verbose >> ${LOG} 2>&1# Delete temp history file
rm -f /tmp/*.$$
GitHubにあったスクリプトを少し改造して使っています。これをシェルスクリプトとして保存してcrontabに登録するか、あるいはいっそ/etc/cron.dailyに保存してしまえば、毎日このサーバで受信したメールのDMARC状況について、送信者側にフィードバックをすることが可能です。
こんな具合でDKIMとDMARCの設定をしてみました。
どちらもまだこれからという感じの技術ではありますが、中長期的には必須技術になってくるかなと思ってはいますので、可能な人は早めから対応を考えておいてもいいんじゃないかなと思います。
コメント