LoginSignup
0
3

FreeBSD 標準の sendmail で DKIM を送信のみで実装してみる

Posted at

目的

OS 標準の sendmail を用いて mail/opendkim の設定して gmail とか msn.co.jp 宛てのメールで弾かれないようにする。
注:この📝を忠実に再現出来ても 100% メールが到達する保証は出来ませんし、SMTP の動きを理解して入れば、その事ぐらい常識的に知っている人向けの設定📝です。

動作確認環境は FreeBSD 12.4-RELEASE amd64 に IPv6 固定アドレスで確認していますので、IPv4 では漏れがあるかもしれません。

ホスト名の正引きは既に出来ているものとして進めます。
出来てない人は DNS の設定が出来る環境を用意すること。

OS と ports skeleton は最新の状態にしてから作業が好ましい。

参考作業
# freebsd-update fetch install
# fetch -o- https://download.freebsd.org/ports/ports/ports.tar.xz | bsdtar xf - -C/usr && cd /usr/ports && make fetchindex

初期設定

  • mail/opendkim のインスコ
# cd /usr/ports/mail/opendkim && make install && make clean

opendkim で使う鍵を生成するが、その際にセレクタの指定が必要で、config ファイルに記述するものと同一にする必要がある。
文字数の制限は深く dig って無いが一般常識的に 64 字程度の半角英数文字が好ましい。
UTF-8 とか EUC-JP は問答無用でアウト!

  • 鍵の置き場を作る
# mkdir /usr/local/etc/mail/dkim && cd /usr/local/etc/mail/dkim
  • 鍵の作成
# opendkim-genkey --domain=`hostname -d` --selector=`cat /etc/hostid`
  • opendkim.conf の編集
    先ほど鍵を作った時にセレクタの文字列に用いた文字列を書き入れ、
    milter の橋渡し場所を変更と、作成するパイプの Umask をよりセキュアな場所に変更する。
# cd /usr/local/etc/mail/
# echo Selector\ `cat /etc/hostid` >> opendkim.conf
# echo Domain\ `hostname` >> opendkim.conf
# echo KeyFile\ /usr/local/etc/mail/dkim/`cat /etc/hostid`.private >> opendkim.conf
# echo Socket\ local:/var/run/milteropendkim/opendkim.pipe >> opendkim.conf
# echo UMask\ 002 >> opendkim.conf

パイプの作成場所の元ディレクトリに所有者とグループを標準のアカウントに変更する。
必要であれば、独自のアカウントを作り指定しても構わない。

# chown mailnull:mailnull /var/run/milteropendkim
  • daemon の起動
# sysrc milteropendkim_enable=1
# service milter-opendkim start
  • sendmail の dhparam ファイルの生成
# openssl dhparam 3072 -out /etc/mail/certs/dh.param
  • opendkim を通す cf ファイルを生成と daemon の再起動
# cd /etc/mail
# make
# echo INPUT_MAIL_FILTER\(\`dkim-filter\',\ \`S=local:/var/run/milteropendkim/opendkim.pipe, F=T, T=R:2m\'\) >> `hostname`.mc
# make && make install && service sendmail restart

これで送信する側の設定は終わりです。
続いて DNS の登録をします。

先ほど「鍵の作成」項で出来上がった `cat /etc/hostid`.txt の txt rr を追加するダケです。

注意点

opendkim.conf 内に UserID 項があるが、FreeBSD の ports や package でインスコすると、起動時のオプションで強制的に上書きされるので、ここで指定しても意味を持ちません。
標準では uid と gid が mailnull になっていますので、特に不具合は出ないと思います。
変更は /etc/rc.conf[.local] の環境変数に指定します。

# sysrc milteropendkim_uid=nobody
# sysrc milteropendkim_gid=nogroup

DNS へ鍵の登録に際し、文字数が環境によっては途中でちょん切られてしまう残念な DNS 鯖が存在するので、その際には適宜改行するなりして rr の登録を行ってください。

動作確認

DKIM Test
この web ページを用いて確認が出来ます。
また、送信したメールのヘッダを、別の web ページに張り付けて確認も可能です。
Email Header Analyzer
ただし IPv6 オンリーでメール鯖を構築していると当該サービスは IPv6 を理解してくれていないようです。

終わりに

まだまだ IPv6 でお喋りしてくれるサーバが少なく、個人的には未だ対応してないのかと、がっかりするサービスが多い執筆段階の現状です。
国内では IP 網の整備も随分と進んでいる筈なのですが、肖れるのは google,facebook 関連のサイトぐらいでしょうか。
国家プロジェクトで整備しているのに、筆者の普段使いしているサービスはほとんど海外。
その海外の IPv6 整備はまだまだ遠い道のりだったりするようです。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3