前回までに ISP の正規のメールサーバ経由でメールを送れるようにしてみました。今回は DKIM によるメッセージへの署名をさせてみます。署名後にリレーサーバを経由させたことはなかったのですが、普通に動くようです。でも考えてみたらリレーサーバ経由でも大丈夫なはずです。未だにあるかどうかはわかりませんが、UUCP でつながっているサイトは必ずリレーサーバに相当するサイトが絡んでいますので。
opendkim socket
opendkim は Sendmail Inc. でメンテナンスされているソフトウェアなので、sendmail と opendkim の相性はよいはずです。ですので、opendkim を使用してメッセージに署名を付けてみたいと思います。まずソフトウェアをコンパイルします。
このようなメッセージが表示されます。後で使用しますのでメモしておきます。
opendkim の設定ファイルは /usr/local/etc/mail に置かれます。サンプルファイルからコメント行と空白行以外を表示してみます。基本この5行で動くようです 🙂 最後の行は syslog 関係なので、実質4行のようです。
まず、ドメイン名を自分のメールドメインの jf3vqb.net にします。
セレクタは DNS の設定で必要となりますので、これも jf3vqb としておきます。
秘密鍵ファイル名もドメイン名にマッチさせ、ファイルを保存します。
次に秘密鍵を格納するフォルダを opendkim.conf に書いたとおりに作ります。sendmail は mailnull ユーザ、mailnull グループで動いていますので、このユーザのみが読み書きできるようにパーミッションを変えておきます。opendkim-genkey コマンドで秘密鍵/公開鍵のペアを作成します。そして、秘密鍵は今作成したディレクトリへ移動させます。
これでサーバ側の準備は OK のはずなので、opendkim を起動してみます。怒られました 🙁
ソケットのスペックがおかしいようなので修正します。8891 が opendkim のデフォルトポートのようなので、デフォルトを使用します。さて、動くでしょうか?
opendkim milter
よさげですので、次は milter インターフェースを使用して sendmail が opendkim を使えるようにします。
opendkim をインストールしたときに表示されたメッセージを思い出してください。その通りに指定し、sendmail.cf ファイルを作り直します。
opendkim access control
pokemon さんの freebsd.mc でソースアドレスをホスト名からドメイン名に変更してから test@gmail.com 宛にテストメールを送ってみましたところ、お前なんか知らんと怒られました。
ということで仲間であると教えてあげることにします。opendkim の設定ファイルを編集します。
InternalHosts オプションをからコメントを外し、ファイル名を指定します。そして、指定したファイルを作成します。
とりあえず家庭内ネットワークのサブネットを指定しておきます。
opendkim を再起動します。
また怒られました。IPv6 を考慮していませんでしたので、メールを送る可能性のある FreeBSD のホスト名をリストしておきます。これらのマシンから外部へメールを送ることは基本無いはずです。あるとすると、Windows PC 等から dhcp さん経由でメールを送る場合だけと思われます。でも、そうすると実験ができなくなるので、とりあえず FreeBSD 全てをリストアップしておきます。
pokemon さんから test@gmail.com にメールを送りました。dhcp さんのログに署名を付けたとメッセージが残っています。うまくいったようです。
こちらが gmail.com の DKIM に関するヘッダの切り抜きです。DKIM のチェックは temperror となっています。DNS から公開鍵の情報が得られなかったと書かれています。が、署名自身は OK のようです。
同じことを dhcp さんから行うと DKIM にメッセージがパスされません。と言うか、署名のトリガが user@jf3vqb.net からメールが届いたときなので、メールアドレスがローカルメールデフォルトの user のみだと署名してくれません。submit.cf ファイルを変更するのは好きではないのですが、ドメイン名を付けてみます。
ムッ 🙁 ローカルホストも仲間ではないようです 🙁
仲間にします。
_domainkey
これで署名付きメッセージが dhcp さんからも送れるようになりました。ステータスは同様に temperror です。DNS で正当性確認の判断材料を提供してやります。
opendkim-genkey を実行したらファイルが2つでき、うち1つを /var/db/dkim へ移動しました。そのファイルには秘密鍵が入っています。残ったファイルには DNS に登録する公開鍵が入っています。その通りに DNS にTXT レコードを追加します。
家庭内 DNS にはまだデータがありません。
response-policy で作成したファイルに TXT レコードを追加します。
内部の DNS で見れるようになりました。
外の正規の DNS にはまだ登録していませんので、登録します。中の DNS は vi エディタを使用しましたが、正規の DNS では専用のインターフェースがあると思います。たぶん WEB インターフェース?
登録してみました。google dns でも同じデータが見て取れます。
すべて完了後最終テストのメールを送ってみました。こちらが gmail.com で見えるヘッダ情報です。DKIM のチェックは pass になりました。STARTTLS の verify は FAIL しかありえません。OK にしたければ正規の証明書をご購入ください 🙂 メッセージの暗号化を行うという目的にはナンチャッテ証明書でも使用できますので、目的は達成できたと考えます。
私の会社の事業部は元々4つの別々の事業部であったのですが、何年か前に統合を行い、社内で一番大きな事業部となりました。元々4つの事業部であったことからメールのドメインも元の4つに加えて統合した新しいドメインの合計5つのメールドメインをハンドリングする DKIM サービスで、DKIM 関連のファイルの内容も単一ドメインとは趣が異なりマニュアルを読み直して、最小の変更で動かすようにするのに少々手間取りましたが認証をパスするところまで来ましたので書いてみました。次回はウイルスチェックについて書ければと思います。
以下広告
コメント