Techfirm Cloud Architect Blog

テックファーム株式会社クラウドインフラグループのブログ

EC2サーバのPostfixから外部の宛先にメール送信するまで ②

はじめに

前回 AWSにPostfixでメール送信を行う環境を構築したので、今回はDKIMやDMARKといったなりすまし対策を実施します。

目標

  • DKIM/DMARCの設定と、送信時のSSL/TLS対応を行う

手順

DKIMの設定

Postfix環境でDKIMの対応を行う場合、OpenDKIMを別途インストールし設定を行う必要があります。

  • OpenDKIMのインストール

yumを使用しインストールを行います。

# amazon-linux-extras install -y epel
# yum install -y opendkim opendkim-tools
# yum list installed | grep opendkim
libopendkim.x86_64                    2.11.0-0.1.el7                 @epel
opendkim.x86_64                       2.11.0-0.1.el7                 @epel
  • 鍵の作成

OpenDKIMで使用する鍵を作成します。
opendkim-toolは -sでセレクタ名を指定しないとdefaultがセレクタ名として作成されます。

# cd /etc/opendkim/keys/
# mkdir example.com (ドメイン名)
# chmod 750 example.com/
# opendkim-genkey -D /etc/opendkim/keys/example.com/ -d example.com(-D でディレクトリ、-d でドメイン名を指定)
# chown -R opendkim:opendkim /etc/opendkim/keys/
  • TXTレコードをDNSに登録する

公開鍵の値がテキストファイルに記載されているので確認します。

# cat /etc/opendkim/keys/example.com/default.txt
default._domainkey      IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" )  ; ----- DKIM key default for example.com

出力された値をDNSレコードに登録します。
登録内容は以下を参考にしてください。

default._domainkey.example.com / TXT / "v=DKIM1; k=rsa;p=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  • レコードの検証

DKIMのレコードが登録されていることを以下サイトで確認します。
セレクタ名は上記の場合、defaultです。

https://dmarcian.com/dkim-inspector/

Congratulations! Your DKIM record is valid.
  • OpenDKIM設定ファイルの修正

メール送信時の署名のみを行う場合、Modeの設定はsのみで良いです。

# cp -ip /etc/opendkim.conf /etc/opendkim.conf.org
# vi /etc/opendkim.conf

---
Mode    v
# KeyTable        /etc/opendkim/KeyTable
# SigningTable  refile:/etc/opendkim/SigningTable

↓

Mode    s
KeyTable        /etc/opendkim/KeyTable
SigningTable  refile:/etc/opendkim/SigningTable

Mode: sは送信時の署名、vは受信時の検証
KeyTable: 署名に使用する鍵のパスを指定するファイル
SigningTable: 署名を行うドメインとセレクタのペアを指定するファイル

  • キーテーブルの設定ファイル修正
# cp -ip /etc/opendkim/KeyTable /etc/opendkim/KeyTable.org
# vi /etc/opendkim/KeyTable

---

#default._domainkey.example.com example.com:default:/etc/opendkim/keys/default.private

↓

default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default.private

defaultの値はセレクタ名なので、適宜変更してください。

  • SigningTableの設定ファイル修正
# cp -ip /etc/opendkim/SigningTable /etc/opendkim/SigningTable.org
# vi /etc/opendkim/SigningTable

---

#*@example.com default._domainkey.example.com

↓

*@example.com default._domainkey.example.com

defaultの値はセレクタ名なので、適宜変更してください。

  • サービスの起動

OpenDKIMのプロセスを起動します。

# systemctl start opendkim
# systemctl status opendkim
# systemctl enable opendkim
  • Postfixとの連携

メール送信する際に署名するよう、Postfixの設定ファイルに設定を追記します。

# cp /etc/postfix/main.cf /etc/postfix/main.cf.org
# vi /etc/postfix/main.cf

---
# 以下を追記
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
  • Postfixの再起動

設定を変更したので、Postfixを再起動します。

# systemctl restart postfix
# systemctl status opendkim
  • テストメールの送信

任意のメールアドレス宛にメールを送信します。
dkimの欄がPASS になっていれば完了です。

メール送信の手順は前回の記事を参考にしてください。

DMARC対応

DMARCの設定はDKIMと異なり、DNSにレコードを1行追加するのみとなります。
以下を参考にレコードの登録を行います。

_dmarc.example.com IN TXT "v=DMARC1 ; p=none ; rua=mailto:認証レポートを受け取る任意のメールアドレス; ruf=mailto:認証レポートを受け取る任意のメールアドレス;"

DMARCが設定されているか、以下サイトから確認可能です。

https://dmarcian.com/dmarc-inspector/

メール送信を行い、DMARC欄がPASSとなっていれば完了です。

SSL/TLS設定

Postfixに1行設定を追記するだけで、メール送信時の暗号化が有効化されます。

smtp_tls_security_level = may

上記を設定後メール送信を行うと、メール受信時に暗号化が有効化されていることが確認できます。

メール受信時に暗号化されている画像。

終わりに

今回はPostfixのメールサーバ構築からメール送信時のなりすまし対策と、2回に分けて説明を行いました。
AWSでメールサーバの構築を行う場合、参考にしてみてください。