対象
FreeBSD で cui が満足に操作出来ている事
クラウドメールサーヴィスへメールを投げる際に、無条件で迷惑メールに入ってしまう鯖を抱えちょる人
dkim の設定がカオスと感じる貴方w
目的
13.x-RELEASE 迄は OS 標準であった sendmail(8) を用いて mail/opendkim の設定して gmail.com とか hotmail.co.jp 宛てのメールで弾かれないようにする。
注意点
この📝を忠実に設定出来たとしても 100% メールが到達する保証は出来ませんし、SMTP の動きを理解して入れば、その事ぐらい常識的に知っている人向けの設定📝です。
動作確認環境は FreeBSD 14.1-RELEASE i386 に IPv6 固定アドレスで確認していますので、IPv4 では漏れがあるかもしれません。
ホスト名の正引きは既に出来ているものとして進めます。
出来てない人は DNS の設定が出来る環境を用意しましょうね😊
tcp:25 のポートが塞がれていない事←OP25Bで大抵のプロバイダは遮蔽されちょる。
OS と ports skeleton は最新の状態にしてから作業が好ましい。
全ての操作は wheel グループの権限のユーザで作業する事←っま、sudo(8) や doas(8) 使っても大丈夫じゃよ✌
freebsd-update fetch install
fetch -o- https://download.freebsd.org/ports/ports/ports.tar.xz | bsdtar xf - -C/usr && cd /usr/ports && make fetchindex
初期設定
- 14.0-RELEASE から標準となった dma(8) から古来🤣からの sendmail(8) へ変更
cd /etc/mail
mv mailer.conf mailer.conf.old
ln -s /usr/share/examples/sendmail/mailer.conf
sysrc sendmail_enable="NO"
service sendmail start
- mail/opendkim のインスコ
cd /usr/ports/mail/opendkim && make install && make clean
pkg install opendkim
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
パイプの作成場所の元ディレクトリに所有者とグループを標準のアカウントに変更する。
必要であれば、独自のアカウントを作り指定しても構わない。
mkdir /var/run/milteropendkim && chown mailnull:mailnull /var/run/milteropendkim
- daemon の起動許可及び起動
service milter-opendkim enable
service milter-opendkim start
- 起動確認
tail /var/log/maillog
を実行して以下のログが出ていなければ、再度最初から確認してみんさい。
*日付* *ホスト名(短縮)* opendkim[PID]: OpenDKIM Filter v2.10.3 starting (args: -l -u mailnull -P /var/run/milteropendkim/pid -x /usr/local/etc/mail/opendkim.conf)
*日付* *ホスト名(短縮)* opendkim[PID]: socket cleanup failed: Permission denied
注:
日付の書式 env LANG=C env TZ=JST-09 date "+%b %d %H:%M:%S"
ホスト名(短縮)の書式 hostname -s
PID cat /var/run/milteropendkim/pid
-
sendmail の dhparam ファイルの生成→14.0-RELEASE 以降不要になりましたが必要で有れば生成しんちゃい
mkdir /etc/mail/certs && openssl dhparam -out /etc/mail/certs/dh.param 3072
- 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 を追加するダケです。
DNS の設定に関しては bind や NSD 等多岐に渡るけん、詳細設定の記述は省きますm(__)m
注意点
opendkim.conf 内に UserID 項があるが、FreeBSD の ports や package でインスコすると、起動時のオプションで強制的に上書きされるので、ここで指定しても意味を持ちません。
標準では uid と gid が mailnull になっていますので、特に不具合は出ないと思います。
変更は /etc/rc.conf[.local]
の環境変数に指定します。
sysrc milteropendkim_uid=nobody
sysrc milteropendkim_gid=nogroup
DNS へ鍵の登録に際し、文字数が環境によっては途中でちょん切られてしまう残念な DNS 鯖が存在するので、その際には適宜改行するなりして rr の登録を行ってください。
動作確認(webページの紹介)
-
DKIM Test
この web ページを用いて確認が出来ます。
また、送信したメールのヘッダを、別の web ページに張り付けて確認も可能です。 -
Email Header Analyzer
ただし IPv6 オンリーでメール鯖を構築していると当該サービスは IPv6 を理解してくれていないようです。 -
Learn and Test DMARC
サイトを訪問しおると、メアドが表示されちゃるけん、そのメアド向けて空メールを送信しおると、header 解析から合否通知まで一気に調査しおる優れたサイト。筆者イチオシ✌
終わりに
まだまだ IPv6 でお喋りしてくれるサーバが少なく、個人的には未だ対応してないのかと、がっかりするサービスが多い執筆段階の現状です。
国内では IP 網の整備も随分と進んでいる筈なのですが、肖れるのは IPv6 に対応しおるプロバイダが開設しおる玄関サイトぐらいでしょうか。
国家プロジェクトで整備しているのに、筆者の普段使いしているサービスはほとんど海外サイト。
ハリケーンエレクトリックが執筆現在、無償で提供している tunnel broker と似たようなサービスが国内でも出来ると今よりは国内 native IPv6 環境が進みそうな気もします。