自ドメインから送信したlogwatchがGmail宛に届かない。

logwatchを自分のドメインからGmail宛に送信しているのですが、ある日突然届かなくなりました。
迷惑メールにも入っていないし、logwatchコマンドも動作するため、メール送信時のトラブルのようです。
解決までにチェックしたことをメモとして残します。

環境

  • CentOS 8.1
  • Logwatch 7.4.3
  • Postfix 3.3.1
  • DNS設定はValue-Domain
  • 送信用のドメインはサブドメイン mail.example.jp を使用する。

maillogを確認する

 (host gmail-smtp-in.l.google.com[108.177.125.26] said: 550-5.7.26 This message does not have authentication information or fails to 550-5.7.26 pass authentication checks. To best protect our users from spam, the 550-5.7.26 message has been blocked. Please visit 550-5.7.26  https://support.google.com/mail/answer/81126#authentication for more 550 5.7.26 information. e15si7269825pfl.346 - gsmtp (in reply to end of DATA command))

This message does not have authentication information or fails to 550-5.7.26 pass authentication checks.

この設定で5年以上運用してたけど今までそんなこと一言も言ってなかったやんけお前…。送信ドメイン認証に対応してないので、そのチェックで弾かれたようです。
送信ドメイン認証のSPFとDKIMの設定を行います。

SPFレコードを設定する

以下の記事が大変詳しいため、こちらで説明できる事が特にないです。
自ドメインのDNSとPostfixをSPF/DKIM対応させてみた - Qiita

Value-Domainの場合の設定例は以下です。

txt mail v=spf1 ip4:{サーバのIPアドレス} ~all

DKIMレコードを設定する

SPFの記事を見ればOKです。

Value-Domainでサブドメインを使う場合、ちょっとだけ設定がややこしいかもしれない。
DKIM署名に失敗したときもメールは送信してほしいので、ADSPレコードの値はunknownとしました。
Value-Domainの場合の設定例は以下です。

txt {セレクタ名}._domainkey.mail v=DKIM1;k=rsa;p={公開鍵};
txt _adsp._domainkey.mail dkim=unknown

注意点として、v=DKIM1;(DKIMのバージョン)はレコードの一番最初に設定する必要があるため、p v kの順序で設定するとDKIMをPASSしません。(なぜこんなことを書いてるかというと、「CentOS DKIM Postfix」 でググって10位以内に出てくるITコンサル会社の技術ブログの記事が間違ってるからです。2年前の記事ですが、2年前でも設定通らないはずなんだよなぁ…。)
また、SPF, DKIM共にAレコードの設定は不要です。

SPF/DKIMレコードのチェックをする

Value-Domainの場合、DNS設定更新されるまで1時間はかかったので、ある程度待ってからテストしたほうがいいです。

Gmailで動作確認する

logwatch --mailto {Gmailのメールアドレス}でメールを飛ばして、メールが送信できるか確認します。SPFとDKIMを設定しておけば送信できるはずです。
受信したメールのソースを確認して、Authentication-Resultsにdkim=passとspf=passがあればOKです。

この設定するまで知らなかったのですが、アイコンが?のメールってドメイン認証が通ってないメールなんですね。連絡先にlogwatchの送信元を登録してるのに、やたら迷惑メール判定されていたのはこれが原因だったようです。

勉強になりました。