web-dev-qa-db-ja.com

DKIMは任意のドメインからの送信メールに署名します(PostfixおよびUbuntuを使用)

メールサーバー(postfixとubuntu)でDKIMを設定したので、送信メールに署名します。次の手順を使用しました: https://help.ubuntu.com/community/Postfix/DKIM

ただし、自分のドメインだけでなく、(Fromアドレスの)任意のドメインからのメールに署名する必要があります。メールニュースレターサービスを構築しています。クライアントはサーバー経由で独自のメールを送信します。

まず、/ etc/dkim-filter.confに「ドメイン*」を設定します。これにより、ドメインに関係なく、すべての送信メールにDKIMヘッダーが含まれるようになりました。

ただし、Gmailでは、ドメイン(およびDNSレコード)ではなく、送信元アドレスのドメインをチェックしているため、検証チェックは失敗します。誰でもこれを行う方法を知っていますか?

40
Brian Armstrong

OK、自分でこれを理解することができましたが、これについてのドキュメントが見つからなかったので(見つけることができました)、実際に推測して確認したため、後の手順をここに投稿しました。

上記のように「ドメイン*」を設定すると、次のように署名されます。

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=clientdomain.com;
    s=main; t=1250005729;
    bh=twleuNpYDuUTZQ/ur9Y2wxCprI0RpF4+LlFYMG81xwE=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=kohI7XnLlw/uG4XMJoloc4m9zC13g48+Av5w5z7CVE0u3NxsfEqwfDriapn7s7Upi
     31F3k8PDT+eF57gOu2riXaOi53bH3Fn/+j0xCgJf8QpRVfk397w4nUWP/y8tz4jfRx
     GhH21iYo05umP0XflHNglpyEX02bssscu2VzXwMc=

「d = clientdomain.com」に注目してください。これは、電子メールの送信元アドレスに基づいてこれを生成していました。送信元アドレスは「[email protected]」のようなものでした。明らかに、クライアントのドメインをチェックし、DNSをマイニングしなかった場合、TXTレコードが存在し、検証は失敗します。

とにかく、このドキュメントでKeyListパラメータを設定できることがわかりました。 http://manpages.ubuntu.com/manpages/hardy/man5/dkim-filter.conf.5.html

それは私が何をしたいのか本当に説明していませんでしたが、私はそれで遊んでみようと思いました。 KeyFileをコメントアウトし、KeyListを "/etc/mail/dkim_domains.key"に設定しました。これは、作成した任意のファイル名です。次に、そのファイルを作成して、「*:feedmailpro.com:/etc/mail/dkim.key」に入れました。これは、任意のクライアントドメインに対してそれを伝え、私のドメイン(feedmailpro.com)で署名し、dkim.keyファイルを使用します。

DKIMとpostfixを再起動しました

Sudo /etc/init.d/dkim-filter restart
Sudo /etc/init.d/postfix restart

これが、テストメールを送信したときに生成されたキーです。

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=feedmailpro.com;
    s=dkim.key; t=1250005729;
    bh=twleuNpYDuUTZQ/ur9Y2wxCprI0RpF4+LlFYMG81xwE=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=kohI7XnLlw/uG4XMJoloc4m9zC13g48+Av5w5z7CVE0u3NxsfEqwfDriapn7s7Upi
     31F3k8PDT+eF57gOu2riXaOi53bH3Fn/+j0xCgJf8QpRVfk397w4nUWP/y8tz4jfRx
     GhH21iYo05umP0XflHNglpyEX02bssscu2VzXwMc=

改善、d =が私のドメインに設定されていることがわかります(電子メールの送信元アドレスが私のドメインではない場合でも)。ただし、s =は、dkim-filter.confで選択したセレクターではなく、「dkim.key」に変更されました。元の セットアップ手順 では、セレクターを「メール」に設定しました。奇妙なことですが、キーのファイル名dkim.keyに変更されていることに気付きました。

そこで、「/ etc/mail/dkim.key」の名前を「/ etc/mail/mail」に変更しました。 「/etc/mail/dkim_domains.key」の参照も更新しました。

上記と同じようにdkim-filterとpostfixを再起動すると、動作し始めます。これは、正しいセレクタを使用して正しく署名された最終的なヘッダーです(明らかに、キーのファイル名に基づいています)。

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=feedmailpro.com;
    s=mail; t=1250006218;
    bh=tBguOuDhBDlhv0m4KF66LG10V/8ijLcAKZ4JbjpLXFM=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=c9eqvd+CY86BJDUItWVVRvI3nibfEDORZbye+sD1PVltrcSBOiLZAxF3Y/4mP6vRX
     MUUNCC004oIH1u7FYafgF32lpuioMP1cd7bi6x3AZ5zH4BYETNBnnz4AhAPBtqlIh/
     FFMz8jkhhLhcM2hDpwJkuKjAe3LzfNVDP8kD11ZI=

これでs = mailが正しくなり、d = feedmailpro.comが正しくなりました。できます!

全体的にこれは私が予想したよりもはるかに困難であり、これを行う方法(すべての送信ドメインに署名する)に関するドキュメントはないようですが、私はそれがオープンソースソフトウェアであるため、文句を言うことはできません。

最後に、TXT DNSレコードが正しく設定されているかどうかを確認するには、ドメインのようなコマンドを実行します

Dig mail._domainkey.feedmailpro.com TXT

Digをインストールする必要がある場合があります(Sudo apt-get install Dig)。 Slicehostマネージャーを使用してDNSエントリを追加する場合は、TXTレコードを次のように入力します。

Type: TXT
Name: mail._domainkey
Data: k=rsa; t=s; p=M5GfMA0...YOUR LONG KEY...fIDAQAB
TTL seconds: 86400

名前の最後にピリオドがないか、「mail._domainkey.feedmailpro.com」のようにドメインがないのに、名前が「mail._domainkey」に設定されている理由がよくわかりません。でも、なんとか動いてるみたいなので嬉しいです。

これを複製しようとしている場合、私が始めた手順は次のとおりです: https://help.ubuntu.com/community/Postfix/DKIM

41
Brian Armstrong

ブライアンアームストロングのdkim-filterに対する回答に触発されて、これがOpenDKIMに対してどのように実行されたかです。

/ etc/opendkim.conf

Syslog          yes
UMask           002
KeyTable        /etc/mail/dkim_key_table
SigningTable    refile:/etc/mail/dkim_signing_table

SigningTableの定義にrefile:があることに注意してください。これは、ファイルに正規表現が含まれることを指定します。この場合、*ワイルドカードです。

/ etc/mail/dkim_key_table

keyname  example.com:selector:/etc/mail/selector.key

ここではkeynameを使用して、このファイルとdkim_signing_tableファイルの間のキーを照合します。実際のファイルでは、これをセレクターと同じ名前にしました。

example.comおよびselectorは、署名のd =およびs =それぞれ。

/ etc/mail/dkim_signing_table

*   keyname

このファイルは、単純にFrom:ヘッダーにあるアドレスをdkim_key_tableのキーにマップします。この場合、このサーバーを介して送信されるすべての電子メールに同じキーで署名する必要があるため、*ワイルドカードが使用されます。

15
Adam J. Forster

古いスレッドですが、これを見つけた他の誰かが、opendkimの2.xバージョンがKeyListではなくKeyTableで動作することを知るのに使用できます。

Opendkim-convert-keylistツールを使用してKeyListファイルを変換できます( http://manpages.ubuntu.com/manpages/lucid/man8/opendkim-convert-keylist.8.html

KeyTableの実装の詳細については、opendkimのマニュアルページをご覧ください。( http://www.opendkim.org/opendkim.conf.5.html

3
user203421

名前がピリオドなしで「mail._domainkey」に設定されている理由が本当にわかりません

DKIMフィルターのドキュメントは通常、UNIXのman形式でインストールされます。グーグルだけがそれを知っています:-)私にも問題がありました。

man dkim-filter.conf
man dkim-filter
man dkim-genkey

man dkim-stats
man dkim-testkey
man dkim-testssp

Debianで試してみました。実際に配布されていない場合は、ソースのtarballをダウンロードして簡単に読むことができます。

man dkim-milter-2.8.3/dkim-filter/dkim-filter.conf.5

等.

-

名前がピリオドなしで「mail._domainkey」に設定されている理由が本当にわかりません

したがって、異なるドメインの両方のDNSレコードでまったく同じものを使用できます。

2
hynekcer