Debian

debian 9 - dovecot 圓形立方體篩子

  • January 24, 2021

我很難理解為了使用 roundcube 的過濾外掛而讓篩子工作時我做錯了什麼。

我按照https://www.linode.com/docs/guides/email-with-postfix-dovecot-and-mysql/上的指南使用基於 sql 的虛擬使用者設置加密郵件伺服器。

我從 tarball 安裝的 Roundcube,除了創建過濾器外,功能完美。當我嘗試創建過濾器時,我收到一條上滑通知,說明它無法與伺服器通信。看起來很公平,在某個地方 seive 和 dovecot 還不是朋友。

在這一點上,圓形立方體部分可能無關緊要。我對此不夠熟悉,不知道從哪裡開始故障排除或尋找什麼。

任何幫助將不勝感激

netstat -plnt 顯示 dovecot iptables -L -v -n 監聽的埠 4190 grep 4190 顯示 ipv4 埠已打開 dovecot -n 報告:

# 2.2.27 (): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.16 ()
# OS: Linux 4.9.0-12-amd64 x86_64 Debian 9.13 ext4
auth_mechanisms = plain login
mail_location = maildir:/var/mail/vhosts/%d/%n/
mail_privileged_group = mail
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext
namespace inbox {
 inbox = yes
 location = 
 mailbox Drafts {
   special_use = \Drafts
 }
 mailbox Junk {
   special_use = \Junk
 }
 mailbox Sent {
   special_use = \Sent
 }
mailbox "Sent Messages" {
   special_use = \Sent
 }
 mailbox Trash {
   special_use = \Trash
 }
 prefix = 
}
passdb {
 driver = pam
}
passdb {
 args = /etc/dovecot/dovecot-sql.conf.ext
 driver = sql
}
plugin {
 sieve = file:~/sieve;active=~/.dovecot.sieve
}
postmaster_address = postmaster at nostalgicmail.com
protocols = imap lmtp sieve sieve
service auth-worker {
 user = vmail
}
service auth {
 unix_listener /var/spool/postfix/private/auth {
   group = postfix
   mode = 0660
   user = postfix
 }
 unix_listener auth-userdb {
   mode = 0600
   user = vmail
 }
 user = dovecot
}
service imap-login {
 inet_listener imap {
   port = 0
 }
 inet_listener imaps {
   port = 993
   ssl = yes
 }
}
service lmtp {
 unix_listener /var/spool/postfix/private/dovecot-lmtp {
   group = postfix
   mode = 0600
   user = postfix
 }
}
service managesieve-login {
 inet_listener sieve {
   port = 4190
 }
 process_min_avail = 1
 service_count = 1
}
service pop3-login {
 inet_listener pop3 {
   port = 0
 }
 inet_listener pop3s {
   port = 995
   ssl = yes
 }
}
ssl_cert = </etc/letsencrypt/live/nostalgicmail.com/fullchain.pem
ssl_key =  # hidden, use -P to show it
userdb {
 driver = passwd
}
userdb {
 args = uid=vmail gid=vmail home=/var/vmail/%u
 driver = static
}
protocol lmtp {
 mail_plugins = " sieve"
}
protocol lda {
 mail_plugins = " sieve"
}

我想寫一篇關於我如何解決問題的敘述。希望它可以幫助其他人,並列出一些可以保留以備將來使用的新花絮。

我在其他地方看到了有關調試日誌記錄的文章,然後觀看 syslog。

vim /etc/dovecot/conf.d/10-logging.conf

#mail_debug = no
mail_debug = yes

tail syslog,重啟 dovecot,然後登錄 roundcube

尾 -f /var/log/syslog

服務鴿舍重啟

~點擊、指向、登錄郵箱~

我在 syslog 中發現了一些有趣的東西……

Jan 24 06:40:22 hwsrv-753880 systemd[1]: Started Dovecot IMAP/POP3 email server.
Jan 24 06:41:22 hwsrv-753880 dovecot: imap-login: Login: user=<username@domain.com>, method=PLAIN, rip=2607:5500:3000:1385::2, lip=2607:5500:3000:1385::2, mpid=31064, TLS, session=<+Cv2vKS5xIMmB1UAMAAThQAAAAAAAAAC>
Jan 24 06:41:22 hwsrv-753880 dovecot: imap(username@domain.com): Debug: Effective uid=5000, gid=5000, home=/var/vmail/username@domain.com
Jan 24 06:41:22 hwsrv-753880 dovecot: imap(username@domain.com): Debug: Home dir not found: /var/vmail/username@domain.com

一個可愛的家庭目錄未找到消息。它旁邊說調試,這表明除非啟用調試,否則您不會看到這個。我 cd 到 /var 看看……而 /var/vmail/ 根本不存在!唔…

https://doc.dovecot.org/configuration_manual/mail_location/ 是 dovecot 關於郵件儲存位置的文件。它還告訴我:

郵箱自動創建 Dovecot 在 1.x 時代自動創建郵箱,無論是否設置了 mail_location。在 2.x 中,只有正確設置了 mail_location 才會觸發自動創建。

我通過 SQL 使用虛擬使用者,這可能會改變一些事情。我一直在瀏覽 dovecot 文件,並在https://doc.dovecot.org/configuration_manual/home_directories_for_virtual_users/ 上瀏覽虛擬使用者的主目錄dovecot,並與虛擬使用者目錄文件頁面進行比較。

dovecot -n 這顯示了 dovecot 實際使用(有效)的設置

我目前的配置將郵件發送到與文件不匹配的位置。我不確定 dovecot 的內部結構,所以我決定我應該盡可能地匹配文件。不了解內部情況,我可能在某些事情上採取了風景優美的路線。

mkdir /var/vmail

chown -R 5000:5000 /var/vmail 我不知道哪個使用者去 UID 和 GID 5000,也不太在意。這就是 Dovecot 想要的(看看上面的日誌,你會看到的)

grep -rnw ‘/etc/dovecot’ -e ‘mail_location’ 我不知道在配置文件的海洋中哪裡設置了變數。我也不知道它是否在多個地方,所以我使用這個 grep 來查找 /etc/dovecot 中包含 mail_location 字元串的所有文件。

/etc/dovecot/conf.d/10-mail.conf.orig:13:# path given in the mail_location setting.
/etc/dovecot/conf.d/10-mail.conf.orig:24:#   mail_location = maildir:~/Maildir
/etc/dovecot/conf.d/10-mail.conf.orig:25:#   mail_location = mbox:~/mail:INBOX=/var/mail/%u
/etc/dovecot/conf.d/10-mail.conf.orig:26:#   mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
/etc/dovecot/conf.d/10-mail.conf.orig:30:mail_location = mbox:~/mail:INBOX=/var/mail/%u
/etc/dovecot/conf.d/10-mail.conf.orig:56:  # mail_location, which is also the default for it.
/etc/dovecot/conf.d/10-mail.conf:13:# path given in the mail_location setting.
/etc/dovecot/conf.d/10-mail.conf:24:#   mail_location = maildir:~/Maildir
/etc/dovecot/conf.d/10-mail.conf:25:#   mail_location = mbox:~/mail:INBOX=/var/mail/%u
/etc/dovecot/conf.d/10-mail.conf:26:#   mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
/etc/dovecot/conf.d/10-mail.conf:30:# ~this one is working mail_location = maildir:/var/mail/vhosts/%d/%n/
/etc/dovecot/conf.d/10-mail.conf:31:# mail_location = maildir:/var/vmail/%d/%n/mail
/etc/dovecot/conf.d/10-mail.conf:32:mail_location = maildir:/var/vmail/%u/mail
/etc/dovecot/conf.d/10-mail.conf:58:  # mail_location, which is also the default for it.
/etc/dovecot/dovecot-sql.conf.ext:116:#   mail - Mail location (overrides mail_location setting)
/etc/dovecot/dovecot-sql.conf.ext.orig:115:#   mail - Mail location (overrides mail_location setting)

*(旁注,如果您如何閱讀以上內容…跳過此內容。

閱讀所有第一部分的方法是文件名,然後是行號,然後是該行上的實際文本。有了這些資訊,您可以發出 vim +24 /etc/dovecot/conf.d/10-mail.conf 轉到您需要擺弄的文件中的位置。)*

我不記得我在哪裡讀過它,但是它在我腦海中的某個地方突出表明 dovecot 與相對目錄完全不兼容,所以我知道我需要使用精確路徑設置 mail_location 。閱讀變數上方的文件塊,我想出了 mail_location = maildir:/var/vmail/%u/mail

我再次重新啟動了 dovecot,我之前仍在執行的 syslog 尾部現在閃爍了一些關於未找到主目錄的內容,使用標準權限創建。緊接著,然後創建了主目錄,等等。在冗長的神奇展示之後,我看到了將篩子規則復製到主目錄的神奇之處。我登錄到roundcube,一切正常!我將 dubug 重新關閉,再次重新啟動 dovecot,感到自豪,讓我的自我膨脹一點。

最後,篩子確實配置正確。Roundcube 配置正確。Dovecot 正在工作,我完全按照指南進行操作。我終於破解了文件,花了大約一個小時的調查,發現問題與文件系統路徑有關。

肯定的證明,無論您多麼嚴格地遵循指南,文件仍然是至高無上的。我覺得很多人已經習慣了即時滿足,以至於我們忘記了任何 *UNIX 系統的第一條規則…… RTFM

引用自:https://unix.stackexchange.com/questions/630603