~ 無盡的八月 ~ 醉酒中將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]: 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.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,這真是麻煩。擁有十多個網域的痛苦開始浮現……
幸運的是,ConoHa公開了用於更改DNS記錄的API,所以這次處理完畢後,我想建立一個可以批量更改DNS的工具。
區域檔案匯入|ConoHa文件網站

接下來,就是將所有靜態託管的內容以及郵件目錄本身,透過我的主機機器傳送到ConoHa端……結束!
最後是fail2ban,我會在確認所有與WireGuard的客戶端通訊都正常後再處理。那麼,下次再見。

Related Posts