~ 无尽的八月 ~ 醉酒状态下将FreeBSD环境从Vultr迁移到ConoHa ~ 无法通过通配符读取的SigningTable ~
大家好,这是上一篇的续集。标题是醉酒,但我现在已经不醉了。
邮件无法送达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.org和eyes4you.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 这样用[ ]括起来,就可以打开。
虽然现在已经没有隐藏的意义了,但就是这样。

在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客户端连接确认无误后再进行设置。下次再见。