debian 9 - dovecot 圓形立方體篩子
我很難理解為了使用 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