Fedora Server 上の OpenDKIM で、opendkim-testkey がキーをロードし、キーをチェックしていると表示した後、「クエリが失敗しました」とだけ表示されます。何が問題なのかをどのように見つけて修正すればよいでしょうか?

Fedora Server 上の OpenDKIM で、opendkim-testkey がキーをロードし、キーをチェックしていると表示した後、「クエリが失敗しました」とだけ表示されます。何が問題なのかをどのように見つけて修正すればよいでしょうか?

Fedora Server37(2023年2月1日頃更新)で、新規OpenDKIMインストールが実行されました(バージョンはv2.11.0です)。構成には、署名テーブルとキーテーブルの作成、キーの作成、およびでの公開が含まれていましたDNS。ここまでは順調です...

経由でテストしたところopendkim-testkey、失敗しました。

初めて実行したときは「安全でないアクセス許可」というエラーが表示されましたが、それでもエラーは止まりませんでした。しかし、しばらくそのことに集中しました。所有権とアクセス許可を 6 回以上変更しただけで、エラーは消えませんでした。だから、今のところは気にしないことにします。

署名テーブルにエラーがあったに違いないと認識したので、微妙な変更を加えました。... 公式ドキュメントでは必須とは書かれておらず、まったく不要に思えるにもかかわらず、どうやら「_domainkey」の使用が要求されているようですが、どうやら必須のようです。署名テーブルのエントリにこの「_domainkey」テキストを追加するという一見ばかげた行為に従ったところ、少なくとも正しい がロードされているという表示が出て、さらに進んだため、そう思うのですkeyfile。それでも、「クエリに失敗しました」というエラーがまだ表示されます。

明確にするために、セッションは次のようになります。

opendkim-testkey -d some-fqdn.com -s default -vvvvvvv
opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: /etc/opendkim/keys/some-fqdn.com/<prefix>.private: WARNING: unsafe permissions
opendkim-testkey: key loaded from /etc/opendkim/keys/some-fqdn.com/<prefix>.private
opendkim-testkey: checking key 'default._domainkey.some-fqdn.com'
opendkim-testkey: 'default._domainkey.some-fqdn.com' query failed

まあ、ヒントをありがとうopendkim-testkey

からは何も役に立ちませんでしたsystemctl status opendkim.service。ステータスは「アクティブ (実行中)」で、エラーは発生していないと表示されています。そこで、ログ (この場合は ) をチェックしたところ、いくつかのエントリがありました。最新のものであることを確認するために、コマンドで ping を実行しながらを/var/log/messages切り替えてみたところ、次の結果が得られました。opendkimsystemctl reloadgreptail -f

Mar  5 11:17:21 fs1 systemd[1]: Started opendkim.service - DomainKeys Identified Mail (DKIM) Milter.
Mar  5 11:17:21 fs1 audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 subj=kernel msg='unit=opendkim comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
Mar  5 11:17:22 fs1 abrt-notification[3173323]: Process 348313 (opendkim) crashed in _nl_load_domain.cold()

うわあ!クラッシュした?それならなぜ起動して動作中と表示されるのですか?おかしいですね!

調査してみると、_nl_load_domain.cold() は実際には C++ 関数であることがわかります。

関数の定義は次のように始まります:

internal_function
_nl_find_domain (const char *dirname, char *locale,
         const char *domainname, struct binding *domainbinding)
{
  struct loaded_l10nfile *retval;
  const char *language;
  const char *modifier;
  const char *territory;
  const char *codeset;
  const char *normalized_codeset;
  const char *alias_value;
  int mask;

それだけでこの男はこう思うだろう。「うーん...次は何をしようか?」

(問題のドメインは、opendkim! を除いて、かなり堅牢なライブでDNS zone正常に動作しており、問題のシステムはDNSクエリに完全にアクセスできることに注意してください。)

注記 OpenDKIM受信メールのDKIMキーは問題なく検証されています。署名部分も機能させる必要があります。

関連情報