CentOSでメールサーバーを構築。DKIMで迷惑メールと識別されないメールサーバーに。(メールサーバー 4)

dkim-postfix04-top
構築したメールサーバーから送信したメールが迷惑メールとして識別されたことはありませんか?
このような場合は、送信したメールが経由するメールサーバーの、なりすましメール対策に引っかかっている場合が殆どです。
(まれに迷惑メールのブラックリストに登録されていることもあります)
本記事では、送信したメールが迷惑メールとして識別されないように、メールに電子署名を行う方法を紹介します。
なりすましメール対策としてポピュラーなものは、以前の記事でも少し紹介したSPFがありますが、GMailなどではSPFだけ設定しても迷惑メールとして識別されてしまいます

スポンサーリンク

GMail等のなりすましチェックが厳しいメールシステムに迷惑メールとして識別されないようにするには送信するメールに電子署名を行い、そのメールが正しいサーバーから送信されたことを、受信するメールサーバー側で確認する技術、DKIM(ディーキム)の設定が必要となります。
DKIMはDomain Keys Identified Mailの略で、以下のように動作します。
dkim-kousei

  1. ドメインを管理するDNSサーバーに公開鍵の情報を登録します。
  2. 送信者がメールを送信します。ドメインのメールサーバーが電子署名をメールに行います。
  3. 受信先のメールサーバーが電子署名の検証を行うため、DNSサーバーに公開鍵を要求します。
  4. 公開鍵を利用して電子署名が正しいものかを受信側メールサーバーが検証します。

メールの電子署名を検証するため、そのメールが正しいメールサーバーから配信されているかを確認できます。このDKIMをCentOSとPostfixで動作するように設定する手順を紹介します。

目次

1.DKIMを設定するメールサーバーの環境

DKIMの設定を行う環境は、メールサーバーを設定した前回の記事
>「CentOSでメールサーバーを構築。Let’s EncryptでSSL/TLSを設定して安全な通信を行う。(メールサーバー構築 3)」
を踏襲しています。前回の記事では以下の前提条件を元に設定を行いました。確認の意味で再度、記載しておきます。
SMTPS-img2

  • サーバーが配置されているネットワークはインターネット上として、グローバルの固定IPが割り当てられています。
  • ドメインはtestdom.comを利用します。
  • ホスト名にはmailを設定しています。(mail.testdom.com)
  • SMTPにはPostfixを利用して、迷惑メール対策としてSMTP-AUTHを設定しています。
  • POP3/IMAPにはdovecotを利用しています。
  • Let’s Encryptで取得したサーバー証明書を利用してSMTPS/IMAPS/POP3Sを設定しています

この環境にDKIMを設定していきます。尚、利用するソフトウェアのバージョンは以下の通りになります。

  • postfix.x86_64 2:2.10.1-6.el7
  • opendkim.x86_64 2.11.0-0.1.el7

2.epelレポジトリのインストール(未インストールの場合のみ)

DKIMを利用するためのソフトウェアはEPELレポジトリに含まれています。もし本ブログのメールサーバー構築に関する記事を順番にご覧いただいている場合は、既にEPELレポジトリは導入済みかと思います。念のため、ここではインストールの導入手順のみ紹介します。
yumコマンドでEPELレポジトリをインストールします。EPELレポジトリは”epel-release”パッケージ名になります。以下のようにインストールを行います。

エラーの出力がなく”完了しました!”と表示されれば、EPELレポジトリは正常にインストールされています。

3.opendkimのインストール

DKIMを利用するためにはopendkim(”オープンディーキム”と読みます)パッケージのインストールが必要になります。本章ではopendkimパッケージの導入について説明します。

3-1.opendkimパッケージの確認

EPELレポジトリに含まれるopendkimパッケージを確認します。”yum search”コマンドを実行します。

になります。インストール前にopendkimパッケージの詳細を確認します。”yum info”コマンドを実行します。

説明にメールに電子署名を行うためのパッケージであることが記載されています。これでパッケージの詳細が確認できましたので、インストールを実施します。

3-2.opendkimパッケージのインストール

”yum install”のコマンドでopendkimパッケージをインストールします。

コマンドを実行すると、インストールの状況が出力されます。

エラーの出力がなく”完了しました!”と表示されれば、opendkimパッケージは正常にインストールされています。

3-3.opendkimインストール後の確認

opendkimがインストールされたことを確認します。インストールされているパッケージはyumコマンドで確認できます。以下のようにyumを実行することで、opendkimパッケージがインストールされていることを確認します。

上記のように”libopendkim”と”opendkim”が表示されればパッケージはインストールされています。

4.opendkim 秘密鍵の作成

本章ではインストールしたopendkimを利用してキーペア(秘密鍵/公開鍵)を作成する手順を紹介します。

4-1.キーペア保存用のフォルダ作成

opendkimは標準で”/etc/opendkim/keys”以下にキーペア(秘密鍵/公開鍵)の情報が記載されたファイルを作成します。
複数のドメインを運用するマルチドメインでは、ドメイン事にフォルダを作成して保存するようにした方が、管理しやすいと思います。
本記事の環境はマルチドメインではありませんが、testdom.comドメイン用にフォルダを作成します。

これでキーペア保存用フォルダの作成は完了です。(作成するフォルダ名は運用するドメインに合わせて下さい)

4-2.キーペア(秘密鍵/公開鍵)の作成

”opendkim-genkey”コマンドを利用して電子署名用のキーペアを作成します。以下のような形で実行します。

”-s”のセレクタ名ですが、電子署名ヘッダーに表示されるラベルになります。任意のものを指定します。セレクタ名はファイルの作成日を利用するパターンが多いため本記事でも日付を指定します。以下のように実行を行いました。

エラーの出力が無ければ、コマンドは正常に実行されています。念のため、キーペアファイルの確認をしてみます。

鍵ファイルである”181026.private”と公開鍵の情報が記載された”181026.txt”が作成されていることが確認できました。

4-3.キーペア(秘密鍵/公開鍵)ファイルの所有者変更

opendkimサービスからファイルにアクセスできるようにファイルの所有者を変更します。chownコマンドを以下のように実行します。

コマンド実行後に所有者を確認します。

opendkimユーザーに所有者が変更されていることが確認できます。ここまでの手順でキーペア(秘密鍵/公開鍵)ファイルの作成は完了です。

5.DNSの設定

本章では作成した公開鍵ファイルに記載されている情報をドメインのTXTレコードに設定する手順を紹介します。

5-1.公開鍵の確認

DNSサーバーへ登録する公開鍵の情報は”181026.txt”に記載されています。先ずはこのファイルの内容を確認します。

この情報を元にDNSへのレコード設定を追加します。
公開鍵ファイルに含まれる情報についての詳細は以下のようになります。

  • v=DKIM1 keyレコードのバージョン番号です。(指定する場合はDKIM1になります。)
  • k=rsa 電子署名の作成に利用できる鍵の形式、DKIMではRSAのみサポート
  • p=…. 公開鍵データ

5-2.DNSサーバーへの公開鍵設定

公開鍵をDNSサーバーへ設定します。本記事ではDNSサーバーとしてお名前ドットコムのサーバーを利用している場合の手順を紹介します。BINDなど自前のDNSサーバーを運用している場合の手順は割愛しています。
設定が必要となるのは以下の2レコードです。

  • 公開鍵用レコード… キーペアの公開鍵を登録する
  • DKIMポリシー用レコード… ADSP(Author Domain Signing Practice)DKIM署名が有効ではないメールの扱いを設定する

この2つのレコードについて、設定手順を紹介していきます。

5-2-1.DNSサーバーへの公開鍵登録

DNSサーバーへ公開鍵を設定します。お名前ドットコムでは、DNSのレコード追加として以下のようにエントリを追加します。
dkim-postfi04-5-2-1-1
各設定は公開鍵の情報を元に追加します。

  • ホスト名 … 181026._domainkey.(testdom.com)
  • TYPE … TXT
  • TTL … 500
  • VALUE … v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFOu6xDK9rSuttAbMNY9Cs2cmOWxUV48kMvalmFo0trkL6zoncBvYyCZ7z4o9F79cWPQCLSNLuviCRbS9k5LsZEr9M8nM+k+zqYQKh8ttTWMt5odvpcz6C4miQMJ/Cc2gfcpRQDFWWSqm2O6BhALV7p1tzUmbchLxtBRtjcMXXTQIDAQAB

TTLはデフォルトで3600になっています。3600のままでも良いのですが、間違って登録を行った時に修正に時間がかかるため、500に変更しています。
VALUEについては、公開鍵ファイルに記載されている内容を一行で””(ダブルクォーテーション)を外して設定します。

5-2-2.DNSサーバーへのADSPレコードの登録

次にDKIM署名が有効でないメールの扱いを設定するためのADSPレコードを登録します。ADSPレコードは設定値として”all””unknown””discardable”の何れかを指定します。本記事ではADSPレコードとして、電子署名がないメール(認証に失敗したメール)でも配信できる”unknown”を設定します。お名前ドットコムでは、DNSのレコード追加として以下のようにエントリを追加します。

  • ホスト名 … _adsp._domainkey.(testdom.com)
  • TYPE … TXT
  • TTL … 500
  • VALUE … dkim=unknown

VALUEは””(ダブルクォーテーション)を付けずに登録します。実際の設定画面は以下のようになります。
dkim-postfix04-5-2-2
これでADSPレコードの設定は完了です。

5-2-3.DNSサーバー DKIM用レコードの確認

両レコードが追加されると以下のようになります。
dkim-postfix04-5-2-2-1
問題なければ、設定を完了します。

5-3.設定の確認

TXTレコードの設定が完了したところで、レコードの確認を行います。digコマンドを使って、登録したTXTレコードが表示されることを確認します。

5-3-1.公開鍵の確認

先ずは公開鍵から確認を行います。digコマンドを以下のように実行します。

以下のように応答があれば、正常に設定が完了しています。

スポンサーリンク

5-3-2.DKIMポリシーレコード(ADSP)の確認

以下のように応答があれば、レコードは設定されています。

これでDNSサーバーへの公開鍵用設定と確認は完了です。

6.opendkimの設定

DKIMを利用するため

  • opendkimパッケージのインストール
  • 電子署名用ファイルの作成
  • DNSへの公開鍵登録

まで完了しましたので、ここからはopendkimの設定を変更します。opendkimの設定ファイルは複数に分かれています。順に説明していきます

6-1.opendkim.confの変更

opendkimの基本的な設定は”/etc/”ディレクトリ以下にあるopendkim.confファイルで行います。opendkim.confの設定変更前に、既存のファイルをバックアップしておきます。具体的には以下の手順でコピーを行います。

バックアップの完了後、エディタでopendkim.confファイルを開いて変更を行います。本環境ではOSの標準的なエディタである、viエディタを利用しています。

opendkim.confファイルが開きます。具体的は変更ポイントを説明していきます。
尚、変更点で”コメントにする”、”コメントを外す”という記載ですが、以下のような意味合いになります。

  • コメントを外す => 行頭の”#”を削除する。
  • コメントにする => 行頭に”#”を付ける。

6-1-1.Modeパラメータ

Modeパラメータは確認を行うモードを設定します。デフォルトの設定ではメール受信時の確認のみの”v”になります。本記事ではなりすまし回避として送信時の署名を行う必要がありますので”s”を追加します。

上記のようになっているModeパラメーターを以下のように変更します。

6-1-2.keyFileパラメータ

KeyFileパラメータは利用する秘密鍵ファイルを指定します。KeyTableファイルで秘密鍵を指定するため、ここでは本設定を無効にします。

上記のように設定されているKeyFileパラメーターをコメントにして、無効にします。

6-1-3.keyTableパラメータ

KeyTableパラメータには利用する秘密鍵を指定します。

デフォルトではコメントになっていますので、以下のようにコメントを外します。

6-1-4. SigningTableパラメータ

SigningTableパラメータには電子署名を行う送信元アドレスを指定します。

デフォルトでは無効になっていますので、SigningTableパラメーターを以下のように変更します。

6-1-5. ExternalIgnoreListパラメータ

ExternalIgnoreListパラメータには認証を行わないメールサーバーを指定します。本環境ではメールサーバー自身になります。

ExternalIgnoreListパラメーターを以下のように変更します。

6-1-6. InternalHostsパラメータ

InternalHostsパラメータはメールの送信時に、必ず認証を行うメールサーバーを指定します。本環境ではメールサーバー自身になります。

InternalHostsパラメーターを以下のように変更します。

ExternalIgnoreListとInternalHostsのパラメーターが同じなのは、おかしな感じがしますが、以下のような考え方になります。

  • ExternalIgnoreList ローカルホストから、ローカルホストに配送されるメールは認証不要
  • InternalHosts ローカルホストから外部にメールを配送する場合には認証が必須

6-1-7. SoftwareHeaderパラメータ(任意での設定)

SoftwareHeaderパラメータはヘッダーにopendkimのソフトウェア情報を出力するための設定になります。本設定はデフォルトでは有効になっており、以下のようなヘッダーが出力されます。

セキュリティ面で、ソフトウェアのバージョンを表示したくない場合には、このパラメータを設定値を変更します。本記事では変更していません。

以下のように変更します。

各設定項目の変更が終わったら、ファイルを保存します。これでopendkim.confの設定は完了です。

6-2.KeyTableの変更

KeyTableファイルは電子署名に利用する秘密鍵を指定するファイルになります。KeyTableファイルは”/etc/opendkim”ディレクトリ以下にあります。KeyTableファイルの変更前に、既存のファイルをバックアップしておきます。具体的には以下の手順でコピーを行います。

バックアップの完了後、エディタでKeyTableファイルを開いて変更を行います。本環境ではOSの標準的なエディタである、viエディタを利用しています。

KeyTableファイルが開きます。KeyTableファイルへの記載は以下のようなフォーマットがあります。

このフォーマットに即して、本記事ではファイルの最下行に以下の記載を追記しました。

KeyTableの追記が終わったら、ファイルを保存します。これでKeyTableの設定は完了です。

6-3.TrustedHostsの変更

TrustedHostsは信頼できるメールサーバーを追加します。今回の記事ではopendkimとpostfixが同じサーバー上で動作する前提になりますので、ループバックアドレスを指定します。
デフォルトでループバックアドレスが指定されているため、設定変更は行いません。
以下がファイルの内容です。

6-4.SigningTableの変更

opendkimの基本的な設定は”/etc/opendkim”ディレクトリ以下にあるSigningTableファイルで行います。設定変更前に、既存のファイルをバックアップしておきます。具体的には以下の手順でコピーを行います。

バックアップの完了後、エディタでSigningTableファイルを開いて変更を行います。本環境ではOSの標準的なエディタである、viエディタを利用しています。

SigningTableファイルが開きます。具体的は変更ポイントを説明していきます。

6-4-1. SigningTableの設定

SigningTableパラメータは署名を行うドメインを記載します。記載についてはフォーマットがあります。

上記のフォーマットを踏まえて、最下行に以下を追記します。

SigningTableの追記が終わったら、ファイルを保存します。これでSigningTableの設定は完了です。

6-5.opendkim 起動の確認

設定が終わりましたので、opendkimを起動します。CentOSでは7系からsystemctlコマンドでサービスの起動・停止を行います。以下のようにsystemctlを実行することで起動できます。

エラーが出力されなければ、opendkimは起動しています。
続いて、サービスの状態を確認します。systemctlコマンドにstatusオプションを付けて実行することで、起動したサービスの状態について、詳細な情報を取得することができます。
以下が実行例です。

上記では分かり難いかもしれませんが、黒丸(●)の部分が正常な起動状態の場合、緑色で表示されます。opendkimのActive項目に(running)と表示されていますので、起動されていることが確認できます。

6-6.opendkim 自動起動の設定

サーバーの再起動や停止の復旧時に、opendkimが自動的に起動するように設定します。サービスの自動起動を設定するにもsystemctlコマンドを利用します。自動起動は以下のようにsystemctlコマンドを実行します。

エラーが出力されなければ、自動起動は設定が完了しています。
続いて自動起動が設定されたことを確認します。

実行結果として “enabled”と表示されれば自動起動の設定は完了です。

7.Postfixの設定変更

PostfixでDKIMを利用するため設定は”/etc/postfix”ディレクトリ以下にあるmain.cfファイルで行います。main.cfの設定変更前に、既存のファイルをバックアップしておきます。具体的には以下の手順でコピーを行います。(.org、.org2、org3ファイルは以前の記事で作成していますので、本記事では.org4としています。)

バックアップの完了後、エディタでmain.cfファイルを開いて変更を行います。本環境ではOSの標準的なエディタである、viエディタを利用しています。

main.cf設定ファイルが開きます。具体的は変更ポイントは以下になります。

7-1.opendkim用設定の追加

SMTP接続時にDKIMを利用する設定パラメータを追記します。このパラメータはデフォルトのmain.cfには項目が無い為、設定ファイルの最下行に以下を追記します。

各パラメータの内容は以下のようになります。

  • smtpd_milters … smtpdが利用するmilterを指定します。
  • non_smtpd_milters … smtpd以外が利用するmilterを指定します。
  • milter_default_action … milterがメールを受け取った時のデフォルトの挙動を指定します。

追記が出来たら、ファイルを保存して終了します。

7-2.設定ファイルのチェック

設定ファイルのチェック用としてコマンド”postconf”を実行します。デフォルトパラメーターとは異なる設定のみを明示的に表示する”-n”オプションを付与します。以下のように実行します。

出力された内容を確認して、変更した部分が反映されていることを確認します。
またPostfixには設定ファイルの誤りをチェックするためのコマンド”postfix check”が用意されています。このコマンドで設定ファイルのチェックも行っておきます。

エラーが表示されなければ、main.cfファイルには問題がありませんので、確認は完了です。

7-3.main.cfファイル変更点の反映

変更した設定を反映するためにPostfixを再起動します。systemctlコマンドを以下のように実行します。

エラーが無ければ、正常に再起動は実行されています。再起動後にPostfixのステータスを確認します。

表示された上記のステータスから、Postfixが正常に起動していることが確認できました。

8.メールクライアントからの動作確認

DKIMが利用できるメールサーバーの設定ができましたので、テスト用クライアントからメールの送信を行い、DKIMによる電子署名が出来ていることを確認します。メールクライアントとしてはthunderbirdを利用しました。thunderbirdの設定は記事
>「CentOSでメールサーバーを構築。Let’s EncryptでSSL/TLSを設定して安全な通信を行う。(メールサーバー構築 3)」
から変更はありませんので、クライアントの設定を行っていない場合には、上記の記事をご覧下さい。

8-1.メールクライアントでの送信テスト(DKIM)

DKIMを設定したメールサーバーを利用して、外部ドメインにテスト用のメールを配信してみます。メールログを確認することでDKIMが有効になっているかを確認できます。
メールの送信元と送信先は

  • 送信元:testuser01@testdom.com
  • 送信先:sup@remsys.co.jp(Gmail)

になります。
送信時のメールログ(/var/log/maillog)から、該当するログを確認します。メールログには、以下のようにメールの配送ログが出力されました。

上記のログにopendkimサービスによる電子署名を追加したログ”DKIM-Signature field added (s=181026, d=testdom.com)”が表示されています。

8-2.受信側でのメールヘッダー確認

メールが正常に配送されましたので、受信してメールヘッダーを確認してみます。以下のようにDKIMの認証をパスしたログと、電子署名の記録が表示されています。
dkim-postfix04-8-2
これでDKIMを利用して電子署名されたメールの送信について確認が完了しました。

9.まとめ

現在、メールサーバーを運用する上で、なりすまし対策であるSPFとDKIMの設定は必須になっています。GoogleのGmailなどはDKIMが設定されていないサーバーからのメールについては、ほぼ迷惑メールと判別されてしまいますので、設定されていないメールサーバーを運用している場合には、これを機に設定を見直してみることをオススメします。
DNSとの関連もあるため、設定手順が煩雑に思えますが、一度、設定してしまえば、それ以後は特に気にすることもなく運用できます。
迷惑メールに判別されないために、是非、設定を行ってみて下さい。

関連する記事


Facebookでのご購読が便利です。

Twitter・Feedlyでもご購読できます。

Twitterでフォローする Feedlyでフォローする

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  • スポンサーリンク