Postfixのセキュリティ設定(SPF/DKIM/DMARC)

Postfixにおいて、迷惑メールやメールアドレス送信元の成り済まし対策の設定を行います。

1. SPF

Sender Policy Framework(SPF)は、SMTPを利用したインターネット電子メールの送受信において送信者のドメインの偽称を防ぎ、正当性を検証する仕組みです。

(1) SPFの設定
SPFは該当のドメインのDNSのTXTレコードに記述します。

(2) SPFレコードの記述例
記述方法はいくつか方法はありますが、記述ミスを防ぐためや受信側でのDNSクエリを抑制するため、ホストのIPアドレスで記述する方法で記載します。
example.jp. IN TXT "v=spf1 ip4:xxx.xxx.xxx.xxx ip4:xxx.xxx.xxx.xxx ~all"

2. DKIM

DKIMはDomainKeys Identified Mailの略で、送信側で電子メールに電子署名を付加し、受信側でその電子署名の照合を行い、メールが本当に送信者のドメインからのものかどうかの認証を行うものです。

(1) OpenDKIMのインストール
opendkimをインストールします。
# yum --enablerepo=epel install opendkim

(2) 秘密鍵、公開鍵の作成
ドメインごとにディレクトリを作成し、そこに秘密鍵と公開鍵を作成します。
# cd /etc/opendkim/keys
# mkdir example.jp
# opendkim-genkey -D example.jp -d example.jp -s default -b 2048
# chown -R opendkim:opendkim example.jp
■opendkim-genkeyのコマンド引数
-D 鍵を作成するディレクトリ名
-d ドメイン名
-s セレクタ名(※後の設定でも使用するので、分かりやすい名前の方が良い。)
-b 鍵の長さ(バイト)

(3) DNSの設定
作成したディレクトリ内にある「default.txt」をオープンします。
この内容をDNSのTXTレコードに記述します。
■default._domainkey
default._domainkey.example.jp. TXT "v=DKIM1; k=rsa;" "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8KpaF・・・"
※「default.txt」では「v=DKIM1; k=rsa;」と「p=」の間に改行がありますが、これを削除して代わりにスペースを入力します。
また、「example.jp.」の箇所および「p=」以降のテキストは実際の値に変更して下さい。
■_adsp._domainkey
ADSP情報もDNSに記述します。
これはDKIMの認証結果をどのように扱うべきかの署名方針を定義したものです。
_adsp._domainkey.example.jp. TXT "dkim=unknown"
※「example.jp.」の箇所には実際のドメイン名を指定して下さい。
なお、「dkim=」の値には以下のキーワードが指定できます。
all このドメインから送信されるメールはすべて署名されている。
unknown このドメインから送信されるメールは署名されているか不明。
discardable このドメインから送信されるメールはすべて署名されている。
※署名されていないメッセージは破棄を推奨。
※「discardable」や「all」を公開すると、メーリングリストへの投稿等や、第三者にメールの送信を委託する場合などにおいて、認証に失敗してメールが破棄される恐れがあるので、十分に注意が必要です。

(4) opendkim.confの設定
# vi /etc/opendkim.conf
#Mode v
Mode sv #送信時:署名、受信時:検証

Socket  inet:8891@localhost #そのまま

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

KeyTable      /etc/opendkim/KeyTable #アンコメント

SigningTable  refile:/etc/opendkim/SigningTable #アンコメント

ExternalIgnoreList    refile:/etc/opendkim/TrustedHosts #アンコメント

InternalHosts refile:/etc/opendkim/TrustedHosts #アンコメント

なお、ログに「key data is not secure: opendkim is in group 0 which has multiple users (e.g., "sync")」というエラーが表示される場合があります。
その場合には最終行に以下の記述を追加します。
# key data is not secureのエラー対策
RequireSafeKeys false

(5) Socketの設定
# vi /etc/default/opendkim
SOCKET="inet:8891@localhost"

(6) KeyTableの設定
秘密鍵のパス名を以下の書式で設定します。
# vi /etc/opendkim/KeyTable
#[セレクタ名]._domainkey.[ドメイン名] [ドメイン名]:[セレクタ名]:[秘密鍵のパス]
default._domainkey.example.jp example.jp:default:/etc/opendkim/keys/example.jp/default.private

(7) SigningTableの設定
署名をするメールアドレスを指定します。ここではワイルドカードを指定してすべてのメールアドレスにします。
# vi /etc/opendkim/SigningTable
#*@[ドメイン名] [セレクタ名]._domainkey.[ドメイン名]
*@example.jp default._domainkey.example.jp
 

(8) TrustedHostsの設定
信頼できるメールサーバのIPアドレスを指定します。
ここではlocalhostを指定します。
# vi /etc/opendkim/TrustedHosts
127.0.0.1
#::1

(9) opendkimの起動、自動起動設定
# systemctl start opendkim.service
# systemctl enable opendkim.service

(10) postfixの設定
opendkimに関する記述をpostfixで設定します。
# vi /etc/postfix/main.cf
########## OpenDKimの設定 ##########
# smtpdプロセスが利用するmilterの定義
smtpd_milters = inet:localhost:8891
# smtpdプロセス以外が利用するmilterの定義
non_smtpd_milters = $smtpd_milters
# milterがメールを受け取ったときの既定の動作
milter_default_action = accept

postfixのサービスを再起動します。
# systemctl restart postfix.service

3. DMARC

DMARC (Domain-based Message Authentication, Reporting, and Conformance)は、SPFおよびDKIMを用いて送信元ドメインを認証する際、 認証に失敗したメールをどのように取り扱うかについての挙動を設定するものです。

(1) OpenDMARCのインストール
# yum --enablerepo=epel install opendmarc

(2) opendmarc.confの設定
「/etc/opendmarc.conf」を編集して、「Socket」項目を変更します。
#Socket inet:8893@localhost
Socket  unix:/run/opendmarc/dmarc.sock

(3) opendmarcの起動、自動起動設定
# systemctl start opendmarc.service
# systemctl enable opendmarc.service



最終更新:2022年07月06日 15:44