今回は前回のPostfixの構築を土台として、DKIMの設定をしていきます。
セキュリティなどには一応気を使っていますが、すべて自己責任で行ってください。
環境
- サーバ -> Raspberry Pi3
- DDNS -> MyDNS
関連
DKIMの設定
先程はSPFの設定をしましたが、今度はDKIMの設定をします。
これは、言わゆる電子署名付きメールで、送信者の正当性とメール自体が改ざんされていないという完全性を検証することができます。
この設定は多少手数が多く面倒な部分がありますのでご注意ください。
またこの設定は下記のサイトに沿って行っていきます。
参考Configure SPF and DKIM in Postfix on Debian 8www.linode.com
サーバにOpenDKIMをインストール
sudo apt-get install opendkim opendkim-tools postfix-pcreそして、このOpenDKIMを扱うpostfixというユーザをopendkimに追加します。
sudo adduser postfix opendkim設定ファイルの編集
先程のインストールでOpenDKIMの設定ファイルができたので、設定ファイルのバックアップを取ってから編集していきます。
sudo mkdir /etc/opendkim
sudo mkdir /etc/opendkim/keys
cd /etc
sudo cp opendkim.conf opendkim/opendkim-copied.confあとは以下のコードで上書きしてください。
#/etc/opendkim.conf
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
# Log to syslog
Syslog yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask 002
# OpenDKIM user
# Remember to add user postfix to group opendkim
UserID opendkim
# Map domains in From addresses to keys used to sign messages
KeyTable /etc/opendkim/key.table
SigningTable refile:/etc/opendkim/signing.table
# Hosts to ignore when verifying signatures
ExternalIgnoreList /etc/opendkim/trusted.hosts
InternalHosts /etc/opendkim/trusted.hosts
# Commonly-used options; the commented-out versions show the defaults.
Canonicalization relaxed/simple
Mode sv
SubDomains no
#ADSPAction continue
AutoRestart yes
AutoRestartRate 10/1M
Background yes
DNSTimeout 5
SignatureAlgorithm rsa-sha256
# Always oversign From (sign using actual From and a null From to prevent
# malicious signatures header fields (From and/or others) between the signer
# and the verifier. From is oversigned by default in the Debian package
# because it is often the identity key used by reputation systems and thus
# somewhat security sensitive.
OversignHeaders FromUbuntu18.04で構築したときのチェック
/etc/default/opendkimの内容にSocketとPidFileの記述があるはずですが、なぜかうまく認識されない事がありました。
その際は、このopendkim.confの一番下の行に
Socket local:/var/spool/postfix/opendkim/opendkim.sock
PidFile /var/run/opendkim/opendkim.pid
を記述するとうまく動作しました。
あとは秘密鍵を扱うので適切にパーミッションとオーナーを変更していきます。
sudo chmod u=rw,go=r /etc/opendkim.conf
sudo chown -R opendkim:opendkim /etc/opendkim
sudo chmod go-rw /etc/opendkim/keys続いて /etc/opendkim/signing.table 作ります。
sudo nano /etc/opendkim/signing.tableexampleの中にはメールアドレスのドメイン名をいれてください。
*@example.com example続いて /etc/opendkim/key.table 作ります。
sudo nano /etc/opendkim/key.tableexampleは先程と同様に、YYYYMMには本日の日付(例:201707)をいれてください。
example example.com:YYYYMM:/etc/opendkim/keys/example.private続いて /etc/opendkim/trusted.hosts を作ります。
sudo nano /etc/opendkim/trusted.hostsexampleは先程と同様にいれてください。
127.0.0.1
::1
localhost
myhostname
myhostname.example.com
example.comここでパーミッションとオーナーの変更をします。
sudo chown -R opendkim:opendkim /etc/opendkim
sudo chmod -R go-rwx /etc/opendkim/keysそして、キーの生成をします。
exampleは先程と同様に、YYYYMMには本日の日付(例:201707)をいれてください。
cd /etc/opendkim
sudo opendkim-genkey -b 1024 -h rsa-sha256 -r -s YYYYMM -d example.com -vMyDNSの場合はTXTレコードの文字制限があるためキーサイズを1024にします。
名前を変更後、パーミッションの変更をします。
sudo mv YYYYMM.private keys/example.private
sudo mv YYYYMM.txt example.txt
sudo chown -R opendkim:opendkim /etc/opendkim
sudo chmod -R go-rw /etc/opendkim/keysOpenDKIMを再起動します。
sudo systemctl restart opendkim
#もしエラーが出る場合はこちらで確認してください
sudo systemctl status -l opendkimTXTレコードの追記
先程名前を変更した /etc/opendkim/example.txt の中をTXTレコードとして設定します。
cd /etc/opendkim/
sudo cat example.txtp=から始まる文字列をコピーします
MyDNS上の先程のサイトに戻りTXTを追記します。
| Hostname | Type | Contet |
|---|---|---|
| YYYYMM._domainkey | TXT | v=DKIM1; h=sha256; k=rsa; s=email; p=暗号キー |
保存することを忘れないでください
次に今設定した情報のテストをします。
opendkim-testkey -d example.com -s YYYYMMこのコマンドを入力して何も出力がなければ大丈夫です。
引数として「-vvv」をつけると確認メッセージが出力されます。
「key OK」の前に「key not secure」が出力される場合はDNSSECに対応していないという警告なので問題ありません。
PostfixとOpenDKIMの連携
ディレクトリを作り、オーナーを変更します。
sudo mkdir /var/spool/postfix/opendkim
sudo chown opendkim:postfix /var/spool/postfix/opendkim次に /etc/default/opendkim を編集します。
sudo nano /etc/default/opendkimここで最初のSOCKETをアンコメントするのですが、Debian8の場合パスが違っているので以下のように変更します。
# Command-line options specified here will override the contents of
# /etc/opendkim.conf. See opendkim(8) for a complete list of options.
#DAEMON_OPTS=""
#
# Uncomment to specify an alternate socket
# Note that setting this will override any Socket value in opendkim.conf
SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock"
#SOCKET="inet:54321" # listen on all interfaces on port 54321
#SOCKET="inet:12345@localhost" # listen on loopback on port 12345
#SOCKET="inet:12345@192.0.2.1" # listen on 192.0.2.1 on port 12345最後に /etc/postfix/main.cf を編集します。
これは最後の方に書き足すだけで大丈夫です。
sudo nano /etc/postfix/main.cf# Milter configuration
# OpenDKIM
milter_default_action = accept
# Postfix ≥ 2.6 milter_protocol = 6, Postfix ≤ 2.5 milter_protocol = 2
milter_protocol = 6
smtpd_milters = unix:/opendkim/opendkim.sock
non_smtpd_milters = unix:/opendkim/opendkim.sockそして、OpenDKIMとPostfixを再起動させます。
sudo systemctl restart opendkim
sudo systemctl restart postfixこれで完了となります。
送信テスト
先ほどと同様にsendmailコマンドを利用して、メールを送信します。
sendmail 相手先のメールアドレス
From: 別名を書いてもいい<送信側のメールアドレス>
To: 相手先のメールアドレス
Subject: Hello!
本文
.確認
Gmailの場合は届いたメールの返信マーク横の下三角から「メッセージのソースを表示」で見ることができます。
ここで「元のメッセージ」の「DKIM」欄がPASSになっていれば成功です。


これで、SPFとDKIMがPASSになっていると思います。