web-dev-qa-db-ja.com

Ubuntu、Postfix、Mailman用のDKIM(DomainKeys)のセットアップ

PostfixとMailmanを使用してUbuntu 12.04を実行しています。 DKIM をセットアップします。 DomainKeys Identified Mail、またはDKIMは、Yahooの「DomainKeys」の後継です。シスコの識別メールが組み込まれています。

これを設定する手順は何ですか?

Opendkimはお勧めですか?

私が持っている唯一の参照は HowToForge ですが、私はここで助けを得ることを好みます(それがそのリンクでの手順の単なる確認であっても)。実際、HowToForgeの情報は、opendkimではなくdkim-filterに言及しているため古くなっていると思います。

22
MountainX

ubuntu Server 12.04LTS上のopenDKIMおよびPostfix

私は戻ってこれをより良くフォーマットしようとします。しかし、回答を投稿するリクエストがあったので、適切にフォーマットする時間があるまで待つのではなく、今すぐ投稿したかったのです。時間がないため、回答全体をブロック引用で囲みました。このソリューションが役立つことを願っています。

これらは私の参考です:

および Wikipedia は、このテーマに関する適切なエントリを持っています

最低限必要なもの:

  • メールサーバーへのルートアクセス
  • ドメインのDNSレコードを更新するためのアクセス

リポジトリからopendkimをインストールします。

# Sudo apt-get install opendkim opendkim-tools

使用する「セレクタ」を決定する必要があります。セレクターは基本的に、使用するキーを記述するWordです。ここでは、キーが2012年5月に有効になったときにセレクタ201205を使用します(ずるいですか?)。多様性の例を2つ挙げますが、明快さが増すことを願っています。 1つのキーを生成するだけです。ただし、比較できるように両方の例を示しています。

  • 201205(1番目のキー)
  • my_selector(2番目のキー)

ドメインはexample.comになりますが、2番目の例ではサブドメインを使用します。

  • example.com(1番目のキー)
  • mail.example.com(2番目のキー)

私は次のディレクトリで働くことにしました:

# mkdir /etc/opendkim/
# cd /etc/opendkim

選択したセレクタとドメインを使用して、現在のディレクトリにキーを生成します。

# opendkim-genkey -s 201205 -d example.com

所有権を変更する必要がある場合としない場合があります。所有権とアクセス許可については、以下の2番目のキーの例で詳細をご覧ください。

最初に、opendkimユーザーが存在するかどうかを確認する必要があります(ユーザー/グループIDは異なる場合があります)。

# grep opendkim /etc/passwd
opendkim:x:108:117::/var/run/opendkim:/bin/false

そしておそらくあなたはこれをする必要があります:

# chmod 700 /var/run/opendkim

注:これらの次の2つのコマンドは、Ubuntu 12.04では必要ありません。ただし、上記のコマンドでユーザーopendkimが適切に設定されていなかった場合は、次のように実行してください。

# useradd -r -g opendkim -G mail -s /sbin/nologin -d /var/run/opendkim -c "OpenDKIM" opendkim
# chown opendkim:opendkim 201205.private   
# cat 201205.private 
-----BEGIN RSA PRIVATE KEY-----
ABCCXQ...[long string]...SdQaZw9
-----END RSA PRIVATE KEY-----

ここで公開鍵を確認し、バグがあることに注意してください(Ubuntu 12.04のopenDKIM 2.5.2にあります)!が含まれている場合、;=rsa;;k=rsa;が含まれている必要があります。 kがありません。挿入してください。

# cat 201205.txt
201205._domainkey IN TXT "v=DKIM1;=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com

修正後、次のようになります。

201205._domainkey IN TXT "v=DKIM1;k=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com

さらに、おそらくこのようなセミコロンをエスケープする必要があります。最後のコメントが必要ない場合は、削除してください。また、t = yフラグを追加して、DKIMをテストしているがまだアクティブに使用していないことを受信側サーバーに示す必要があることに注意してください。実行可能なリソースレコードが残っています。

201205._domainkey IN TXT "v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"

上記の公開キーのコンテンツを権限のあるDNSサーバーに公開する必要があります。 TXTレコードを使用することをお勧めします。 SPFレコードを使用するか、両方のタイプを使用するかについては、少し議論の余地があるようです。少し読んだ後、TXTレコードタイプのみを使用することにしましたが、これがこのトピックの最後の言葉だとは思いません。

短いTTL(存続時間)を使用して、DNSを介してキーが伝搬されるのを年齢を待たずにキーを変更できるようにする必要があります。 180秒使用しました。

キーペアを生成する2番目の例は、私にとって少し面倒でした。私がしたことを説明します。最初の要素は、キーが「mail.example.com」に使用される場合でも、ドメイン値「example.com」を使用したことです。私は試行錯誤でこれに到達しました。動作しますが、「mail.example.com」の使用は動作しませんでした。残念ながら、私はこの背後にある理由を知りません。これは実際に私が遭遇した唯一の違いですが、サブドメインを使用した経験を文書化する必要があると感じたのは十分に厄介でした。私が見つけた他の最初のレベルのチュートリアルはこれをしませんでした。 2番目のキーを生成します。

opendkim-genkey -s my_selector -d example.com

上記のように、秘密鍵の所有権と許可を確認してください。これらは次のようになります。

# ls -la /etc/opendkim
-rw-------  1 opendkim opendkim  891 May 10 07:44 my_selector.private

DNSレコードを公開したら、Digで確認します。リソースレコード(RR)に入力した内容を正確に返す必要があります。

$ Dig 201205._domainkey.example.com txt +short
"v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"

次に、キーをテストします。以下のコマンドは、キーが存在するディレクトリ(私にとっては/ etc/opendkim)にいると仮定しています。

# opendkim-testkey -d example.com -s 201205 -k 201205.private -vvv
opendkim-testkey: key loaded from /etc/opendkim/201205.private
opendkim-testkey: checking key '201205._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK

これらの結果は期待されています。 「キーが安全ではありません」はエラーを示していません。 DNSSSECを使用しない場合に予想される結果です。 DNSSECは近づいていますが、私の読書によると、まだプライムタイムの準備ができていません。

2番目のキーを持つ例:

# opendkim-testkey -d example.com -s my_selector -k /etc/opendkim/my_selector.private -vvvv
opendkim-testkey: key loaded from /etc/opendkim/my_selector.private
opendkim-testkey: checking key 'my_selector._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK

Opendkimはキーが安全でないことを報告していることに注意してください。これは、DNSSECがDNSサーバーに実装されておらず、理論的にはだれかがDNSルックアップをインターセプトして独自のキーに置き換えることができるという事実に関連しています。

OpenDKIM構成ファイルを編集します。

# nano /etc/opendkim.conf
# cat /etc/opendkim.conf
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
#
Domain                  example.com
KeyFile                 /etc/opendkim/201205.private
Selector                201205
#
# Commonly-used options
Canonicalization        relaxed/simple
Mode                    sv
SubDomains              yes
# Log to syslog
Syslog                  yes
LogWhy                  yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask                   022
UserID                  opendkim:opendkim
#
KeyTable                /etc/opendkim/KeyTable
SigningTable            /etc/opendkim/SigningTable
ExternalIgnoreList      /etc/opendkim/TrustedHosts
InternalHosts           /etc/opendkim/TrustedHosts
#
Socket                  inet:8891@localhost
#EOF

ターゲットドメイン「mail.example.com」で2番目の重要な例を使用している場合、エントリは依然としてメインドメインのみを参照します。

Domain                  example.com
KeyFile                 /etc/dkim/my_selector.private
Selector                my_selector 
-----

私のソースのいずれかからのメモ:Postfixの複数のインスタンスを実行する場合、各インスタンス(またはopendkimを使用するインスタンス)のopendkim.confにこれを追加する必要があります

テキストエディター/etc/opendkim/TrustedHostsでファイルを作成します。

OpenDKIMで処理するドメイン、ホスト名、IPを追加します。 localhostを忘れないでください。

127.0.0.1
localhost
example.com
mail.example.com
192.168.1.100 #(IP address of your server, if applicable)

(上記の最後の行はおそらく必要ありません。追加するIPアドレスがある場合は、上記の例ではなく、必ず独自のものを使用してください。)

編集/etc/default/opendkim

この行のコメントを解除して、ポート8891を使用します。

SOCKET="inet:8891@localhost" # listen on loopback on port

ファイアウォール(iptables)がローカルホストでループバックを許可していることを確認してください。

Sudo iptables -A INPUT -i lo -j ACCEPT

次に、テキストエディター/etc/opendkim/KeyTableでファイルを作成し、KeyTableにドメインを追加します

行を追加:

#EXAMPLE showing my 2nd key:
my_selector._domainkey.example.com example.com:my_selector:/etc/opendkim/my_selector.private

次に、テキストエディター/etc/opendkim/SigningTableでファイルを作成し、SigningTableにドメインを追加します

両方の例を示します。 2番目のキーには、完全なドメイン名「mail.example.com」を使用する必要があることに注意してください。

example.com 201205._domainkey.example.com
mail.example.com my_selector._domainkey.example.com

OpenDKIM 2.0.1では、ドメイン名は大文字と小文字が区別されることに注意してください。この例では、OpenDKIMの新しいバージョンを使用していますが、これは問題ではないようです。

後置記号を構成します。 /etc/postfix/main.cfを編集し、行を最後に追加します

milter_default_action = accept
milter_protocol = 2
smtpd_milters=inet:localhost:8891
non_smtpd_milters=inet:localhost:8891

ホスト名も変更します。

#myhostname = localhost         #original
myhostname = mail.example.com

/ etc/hostsの対応するエントリも変更する必要があります。これらの変更は、再起動後に有効になります(ただし、コマンドhostname NEW_NAMEですぐに設定できます)。

再起動しなかった場合、postfixとopendkimを再起動します。

# service opendkim restart
Restarting OpenDKIM: opendkim.
# service postfix restart
 * Stopping Postfix Mail Transport Agent postfix   [ OK ]
 * Starting Postfix Mail Transport Agent postfix   [ OK ] 

テスト中

署名済みメールが認証されていること、およびDNSレコードが適切に設定されていることを確認する最良の方法は、無料のテストサービスのいずれかを使用することです。私はこれらを使用しました:

  • Brandon Checketts Email Validator- http://www.brandonchecketts.com/emailtest.php (私のお気に入り)
  • 署名済みメールを[email protected]に送信します(私のお気に入りも)
  • 署名済みメールを[email protected]に送信します(テストするすべての送信メッセージの[宛先:]フィールドにすべてのテストメールアドレスを入力できます)

  • 署名済みメールを[email protected]に送信<--- BROKEN !!!これは使用しないでください。

これらはそれぞれ、物事が適切に機能しているかどうかを示し、必要に応じてトラブルシューティングの指針を示します。

Gmailアカウントをお持ちの場合は、署名されたメッセージをそこに送信して、すばやく簡単にテストすることもできます。

すべてがうまくいったことを確認したら、DNS TXTレコードのテストフラグを削除して、TTLを増やすことができます。

できた!

38
MountainX

これ は良いガイドです。

Opendkimisが実際に推奨され、dkim署名を実装する手順はdkim-filterの場合と同じであることが説明されています。

dkim-milterは開発されていません。元の作者はソースを分岐し、現在opendkimを開発しています。 Lucid以降のリリースでは、opendkimがdkim-filterよりも優先されます。このページの手順は同じである必要があります(必要に応じてパッケージ名を調整します)。

BTW Domainkeysは、DKIMの非推奨の前身です。 SPFおよびDKIMのTXTレコードをDNSゾーンに追加しますが、ドメインキーを気にする必要はなくなりました。

0
iainH