~ エンドレスエイト ~ 泥酔しながらFreeBSD環境をVultrからConoHaに移行 ~ ワイルドカードで読み込めないSigningTable ~

5 min read

こんにちは、前回の続きです。タイトルは泥酔ですがもう泥酔してません。

gmailに届かねえ!

いやー困りました。
tail -f /var/log/maillog見ながら格闘です・・・。

opendkim[1853]: can't load key from /var/db/dkim/eyes4you.org.private: Permission denied

あれ・・・権限不足のようです。
失念してましたがdmarc/dkimのFreeBSDのデフォルトユーザはmailnullです。

root@localhost:/usr/local/etc # grep -r mailnull
./rc.d/opendmarc:opendmarc_runas=${opendmarc_runas-"mailnull:mailnull"}
./rc.d/milter-opendkim:: ${milteropendkim_uid:="mailnull"}
./rc.d/milter-opendkim:: ${milteropendkim_gid:="mailnull"}
./rc.d/milter-manager:: ${miltermanager_uid="mailnull"}

つまりはこのopendkimが秘密鍵を読み取れないといけません。
もはやmail.eyes4you.orgeyes4you.orgで前回も間違って作成してたりするので一新することにします。
ちなみに前回の設定も間違っててConoHaに登録してたレコードもミスってます。

# opendkim-genkey -d eyes4you.org -s mail -D /var/db/dkim/
# cat /var/db/dkim/mail.txt # ここの中身をTXTレコードに追加
mail._domainkey IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFdu/VfVVHqUN84IZh739JVf8NW6HAmMBT3+NBcTmkwOGLQ4ye59wvN83CudtnHPKR9vdtL9kJusaWk6wm0HXtZ64dVkjZxg61vrwPWw25Pe1eAkrs8EkdqnCLfeHtsU2g7dBD+gjbJgOKdAhIocPQYQYio0kyMn8M/MlGP60eQQIDAQAB" )  ; ----- DKIM key mail for eyes4you.org

その後に権限付与します。

chown mailnull:mailnull /var/db/dkim/mail.private
chmod 600 /var/db/dkim/mail.private

シンプルです。
今回はワイルドカードのみにしました。

root@localhost:/usr/local/etc/mail # cat SigningTable
*@eyes4you.org mail._domainkey.eyes4you.org
root@localhost:/usr/local/etc/mail # cat KeyTable 
mail._domainkey.eyes4you.org eyes4you.org:mail:/var/db/dkim/mail.private
root@localhost:/usr/local/etc/mail # 

これでリスタート

service milter-opendkim restart
service postfix restart
tail -f /var/log/maillog

これで、メール送信するが何度やってもgmailの迷惑メールにまた行く・・・。

ログ見ていると

Sep 14 10:59:04 localhost opendkim[974]: B855A20079: no signing table match for 'hoge@eyes4you.org'

となるのです。なんかこれで引っかかったから明示的にhoge@eyes4you.orgKeyTableに書いた記憶ある・・・。
でもワイルドカード指定したいのです。

何個かサイトを歩きたどり着きました。
昔も見たなここ・・・。
centos6.3のopendkimで「no signing table match」と出る | CHOICE

SigningTable /etc/opendkim/SigningTable としているなら、 testserver.com default._domainkey.testserver.com というように設定する。あるいは、 SigningTable refile:/etc/opendkim/SigningTable としているなら、 *@testserver.com default._domainkey.testserver.com のように設定しなさいということらしい。

ということなので

root@localhost:/usr/local/etc/mail # cat opendkim.conf
##
## opendkim.conf -- configuration file for OpenDKIM filter
##
## Copyright (c) 2010-2015, The Trusted Domain Project.  All rights reserved.
##
Canonicalization        simple/simple
Domain                  eyes4you.org
LogWhy                  yes
Mode                    sv
ReportAddress           "DKIM Error Postmaster" <postmaster@eyes4you.org>
Selector                default
SendReports             yes
Socket                  inet:8891@localhost
SubDomains              yes
Syslog                  Yes
SyslogSuccess           yes
UMask                   002
InternalHosts           /usr/local/etc/mail/TrustedHosts
SigningTable            refile:/usr/local/etc/mail/SigningTable # ←ココ
KeyTable                /usr/local/etc/mail/KeyTable

ログを見る

root@localhost:/usr/local/etc/mail # tail -f /var/log/maillog
~~~
Sep 14 12:14:52 localhost opendkim[3772]: 21A8E20293: DKIM-Signature field added (s=mail, d=eyes4you.org)
~~~

来ました〜〜〜〜!!!!やったぜ!

SPFレコード、怒られるんやが・・・

どうやらIPv6も有効であるとちゃんとSPFレコードにもIPv6有効にしないと行けなかったようでした。
前はパフォーマンス懸念的に完全に切っていたけどもう気にしていないので登録します。

v=spf1 ip4:ココにIPv4 ip6:ココにIPv6 -all

ちなみに最近知りましたがローカルホストでのIPv6はブラウザでアクセスするときに http://[ココ:に:IPv6:を]:80 みたいに[ ]でくくると開けるみたいです。
もはや隠す意味もないですがこんな感じです。

Image

VPNで一部WireGuard外にする

OpenAIなどはVPN通信で怒られるのでVPN通信で行わないようにします。

cd /usr/local/
mkdir sh
cd sh
vim route.sh

で以下を入力

#!/usr/local/bin/bash

# リストのドメインを定義
DOMAINS=("chat.openai.com" )

# デフォルトゲートウェイ
GATEWAY="今回の場合はifconfigのvtnet0のinet"

# 各ドメインのIPアドレスを取得し、ルーティングを追加
for DOMAIN in "${DOMAINS[@]}"; do
  # ドメインのIPアドレスを取得
  IP_ADDRESSES=$(dig +short $DOMAIN | grep [0-9])

  # 各IPに対してルーティングを追加
  for IP in $IP_ADDRESSES; do
    route add $IP $GATEWAY
  done
done

ただ今回はIPv6も必要なので注意です。

Nginx

Nginxのログローテート

VultrのFreeBSD使ってて気づいたんですがデフォのログローテート無くて溢れてました。
FreeBSDでは/etc/newsyslog.confで設定できるので以下を追加します。

/var/log/nginx/access.log   root:wheel  640  7     *    @T00  Z
/var/log/nginx/error.log    root:wheel  640  7     *    @T00  Z

あとはconfファイルを移動させます。ConoHa側がVultrをブロックしているのめんどくさいですが、今のマシンを経由して転送します。

thepassenger:[haturatu]:~/migrate-freebsd$ scp darkstar@vultr-freebsd:/home/darkstar/nginx.tar.gz .
nginx.tar.gz                                                             100%   14KB 167.8KB/s   00:00    
thepassenger:[haturatu]:~/migrate-freebsd$ scp nginx.tar.gz root@conoha-freebsd:/root/
nginx.tar.gz                                                             100%   14KB 129.1KB/s   00:00 

デフォの/usr/local/etc/nginxを削除してmvで完了。
バックエンド先はWireGuardのInternal IPに向いているのでクライアント側でWireGuardサーバをConoHaに向けるだけでOKです。
ただ、今回NSをConoHaにする予定なのでマジで面倒です。10個以上ドメイン持っている苦しさが出てきます・・・
素晴らしいことにConoHaはDNSレコード変更用のAPIが公開されているので今回の対応終わったらまとめてDNS変更できるようなの作っておきたいです。
ゾーンファイルインポート|ConoHaドキュメントサイト

あとは、ひたすらに静的ホストしているものや、メールディレクトリ自体をなんとか自分のホストマシン経由でConoHa側に送り・・・・終わり!
最後にfail2banですが、全てWireGuardとのクライアント側疎通確認できてからにします。それではまた。

PGP --- Contact --- Machines --- cat -v