PostfixとMailmanを使用してUbuntu 12.04を実行しています。 DKIM をセットアップします。 DomainKeys Identified Mail、またはDKIMは、Yahooの「DomainKeys」の後継です。シスコの識別メールが組み込まれています。
これを設定する手順は何ですか?
Opendkimはお勧めですか?
私が持っている唯一の参照は HowToForge ですが、私はここで助けを得ることを好みます(それがそのリンクでの手順の単なる確認であっても)。実際、HowToForgeの情報は、opendkimではなくdkim-filterに言及しているため古くなっていると思います。
私は戻ってこれをより良くフォーマットしようとします。しかし、回答を投稿するリクエストがあったので、適切にフォーマットする時間があるまで待つのではなく、今すぐ投稿したかったのです。時間がないため、回答全体をブロック引用で囲みました。このソリューションが役立つことを願っています。
これらは私の参考です:
man opendkim-testkey
man opendkim.conf
および Wikipedia は、このテーマに関する適切なエントリを持っています
最低限必要なもの:
リポジトリからopendkimをインストールします。
# Sudo apt-get install opendkim opendkim-tools
使用する「セレクタ」を決定する必要があります。セレクターは基本的に、使用するキーを記述するWordです。ここでは、キーが2012年5月に有効になったときにセレクタ201205を使用します(ずるいですか?)。多様性の例を2つ挙げますが、明快さが増すことを願っています。 1つのキーを生成するだけです。ただし、比較できるように両方の例を示しています。
ドメインは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レコードが適切に設定されていることを確認する最良の方法は、無料のテストサービスのいずれかを使用することです。私はこれらを使用しました:
署名済みメールを[email protected]に送信します(テストするすべての送信メッセージの[宛先:]フィールドにすべてのテストメールアドレスを入力できます)
署名済みメールを[email protected]に送信<--- BROKEN !!!これは使用しないでください。
これらはそれぞれ、物事が適切に機能しているかどうかを示し、必要に応じてトラブルシューティングの指針を示します。
Gmailアカウントをお持ちの場合は、署名されたメッセージをそこに送信して、すばやく簡単にテストすることもできます。
すべてがうまくいったことを確認したら、DNS TXTレコードのテストフラグを削除して、TTLを増やすことができます。
できた!
これ は良いガイドです。
Opendkimisが実際に推奨され、dkim署名を実装する手順はdkim-filterの場合と同じであることが説明されています。
dkim-milterは開発されていません。元の作者はソースを分岐し、現在opendkimを開発しています。 Lucid以降のリリースでは、opendkimがdkim-filterよりも優先されます。このページの手順は同じである必要があります(必要に応じてパッケージ名を調整します)。
BTW Domainkeysは、DKIMの非推奨の前身です。 SPFおよびDKIMのTXTレコードをDNSゾーンに追加しますが、ドメインキーを気にする必要はなくなりました。