Ubuntu Server 12.04LTS上のopenDKIMおよびPostfix
私は戻ってこれをより良くフォーマットしようとします。しかし、回答を投稿するリクエストがあったので、適切にフォーマットする時間があるまで待つのではなく、今すぐ投稿したかったのです。時間がないため、回答全体をブロック引用で囲みました。このソリューションが役立つことを願っています。
これらは私の参考です:
そして、ウィキペディアには、件名に優れたエントリを持っています
最低限必要なもの:
- メールサーバーへのルートアクセス
- ドメインのDNSレコードを更新するためのアクセス
リポジトリからopendkimをインストールします。
# sudo apt-get install opendkim opendkim-tools
使用する「セレクタ」を決定する必要があります。セレクターは基本的に、使用するキーを説明するための単語です。ここでは、キーが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レコードタイプのみを使用することにしましたが、これがこのトピックの最後の言葉だとは思いません。
DNSを介して伝播するのに年齢を待たずにキーを変更できるように、短いTTL(存続時間)を使用する必要があります。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レコードが適切に設定されていることを確認する最良の方法は、無料のテストサービスのいずれかを使用することです。私はこれらを使用しました:
これらはそれぞれ、物事が適切に機能しているかどうかを示し、必要に応じてトラブルシューティングの指針を示します。
Gmailアカウントをお持ちの場合は、署名されたメッセージをそこに送信して、すばやく簡単にテストすることもできます。
すべてがうまくいったことを確認したら、DNS TXTレコードのテストフラグを削除して、TTLを増やすことができます。
できた!