Amazon Linux 2でDKIMの設定 (ついでにSPF/DMARCも)



Amazon Linux 2でDKIM (Domainkeys Identified Mail)の設定をする手順です。
なお、postfixはインストール済みの状態です。
ドメインは、example.comとして進めていきます。

#手順
## EPELからOpenDKIMのインストール

```
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install opendkim
 ```
 
## OpenDKIMの設定

```
mkdir /etc/opendkim/keys/example.com
opendkim-genkey -D /etc/opendkim/keys/example.com/ -d example.com -s default

cat /etc/opendkim/keys/example.com/default.txt
----
default._domainkey	IN	TXT	( "v=DKIM1; k=rsa; "
	  "p=MIGfMA0GCSqGSIb3DQEBAQGbSNDw3SSSKBgQClp8S3Ved8FOYD5rMPX0s/BgvgThAiehj0V2s40A+99Eb1nqLPZOdEYz9wJ9UcnCGKaInhzFFwjIslLS78hfmKrJOe9hZJwjJk1YaIDDd0nOmSD6rtgzbm+5iSOBUgAuFYV4U0Rw2J5vouamcsUEC4VGTrQ07cEr06l1DaIoJQ5QIDAQAB" )  ; ----- DKIM key default for example.com
----
	  	  
chown -R opendkim:opendkim /etc/opendkim/keys	  

vi /etc/opendkim.conf
----
# Selects operating modes. Valid modes are s (signer) and v (verifier). Default is v.
#sは送信時の署名、vは受信時の確認
#Mode    v
Mode    sv  

# コメントアウト
# KeyFile /etc/opendkim/keys/default.private

#KeyTable       /etc/opendkim/KeyTable
KeyTable       refile:/etc/opendkim/KeyTable  

#SigningTable   /etc/opendkim/SigningTable
SigningTable    refile:/etc/opendkim/SigningTable

#ExternalIgnoreList     refile:/etc/opendkim/TrustedHosts
ExternalIgnoreList     refile:/etc/opendkim/TrustedHosts

#InternalHosts  refile:/etc/opendkim/TrustedHosts 
InternalHosts  refile:/etc/opendkim/TrustedHosts 
-----

vi /etc/opendkim/KeyTable
----
default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default.private
----

vi /etc/opendkim/SigningTable
-----
*@example.com default._domainkey.example.com
----


systemctl start opendkim.service
systemctl enable opendkim.service

## PostfixでDKIMを使うように設定

vi /etc/postfix/main.cf
-----

# DKIM (追記)
smtpd_milters     =    inet:127.0.0.1:8891
non_smtpd_milters = inet:localhost:8891
milter_default_action = accept
-----

systemctl restart postfix.service	  

```


## DNSの設定

DKIMを設定したのならSPFやDMARCも併せて設定しておきましょう。

###DKIMのレコード

```
Name: default._domainkey
Type: txt
Value: "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClp8S3Ved8FOYD5rMPX0s/BgvgThAiehj0V2s40A+99Eb1nqLPZOdEYz9wJ9UcnCGKaInhzFFwjIslLS78hfmKrJOe9hZJwjJk1YaIDDd0nOmSD6rtgzbm+5iSOBUgAuFYV4U0Rw2J5vouamcsUEC4VGTrQ07cEr06l1DaIoJQ5QIDAQAB"
```

###SPFのレコード

```
Name: @ (サブドメインなし)
Type: txt
Value: "v=spf1 ip4:xx.xx.xx.xx -all"
```

Route53の場合は、spfというレコードタイプも準備されているので設定しておきます。

```
Name: @ (サブドメインなし)
Type: spf
Value: "v=spf1 ip4:xx.xx.xx.xx -all"
```

###DMARCのレコード

```
Name: _dmarc
Type: txt
Value: "v=DMARC1; p=none; rua=mailto:info@example.com; ruf=mailto:info@example.com"
```

また、EC2からメール送信を行う場合は、逆引きやメール送信制限解除の申請もお忘れなく。

参考
https://support.serverworks.co.jp/hc/ja/articles/115008315608-EC2%E3%81%8B%E3%82%89%E3%83%A1%E3%83%BC%E3%83%AB%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E3%83%A1%E3%83%BC%E3%83%AB%E9%80%81%E4%BF%A1%E5%88%B6%E9%99%90%E8%A7%A3%E9%99%A4%E7%94%B3%E8%AB%8B%E3%81%A8%E9%80%86%E5%BC%95%E3%81%8D%E8%A8%AD%E5%AE%9A%E7%94%B3%E8%AB%8B%E3%82%92%E8%A1%8C%E3%81%84%E3%81%9F%E3%81%84%E3%81%A7%E3%81%99-%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%81%84%E3%81%84%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B-

# 送信テスト

mailコマンドなどでgmail宛にメールを送信して、ヘッダ(メッセージのソース)をチェックしてSPF、DKIM、DMARCが全てPASSとなっていればOKです！

<img width="1015" alt="スクリーンショット 2018-08-28 09.37.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/52904/8bcd3219-dc26-c82c-ef52-0a9f1a516ce8.png">


# 雑感

最近のEC2からのメール送信はSPF、DKIM、DMARCが揃っていないとgmailで迷惑メール判定されやすくなっているようです。
メールが少しでも相手に確実に届くように設定をすることをお勧めします！