DDNSを使って自宅サーバからメールを送信する DKIM設定編

今回は前回のPostfixの構築を土台として、DKIMの設定をしていきます。

CAUTION
セキュリティなどには一応気を使っていますが、すべて自己責任で行ってください。

環境

  • サーバ -> Raspberry Pi3
  • DDNS -> MyDNS

関連

DDNSを使って自宅サーバからメールを送信する Postfix設定編 DDNSを使って自宅サーバからメールを送信する SPF設定編 DDNSを使って自宅サーバからメールを送信する DKIM設定編

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     From
MEMO
Ubuntu18.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.table

exampleの中にはメールアドレスのドメイン名をいれてください。

*@example.com   example

続いて /etc/opendkim/key.table 作ります。

sudo nano /etc/opendkim/key.table

exampleは先程と同様に、YYYYMMには本日の日付(例:201707)をいれてください。

example     example.com:YYYYMM:/etc/opendkim/keys/example.private

続いて /etc/opendkim/trusted.hosts を作ります。

sudo nano /etc/opendkim/trusted.hosts

exampleは先程と同様にいれてください。

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 -v
MEMO
MyDNSの場合は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/keys

OpenDKIMを再起動します。

sudo systemctl restart opendkim
#もしエラーが出る場合はこちらで確認してください
sudo systemctl status -l opendkim

TXTレコードの追記

先程名前を変更した /etc/opendkim/example.txt の中をTXTレコードとして設定します。

cd /etc/opendkim/
sudo cat example.txt
MEMO
p=から始まる文字列をコピーします

MyDNS上の先程のサイトに戻りTXTを追記します。

HostnameTypeContet
YYYYMM._domainkeyTXTv=DKIM1; h=sha256; k=rsa; s=email; p=暗号キー
CAUTION
保存することを忘れないでください

次に今設定した情報のテストをします。

opendkim-testkey -d example.com -s YYYYMM

このコマンドを入力して何も出力がなければ大丈夫です。

MEMO
引数として「-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:[email protected]" # 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になっていると思います。


DDNSを使って自宅サーバからメールを送信する Postfix設定編 DDNSを使って自宅サーバからメールを送信する SPF設定編 DDNSを使って自宅サーバからメールを送信する DKIM設定編

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください