あれから、いろいろ試したところ、前出記事「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
サービス名のテキストボックスに「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サーバに追加してやる必要があるようです。
・・・長くなったので、次回。