あれから、いろいろ試したところ、前出記事「PostfixをSPF認証に対応(CentOS)」の設定だけでは、まだ完璧ではなかったようで、自宅メールサーバーからgmailへ送ると、迷惑メールと判断されていました。

一回でも、gmail側から自宅メールサーバー側に送り、そのメールを受信した後であれば、それ以降は、自宅メールサーバー側からgmail側へ送っても迷惑メールに振り分けられる事はないという状況でした。

そこで、さらなる対策(第2ステップ)としてDKIM認証を設定してみました。

DKIMは、DomainKeys Identified Mail の略で、受信した電子メールが「正当な送信者から送信された改ざんされていないメール」かどうかを調べることができる電子署名方式の送信ドメイン認証技術です。メールに付けるパスポート(署名)のようなものです。送信側のメールサーバで署名に必要な秘密鍵と公開鍵を作成し、この秘密鍵を使ってメールサーバで署名を行うように設定します。一方、ペアの公開鍵はメールドメインを管理しているDNSサーバのTXTレコードに登録しておき、受信側のメールサーバはこの公開鍵を使って電子署名の検証を行います。



■OpenDKIMをインストール
PostfixでDKIMを使えるように「OpenDKIM」をインストールします。

    # yum -y install opendkim
    



■DKIM署名用の秘密鍵と公開鍵の作成
鍵の保存ディレクトリを作成。解りやすいようドメイン名を付けます。

    # mkdir /etc/opendkim/keys/a21-hp.com
    

opendkim-genkeyコマンドで鍵ファイル(秘密鍵と公開鍵)を作成。
その後、作成された秘密鍵と公開鍵ファイルのオーナーとグループを変更します。

    # opendkim-genkey -D /etc/opendkim/keys/a21-hp.com -d a21-hp.com -s 20160605
    #
    # chown opendkim:opendkim /etc/opendkim/keys/a21-hp.com/20160605.private
    # chown opendkim:opendkim /etc/opendkim/keys/a21-hp.com/20160605.txt
    

opendkim-genkeyコマンドのパラメータは、ディレクトリ指定(-D)、ドメイン名指定(-d)、セレクタ名指定(-s)です。
セレクタ名は日付にしておきます。

秘密鍵は自宅メールサーバ機で稼働させるopendkimがpostfixと連携して使用。
公開鍵はその情報をDNSサーバに登録します。
/etc/opendkim/keys/a21-hp.com/20160605.private ・・・秘密鍵
/etc/opendkim/keys/a21-hp.com/20160605.txt   ・・・公開鍵



■公開鍵レコードとADSPレコードの作成
DNSサーバーにはDKIM認証の為の公開鍵とADSPレコードを登録する必要があります。

(1)公開鍵レコード
生成された公開鍵ファイルの中に書式があります。
ちなみに、UbuntuのSSHクライアント「PuTTY SSH Client」では、テキストのコピー&ペーストがやりにくかったので、今回はWinsowsのSSHクライアント「Poderosa」を使用しました。

生成された公開鍵のファイルは以下のようになっていますので、この中から必要な情報をコピー&ペーストして、ブラウザで表示したDNSサーバーの設定画面(現在ELDOMAIN利用中)へ登録します。

20160605._domainkey     IN      TXT     ( "v=DKIM1; k=rsa; "
         "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDillKortSHudfSeaBgqhJQo3q+bnq8p8v9acquP/ywY1edbbY3xSSBFs2VDpYkNBMLzA7Qn+ZRZN1LP7CJCZZ7mOQXYzjk0BW1YKl0svGzc3xW/UVrQUC3t18VLyQnVUkOvRLD4Iu4Fxtty1/fCY4uqokzjYsmdUBebdsuu+N0LQIDAQAB" )  ; ----- DKIM key 20160605 for a21-hp.com

20160605aサービス名のテキストボックスに「20160605._domainkey」を放り込んで、20160605._domainkey.a21-hp.comとなります。
制御タイプはプルダウンリストから「TXT」を選択します。
データのテキストボックスには「v=DKIM1; k=rsa; p=MIGfMA・・・(長いので略)・・・IDAQAB」を放り込んで、最後に「追加する」ボタンを押します。

(2)ADSPレコード
ADSPはAuthor Domain Signing Practicesの略らしい。
(・・・何が何やら・・・もう、ぼむばへっど・・・)

サービス名のテキストボックスに「_adsp._domainkey」を放り込んで、_adsp._domainkey.a21-hp.comとなります。
制御タイプはプルダウンリストから「TXT」を選択します。
データのテキストボックスには「dkim=unknown」を放り込んで、最後に「追加する」ボタンを押します。

以上でDNSサーバーへの公開鍵の登録は終了です。

登録したレコードが正しく引けるかは、以下のコマンドで確認できるようですが、私の環境では内部向けDNSサーバーが邪魔するようでうまく確認できませんでした

2016年07月07日追記
自宅サーバー(CentOS)に、内部向けのDNSサーバー(プライマリDNS1)で解決しない場合、ELDOMAINのDNSサーバー(セカンダリDNS2)を探すように設定を追加したところ、正常に動作しました。
参照サイト:CentOS 参照するDNSサーバの設定

公開鍵レコードの確認

    # dig 20160605._domainkey.a21-hp.com txt
    

ADSPレコードの確認

    # dig _adsp._domainkey.a21-hp.com txt
    



■OpenDKIMの設定
自宅サーバー側で動かすopendkimの設定です。

設定ファイル「/etc/opendkim.conf」を開き編集します。

Mode    sv ←「v」を「sv」に変更
 
#KeyFile /etc/opendkim/keys/default.private ←コメントとする
 
KeyTable        refile:/etc/opendkim/KeyTable ←コメントを外す
 
SigningTable   refile:/etc/opendkim/SigningTable ←コメントを外す
 
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts ←コメントを外す
 
InternalHosts  refile:/etc/opendkim/TrustedHosts ←コメントを外す

秘密鍵を指定する「/etc/opendkim/KeyTable」ファイルを編集(末尾に追加)。

20160605._domainkey.a21-hp.com a21-hp.com:20160605:/etc/opendkim/keys/a21-hp.com/20160605.private

ドメイン名を指定する「/etc/opendkim/SigningTable」ファイルを編集(下記を追加)。

*@a21-hp.com 20160605._domainkey.a21-hp.com

念のため、起動時に秘密鍵を自動生成しないように「/etc/sysconfig/opendkim」に下記を追加。

AUTOCREATE_DKIM_KEYS=NO



■OpenDKIMを起動

opendkimを起動します。

    # service opendkim start
    

opendkimを自動起動設定、確認。

    # chkconfig opendkim on
    # chkconfig --list opendkim
    



■Postfix と OpenDKIM を接続

PostfixからOpenDKIMを使う為「/etc/postfix/main.cf」ファイルの最後尾にでも追加。

#
# DKIM
#
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

postfixをに変更を読み込ませます。

    # service postfix reload
    



■DKIM認証の動作確認
メールメッセージのソースを表示し「DKIM pass」が表示されること、ログファイル「/var/log/maillog」で「opendkim」プロセスが正常に動作することを確認します。

しかし、実際には、自宅サーバからgmailへの送信で、受信メールを迷惑メールに分類してしまいました。

試しに、gmailからgmailへ送ったメールメッセージのソースを表示させると、

dkim=pass ・・・
spf=pass ・・・
dmarc=pass

とあり、どうやらDMARCというレコードをDNSサーバに追加してやる必要があるようです。

・・・長くなったので、次回。

参考サイト:
Postfix DKIM 認証 設定メモ(CentOS6.5+OpenDKIM) | あぱーブログ