Mail.Ru for BusinessでDKIMを実装した方法





最近、Habréで、あなたのコメントのおかげで、「ビジネス向けのMail.Ru」がどのように改善されているかについての記事がすでにありました。 今日は、具体化されたウィッシュリストの1つ、つまり、独自のDKIM署名を構成する機能について説明します。 私たちにとって、それは優先事項の1つでした。DKIMセットアップにより、ドメイン所有者は手紙の送信者を確認できます。 この投稿では、この機能の実装方法と、ドメインのDKIM署名の構成方法について説明します。



DKIMテクノロジーが必要な理由について少し

ウィキペディアは、「DomainKeys Identified Mail(DKIM)テクノロジーがいくつかの既存のフィッシング対策とスパム対策を組み合わせて、正当な電子メールの分類と識別を改善することを思い出させてくれます。 DKIMは、メッセージの送信者を決定するための従来のIPアドレスの代わりに、組織のドメイン名に関連付けられたデジタル署名をメッセージに追加します。 署名は受信者によって自動的に検証されます。



つまり、ユーザーがメールを送信するたびに、サーバーはデジタルDKIM署名付きの特別なヘッダーを追加します。 署名を生成するとき、秘密鍵が使用され(各ドメインには独自の鍵があります)、手紙からの抜粋があります。 このヘッダーにより、受信者サーバーは、このドメインの所有者によって実際に電子メールが送信されたことを確認できます。



DKIM署名は、他のスパム対策システムと同様に、信頼できる送信者と偽物の送信者を区別できる要因の1つです。 たとえば、DKIMはDMARCテクノロジーを提供しますが、これについては以前に説明しました 。 DMARCを使用すると、よく知られているサービスからのメッセージに偽装されたスパムおよびフィッシングメールを認識してフィルタリングできます。



さらに、FBLテクノロジーを機能させるにはDKIM署名が必要です (FBLのおかげで、メーリングリストの送信者は、顧客ベースのステータスとその忠誠心に関するフィードバックを収集できます。また、メーリングリストに対するサブスクライバーの反応を確認し、手紙の内容を変更できます)。



一般に、DKIM署名の設定は確かに有用で必要なものなので、「Do or not?」という質問は発生しませんでした。 仕事に取り掛かりました。 さらに、「Mail.Ru for business」でこの機能を実装した方法について詳しく説明します。 詳細が必要ない場合は、 「DKIMを構成するにはどうすればよいですか」項目に直接移動することをお勧めします。



DKIM署名のセットアップ方法は、Mail.Ru for Businessに登場しました

手紙を送るには、非常に一般的なexim4 Mail Transfer Agent(MTA)を使用します。 送信メッセージにDKIM署名を配置するためのツールが既に組み込まれています。 最近まで、私たちはすべての手紙にまさにこの方法で署名していました。 ただし、問題は、接続されたビジネスドメインの数が常に増加しており、各ドメインが独自の秘密キーを持っていることです。 以前にすべてのサーバーにキーを一度広げて、これらのキーへのパスをEximに伝えるだけで十分だった場合、このソリューションは役に立ちません。 Eximが集中型データベースのキーに適用するように「教えられた」場合、問題は解決できます。 それで、そうすることにしました。



すぐに言ってやった。 多くの専門家がEximの豊富なカスタマイズオプションを高く評価しています。 組み込みの構成言語を使用すると、Eximは「フラット」ファイル、バークレーデータベース内のデータを照会し、MySQLなどのリレーショナルデータベースでSQL照会を実行するように簡単にトレーニングできます。 平均的な企業のメールサーバーのニーズには、設定オプションで十分です。 さらに何かが必要な場合は、Eximで独自のルックアップモジュールを作成する機会があります。これは、組み込み機能とともに構成で使用できます。



データベースからキーを要求するために、小さな補助ルックアップモジュールが作成されます。 彼は、データベースへの接続の確立、承認、希望するシャードの検索、レプリカ、受信データの復号化などに従事し、シンプルな辞書インターフェースを提供します。 モジュールの作成プロセスを以下に簡単に説明します。



まず、src / lookups / dkim.cファイルをソースツリーに追加します(既存のモジュールと同様に、ビルドシステムに追加することを忘れないでください)。 モジュールのソースコードが含まれています。



次に、ファイル内の新しいルックアップ要求の構造について説明します。



/*       */ static lookup_info _lookup_info1 = { US"dkim_privkey", /* lookup name */ lookup_querystyle, _open_connection, /* open function */ NULL, /* no check function */ _get_priv_key, /* find function */ _close_connection, /* close function */ _tidy_cache, /* tidy function */ NULL, /* no quoting function */ NULL /* no version function */ }; /*      */ static lookup_info _lookup_info2 = { US"dkim_selector", /* lookup name */ … }; /*      */ static lookup_info _lookup_info3 = { US"dkim_domain", /* lookup name */ … }; static lookup_info *_lookup_list[] = { &_lookup_info1, &_lookup_info2, &_lookup_info3 }; lookup_module_info dkim_lookup_module_info = { LOOKUP_MODULE_INFO_MAGIC, _lookup_list, 3 };
      
      







構造体のコールバック関数には、明確なインターフェースと目的があります。 これらの関数の実装の詳細は、記事の範囲を超えています。 私は、ドキュメントと例が目でこれをすべて理解するのに十分であることだけに注意します。



モジュールの内部を実装した後、それを登録するために残ります。 src / drtables.cファイルに移動し、モジュールの説明を追加します(行を正確に挿入する場合、コンテキストから明らかです-標準コードとの類推により)。



 extern lookup_module_info dkim_lookup_module_i void init_lookup_list(void) { … addlookupmodule(NULL, &dkim_lookup_module_info); ... }
      
      







Eximの構成でのモジュールの使用方法は次のとおりです。



 begin transports remote_smtp: driver = smtp dkim_domain = ${lookup dkim_domain{$sender_address_domain}{$value}{DKIM_DEFAULT_DOMAIN}} dkim_selector = ${lookup dkim_selector{$sender_address_domain}{$value}{DKIM_DEFAULT_SELECTOR}} dkim_private_key = ${lookup dkim_privkey{$sender_address_domain}{$value}{DKIM_DEFAULT_KEY}}
      
      







おそらく、構成内のすべてのパラメーターを埋めるために3つのルックアップが行われていることにすでに気付いているでしょう。 単純にキャッシュを使用することにしました:最初の要求はすべての必要な情報をすぐに受信し、モジュールの内部変数に保存し、後続の要求は必要な情報がキャッシュされているかどうかをチェックします。



作業のスキームは次のとおりです。管理者パネルを介してドメイン管理者が既存のものを追加するか、新しいシークレットと公開DKIMキーを生成します。 管理パネルはそれらをキーストアに保存します。 ビジネスドメインに代わってメッセージが送信されるたびに、Eximはデータベースに秘密キーを要求します。 キーがない場合、デフォルトのキーが署名に使用されます。



データベースとの通信には、標準のカプロンコンポーネントが使用されます。これについては、 別の記事で既に説明しました。



DKIMを構成するにはどうすればよいですか?

既にMail.Ru for Businessを使用している場合、独自のDKIM署名の設定は非常に簡単です。







  1. ドメイン管理者のボックスの許可を得て、biz.mail.ruにアクセスします。
  2. DKIM署名を構成する接続ドメインを選択します。
  3. [サーバーステータス]セクションに移動し、MXレコードが正しく構成されていることを確認します。 そこで、MXレコードを正常にチェックした後、TXTレコードの値が表示されます。これは、DNSエディターで設定する必要があります。
  4. TXTレコードの値をコピーし、ドメインのDNSエディターで設定します。
  5. 情報がすべてのDNSサーバーに分散されるように、レコードが設定されてから数時間待ちます。
  6. レコードが正しく設定され、すべてのチェックに合格した場合、セットアップが成功したことを示すメールを送信し、正しいDKIM署名ですべてのレターに署名し始めます。


DKIM署名の設定と使用に関する質問がまだある場合は、コメントのままにしてください。



All Articles