FreeBSD 14.3 RELEASE - postfix - セキュリティ対策 - DKIM(送信)


クラウディア 


1. 概要
2. インストール
3. 鍵の生成
4. opendkim.conf
5. ネームサーバ設定
6. opendkim 起動
7. メールサーバ設定
8. 確認
9. 参考サイト

1. 概要

 いよいよ、「qmail」から「postfix」へ移行しようと思った、原点となる、「DKIM(DomainKeys Identified Mail)」の設定です。  本ページの設定は、現在(2025年7月10日)、送信時に、「DKIM」ヘッダをつけるのみです。受信時の設定は、後日。  「DKIM-Signature」のヘッダも「Rspamd」でやってくれるらしいのですが、そこはなかなか設定できなくて、今回は、あきらめました。  以下、ここでは、「DNS」コンテンツサーバのことをネームサーバと称します。  以下、すべて「root」ユーザ権限で。

2. インストール

 必要となるパッケージ、「opendkim」をインストールします。  ネームサーバの設定も必要になります。  なので、メールサーバとネームサーバとが別々の場合、両方のサーバへインストールする必要があります。

cd /usr/ports/mail/opendkim

make config
 デフォルトのオプションです。

 後で、変更するかもしれませんが、とりあえず、デフォルトのままにしておきます。


make NO_DIALOG=yes

make install
 インストール時のメッセージを掲載しておきます。

===>  Installing for opendkim-2.10.3_20
===>  Checking if opendkim is already installed
===>   Registering installation for opendkim-2.10.3_20
Installing opendkim-2.10.3_20...
In order to run this port, write your opendkim.conf and:

if you use sendmail, add the milter socket 'socketspec' in
/etc/mail/<your_configuration>.mc:

INPUT_MAIL_FILTER('dkim-filter', 'S=_YOUR_SOCKET_SPEC_, F=T, T=R:2m')

or if you use postfix write your milter socket 'socketspec' in
/usr/local/etc/postfix/main.cf:

smtpd_milters = _YOUR_SOCKET_SPEC_


And to run the milter from startup, add milteropendkim_enable="YES" in
your /etc/rc.conf.
Extra options can be found in startup script.

Note: milter sockets must be accessible from postfix/smtpd;
  using inet sockets might be preferred.

3. 鍵の生成

 これは、ネームサーバを実行するマシンでの設定です。  「example.com」と「sub.example.com」という、メインのドメインとサブドメインの鍵ファイルを作成するとします。  鍵を置く、ディレクトリを。

/usr/local/etc/opendkim/keys
 として、2つのディレクトリを作成します。

mkdir -pv /usr/local/etc/opendkim/example.com

mkdir -pv /usr/local/etc/opendkim/sub.example.com
 それぞれの鍵ファイルを作成します。

opendkim-genkey -D /usr/local/etc/opendkim/example.com -s mail -d example.com

opendkim-genkey -D /usr/local/etc/opendkim/sub.example.com -s mail -d sub.example.com
 この結果、下記のファイルが作成されます。

/usr/local/etc/opendkim
|-- sub.example.com
|   |-- mail.private
|   `-- mail.txt
`-- example.com
    |-- mail.private
    `-- mail.txt

4. opendkim.conf

 「opendkim」インストール時に、下記のファイルが作成されています。

/usr/local/etc/mail
|-- opendkim.conf
`-- opendkim.conf.sample

vi /usr/local/etc/mail/opendkim.conf
 下記の先頭の「#」を外して、有効化します。

# Mode                  sv
 下記の先頭の「#」を外して、有効化し、「addr1,addr2,...」の位置に公開鍵を登録するネームサーバのローカルアドレスを記述します。

# Nameservers addr1,addr2,...
 下記の「port」の箇所に通信に使用する、ポート番号を記述します。  (なぜか、ポート番号に「8891」を設定するように書いてあるサイト多し)  「localhost」は、そのままか、ネームサーバで使用している「IP」アドレスを設定します。

Socket                  inet:port@localhost
 下記の先頭の「#」を外して、有効化し、「No」を「Yes」に変更します。  これで、処理が成功した場合も、メールログに「opendkim」のログが出力されます。  落ち着いてきたら「No」にしてもいいかもしれません。

# SyslogSuccess         No
 末尾に下記を記述します。

KeyTable                /usr/local/etc/opendkim/KeyTable
SigningTable            refile:/usr/local/etc/opendkim/SigningTable
ExternalIgnoreList      refile:/usr/local/etc/opendkim/TrustedHosts
InternalHosts           refile:/usr/local/etc/opendkim/TrustedHosts

vi /usr/local/etc/opendkim/KeyTable
 下記を記述します。

mail._domainkey.example.com example.com:mail:/usr/local/etc/opendkim/example.com/mail.private
mail._domainkey.sub.example.com sub.example.com:mail:/usr/local/etc/opendkim/sub.example.com/mail.private

vi /usr/local/etc/opendkim/SigningTable
 下記を記述します。

*@example.com mail._domainkey.example.com
*@sub.example.com mail._domainkey.sub.example.com

vi /usr/local/etc/opendkim/TrustedHosts
 下記を記述します。  「ip_address」の箇所に、メールサーバの「IP」アドレスを記述します。  外部からメール送信する場合は、行を分けて、外部の「IP」アドレスも記述します。

127.0.0.1
::1
ip_address
 作成したファイルの権限を設定します。

chown -R mailnull:mailnull /usr/local/etc/opendkim

chown mailnull:mailnull /usr/local/etc/opendkim/KeyTable /usr/local/etc/opendkim/SigningTable /usr/local/etc/opendkim/TrustedHosts

chmod 600 /usr/local/etc/opendkim/KeyTable /usr/local/etc/opendkim/SigningTable /usr/local/etc/opendkim/TrustedHosts
 本項の設定は、メールサーバそれぞれに行います。  「IP」アドレスのみは異なるので、そこはご注意ください。

5. ネームサーバ設定

 ネームサーバのゾーンファイルに、下記の内容を記述して、シリアル番号を更新します。  「p=...」の中身は、それぞれのキーファイルの「mail.txt」の「p=」の内容をそのまま書き写してください。  (1行で、書くので注意)

mail._domainkey.example.com.    IN TXT "v=DKIM1; k=rsa; p=..."
mail._domainkey.sub.example.com. IN TXT "v=DKIM1; k=rsa; p=..."
 編集が終わったら、ゾーンを更新。

nsd-control reload

6. opendkim 起動

 「opendkim」のサービスを有効化して、起動します。

service milter-opendkim enable

service milter-opendkim start

7. メールサーバ設定

 「Postfix」の設定を更新します。

vi /usr/local/etc/postfix/main.cf
 下記の「smtpd_milters」「non_smtpd_milters」の行を変更します。

milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:11332
non_smtpd_milters = $smtpd_milters
 メールサーバが、ネームサーバと同一の場合と、ネームサーバが異なる場合とで設定が異なります。  ネームサーバの「IPv4」アドレスを「192.168.1.2」として。  メールサーバが、ネームサーバと同一の場合、下記のように記述します。

smtpd_milters = inet:192.168.1.2:8891, inet:127.0.0.1:11332
non_smtpd_milters = inet:192.168.1.2:8891
・外部送信 → OpenDKIM 署名あり + Rspamd チェックあり ・内部宛(ローカル配送) → OpenDKIM 署名のみ ・外部からの受信 → OpenDKIM 検証 + Rspamd スパムチェック  という設定になっています。  メールサーバが、ネームサーバと異なる場合、下記のように記述します。

smtpd_milters = inet:192.168.1.2:8891, inet:127.0.0.1:11332
non_smtpd_milters = $smtpd_milters
 これは、外部宛も内部宛も OpenDKIM 署名あり + Rspamd チェックありにしています。  ネームサーバが外部なので、「Rspamd」は署名しないようです。  「postfix」を「mailnull」のグループに追加して、再起動します。

pw groupmod mailnull -m postfix

service postfix reload

8. 確認

 ネームサーバの「DKIM」が正しく登録されているかは、以下で確認できます。

drill mail._domainkey.example.com TXT

drill mail._domainkey.sub.example.com TXT
 「DKIM」のチェックを行っているメールサーバに対して、メールを送信します。  受信側のメールのヘッダを確認して。

DKIM-Signature:...
 が存在していること。

Authentication-Results: receive_mail_server_name;
	dkim=pass header.d=...
 上記が「dkim=pass」になっていれば、「DKIM」の設定はうまくいっています。

9. 参考サイト

 本章は、下記のサイトを参考にさせていただきました。
FreeBSD 14 : DKIM の設定

AbemaTV 無料体験
ベルリッツ