CentOS7 : OpenDKIM 2.11.0 + Postfix 2.10.1 で DKIM の実装

 日本の公的な機関や団体はSMIMEを実装していることが多いようですが、海外ではDKIMが多い印象を受けます。ということで、DKIM の実装方法を紹介します。

スポンサーリンク(広告)
スポンサーリンク(広告)

Step1:現在の環境の確認

 今回は、既にPostfixを使ったメールサーバが構築されていることを前提に、説明を進めます。
 メールサーバは、ローカルドメインのみでも、仮想ドメインでも、DKIMを実装する手順は変わりません。
 メールサーバの構築については、こちらを参考にしていただければ、幸いです。
 CentOS7 : Apache 2.4 + PHP 5.4 + MariaDB(mysql) 5.5 + Postfix 2.10 Patched VDA + Dovecot 2.2.10 + amavisd-new 2.10.1 + spamassassin 3.4.0 + clamav 0.99.1 環境構築

 本記事では、CentOS7 であることを前提に説明しますが、CentOS6 でも、Ubuntu でも、ほとんど変わらないと思います。

Step2:必要なソフトのインストール

 OpenDKIM を使って、DKIM を実装しますので、インストールします。

yum リポジトリの追加

 EPELリポジトリのインストール

OpenDKIM のインストール

 EPELリポジトリを使って、インストールします。

Step3:秘密鍵と公開鍵の作成

鍵の保存ディレクトリの作成

 複数ドメイン運用していると、どのドメインの鍵ペアか分からなくなることがあるので、ドメイン毎にディレクトリを作成することをお勧めします。

鍵の作成

 opendkim-genkey コマンドを使って、鍵を作成します。

-b オプション

 -b オプションでは、鍵の長さを指定します。
 1024 未満の鍵は、解読されることがあるため、非推奨となっています。
 逆に、2048を超える例えば4096などの長い鍵は、メールソフトなどによっては対応していないことがあるので、非推奨となっています。

-d オプション

 -d オプションでは、一般的にはメールアドレスの@より後ろのドメイン名を指定します。
 DKIM では、公開鍵を DNS に設定して公開しますので、自身が DNS の設定を書き換えられるドメイン名である必要があります。
 DKIM では、第三者による署名という方法もあるようですので、必ずしもメールアドレスのドメイン名と一致している必要はありませんが、第三者による署名は、信頼性の点で劣りますので、おすすめしません。

-s オプション

 -s オプションでは、鍵のセレクタを指定します。
 DKIM では、ひとつのドメインに対して、複数の鍵を設定することができます。複数の鍵のうちどの鍵を使っているのか明らかにするために、セレクタを記載します。
 管理しやすい任意の文字列を指定します。日付等である必要はありません。

その他のオプション

 その他にも、以下の通り、オプションがありますので、必要に応じて指定します。

鍵のパーミッションの設定

 デフォルトで、opendkim-genkey コマンドを実行したユーザ名で、適切にパーミッションが設定されていますが、念のためパーミッションを設定しておきます。

 併せて、rootのままでも、特に問題はないと思いますが、所有者を変更しておきます。

Step4:OpenDKIM の設定

設定ファイルの編集

 設定ファイルを開いて編集します。

 デフォルトでは、受信時の確認のみで、送信時の署名が有効になっていないので、有効にします。

 デフォルトでは、すべてのメールでデフォルトの鍵を使って署名しようとするので、このあたりをコメントアウトします。

 署名に使う鍵の設定を読み込むようにします。

使用する鍵の設定

 キーテーブルを編集します。

 署名テーブルを編集します。指定方法が refile: ですので、以下の通り記載します。

OpenDKIM を起動

 とりあえず、OpenDKIM の設定はここまでなので、起動します。

 あわせて、自動起動設定をします。

Step5:Postfixの設定

 Postfix と OpenDKIM を関連づけます。

 以下の設定を末尾に追記します。

 Postfix の設定をリロードします。

Step6:DNS レコードの設定

DKIM 公開鍵レコードの設定

 DNS レコードの設定方法については、お使いのサーバソフトやサービスによって大きく異なりますので、詳細は割愛しますが、以下の内容を設定します。

 DNS の TXT レコードは、255文字以下である必要があります。鍵の長さが 2048bit だと、絶対に255文字におさまりません。
 その場合は、255文字以下で適当に分割して登録すれば良いです。お名前.com などの DNS サービスを利用している場合は、文字数制限を気にせず登録すると、適切に分割して返してくれるので、ひとつのレコードとして登録すると良いです。
 ということで、自前の DNS など255文字の制約を受ける場合は、以下の通り、入力します。

 255文字の制約を受けない場合は、以下の通り、入力します。

ADSP レコードの設定

 DKIM の公開鍵をどのように扱ってほしいかという情報を、DNS に設定します。

all このドメインから送信されるメールは、すべてメール作成者署名が与えられる
unknown このドメインから送信されるメールのいくつか、またはすべてに、メール作成者署名が得られる
discardable このドメインから送信されるメールは、すべてメール作成者署名が与えられる。そして、もしメール作成者署名が得られない場合は、受信者はそのメールを破棄することが望まれる

 とりあえず、無難な”unknown”を選択します。
 登録するレコードは、以下のようになります。

DNS 設定の確認

 DNS 設定が反映され、ある程度伝搬されたころを見計らって確認します。

 ;; ANSWER SECTION: に登録した内容が表示されていれば、設定完了です。
 dig コマンドがインストールされていない場合は、以下のコマンドでインストールするか、インストールされている端末で確認します。

Step7:追加の設定

 Step:6 までで、通常の環境であれば動作すると思います。

署名が二重にされる場合

 冒頭記載の私の記事を参考に、amavisd-new をインストールしている場合は、DKIM の署名が二重にされます。
 二重にする意味は全くありませんし、パフォーマンス低下にもつながりますので、一度だけ署名するように以下の設定を追加します。

 以下の通り、”receive_override_options”に”no_milters”のオプションを追加します。

 ちなみに、amavisd-new にも DKIM の署名機能があります。OpenDKIM ではなく amavisd-new で実装する場合は、以下のサイトが分かりやすいと思います(たぶん英語)。
 Postfix+DKIM email signatures in amavisd-new – KutuKupret

セキュリティ設定

 OpenDKIM は、root 権限で実行する必要はないようです。そのままでも問題ありませんが、以下のページを参考に、追加設定を行った方が良いようです。
 OpenDKIM – ArchWiki

参考情報

 DKIM (Domainkeys Identified Mail) : 迷惑メール対策委員会

スポンサーリンク(広告)
スポンサーリンク(広告)