~ 无尽的八月 ~ 醉酒状态下将FreeBSD环境从Vultr迁移到ConoHa ~ 无法通过通配符读取的SigningTable ~

7 min

language: ja bn en es hi pt ru zh-cn zh-tw

大家好,这是上一篇的续集。标题是醉酒,但我现在已经不醉了。

邮件无法送达Gmail!

哎呀,我遇到麻烦了。
我一边看着tail -f /var/log/maillog一边努力解决……。

opendkim[1853]: 无法从 /var/db/dkim/eyes4you.org.private 加载密钥:权限被拒绝

啊……似乎是权限不足。
我忘了,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.org写进了KeyTable……。
但我想要指定通配符。

我浏览了一些网站,终于找到了。
我以前也见过这里……。
在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的内部IP,所以客户端只需将WireGuard服务器指向ConoHa即可。
然而,这次我打算将NS设置为ConoHa,这真的很麻烦。拥有10多个域名的痛苦就来了……
令人高兴的是,ConoHa公开了用于更改DNS记录的API,所以这次处理完后,我想创建一个可以批量更改DNS的工具。
区域文件导入|ConoHa文档网站

接下来,就是通过我的主机将静态托管的内容和邮件目录本身发送到ConoHa端……完成!
最后是fail2ban,我会在所有WireGuard客户端连接确认无误后再进行设置。下次再见。

Related Posts