如果超出配額,不會重新計算 Dovecot 配額,也不會拒絕郵件
我正在嘗試在 Dovecot 設置配額。目前 Postfix 在 Debian Jessie 上與 Dovecot 和 postfixadmin 一起執行。
我遇到的問題是配額沒有應用,也沒有重新計算。即使我超出配額 300% 或更多,郵件仍然會送達。此外,當收到新郵件時,相應表中的值
quota2
永遠不會更新。這是我到目前為止所做的:
我已經編輯了我
/etc/dovecot/dovecot.conf
以啟用配額(好吧,至少我認為我這樣做了):# 2.1.7: /etc/dovecot/dovecot.conf # 作業系統:Linux 3.2.0-4-amd64 x86_64 Debian 7.1 # 啟用配額外掛 mail_plugins = $mail_plugins 配額 auth_mechanisms = 普通登錄 log_timestamp = "%Y-%m-%d %H:%M:%S" # 我們需要每個 ip 超過 10 個連接 mail_max_userip_connections = 20 # 只啟用 imap 協議 = imap # 證書 ssl_cert=</etc/ssl/localcerts/mailserver.crt ssl_key=</etc/ssl/localcerts/mailserver.key 傳遞數據庫 { 參數 = /etc/dovecot/dovecot-mysql.conf 驅動程序 = sql } 使用者數據庫 { 參數 = /etc/dovecot/dovecot-mysql.conf 驅動程序 = sql } 服務認證{ unix_listener /var/spool/postfix/private/auth_dovecot { 組=後綴 模式 = 0660 使用者 = 後綴 } unix_listener auth-master { 模式 = 0600 使用者 = vmail } 使用者 = 根 } # 為配額啟用字典內容 服務字典 { unix_listener 字典 { 模式 = 0600 使用者 = vmail } } # 啟用 imap_quota 協議 imap { mail_plugins = 配額 imap_quota } 插入 { # 使用 SQL 表儲存目前配額大小 quota_grace = 10M quota = dict:使用者配額::proxy::sqluserquota quota_exceeded_message = 對不起,%u 的郵箱超出了限制。 } auth_debug = 是 auth_debug_passwords = 是 auth_verbose = 是 mail_debug = 是 聽寫{ sqluserquota = mysql:/etc/dovecot/dovecot-dict-sql-user.conf } 協議pop3 { pop3_uidl_format =%08Xu%08Xv } 協議 lda { mail_plugins = 配額 auth_socket_path = /var/run/dovecot/auth-master postmaster_address = admin@domain }
該文件
/etc/dovecot/dovecot-dict-sql-user.conf
包含:連接=主機=本地主機數據庫名=postfixadmin使用者=postfixadmin密碼=秘密 地圖 { 模式 = priv/配額/儲存 表=配額2 username_field = 使用者名 value_field = 字節 } 地圖 { 模式 = priv/quota/messages 表=配額2 username_field = 使用者名 value_field = 消息 }
文件中郵箱和密碼的查詢
/etc/dovecot/dovecot-mysql.conf
包含:驅動程序 = mysql 連接=主機=本地主機數據庫名=postfixadmin使用者=postfixadmin密碼=秘密 default_pass_scheme = PLAIN-MD5 password_query = SELECT CONCAT('*:bytes=', quota) AS userdb_quota_rule, 密碼來自郵箱 WHERE username = '%u' user_query = SELECT CONCAT('maildir:/var/vmail/',maildir) AS mail, CONCAT('*:bytes=', quota) AS quota_rule, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u'
如果我手動觸發報價計算,事情看起來很合理:
root@zame:/etc/dovecot#dovadm quota recalc -u user@domain root@zame:/etc/dovecot# doveadm quota get -u user@domain 配額名稱 類型 值限制 % 使用者配額 STORAGE 37091 10000 370 使用者配額 MESSAGE 126 - 0
如果我在 Thunderbird 中啟用
Display Quota
外掛,Thunderbird 還報告使用了 371% 的配額。所以從數據庫中讀取目前值似乎是可行的。但是,如果我向該郵箱發送郵件(超過 370% 的配額),郵件仍然會送達。
登錄期間的日誌
/var/log/mail.log
顯示以下內容(如果我剛剛啟動 Thunderbird):8 月 21 日 17:27:01 zame dovecot:身份驗證:調試:從目錄載入模組:/usr/lib/dovecot/modules/auth 8 月 21 日 17:27:01 zame dovecot:身份驗證:調試:模組已載入:/usr/lib/dovecot/modules/auth/libdriver_mysql.so 8 月 21 日 17:27:01 zame dovecot: auth: Debug: Read auth token secret from /var/run/dovecot/auth-token-secret.dat 8 月 21 日 17:27:01 zame dovecot: auth: Debug: auth client connected (pid=22901) 8 月 21 日 17:27:01 zame dovecot:身份驗證:調試:客戶端在:AUTH#0111#011PLAIN#011service=imap#011secured#011session=E54/5tMd9QBUSpxA#011lip=91.214.168.151#011rip=84.74.156.64#011lport=143 #011rport=61173 8 月 21 日 17:27:01 zame dovecot: auth: Debug: client passdb out: CONT#0111 8 月 21 日 17:27:01 zame dovecot: auth: Debug: client in: CONT#0111#011AGVnQHphbWUuY2gANHBsVVRPX25pdW0=(之前的 base64 數據可能包含敏感數據) 8 月 21 日 17:27:01 zame dovecot:auth-worker(22905):調試:從目錄載入模組:/usr/lib/dovecot/modules/auth 8 月 21 日 17:27:01 zame dovecot:auth-worker(22905):調試:模組已載入:/usr/lib/dovecot/modules/auth/libdriver_mysql.so 8 月 21 日 17:27:01 zame dovecot: auth-worker(22905): Debug: sql(eg@domain,84.74.156.64): query: SELECT CONCAT('*:bytes=', quota) AS userdb_quota_rule, password FROM 郵箱WHERE 使用者名 = 'eg@domain' 8 月 21 日 17:27:01 zame dovecot: auth: Debug: client passdb out: OK#0111#011user=eg@domain 8 月 21 日 17:27:01 zame dovecot: auth: 調試: master in: REQUEST#0111999634433#01122901#0111#011636e2ad86df15a637411ff278b1f4db9#011session_pid=22907#011request_auth_token 8 月 21 日 17:27:01 zame dovecot: auth-worker(22905): Debug: sql(eg@domain,84.74.156.64): SELECT CONCAT('maildir:/var/vmail/',maildir) AS mail, CONCAT( '*:bytes=', quota) AS quota_rule, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = 'eg@domain' 8 月 21 日 17:27:01 zame dovecot: auth: Debug: master userdb out: USER#0111999634433#011eg@domain#011mail=maildir:/var/vmail/domain/eg/#011quota_rule=*:bytes=10240000#011uid= 5000#011gid=5000#011auth_token=d6c1d88ed77a7ffaf8057151bb5db289c4815786 8 月 21 日 17:27:01 zame dovecot: imap-login: Login: user=, method=PLAIN, rip=84.74.156.64, lip=91.214.168.151, mpid=22907, TLS, session= 8 月 21 日 17:27:01 zame dovecot:imap:調試:從目錄載入模組:/usr/lib/dovecot/modules 8 月 21 日 17:27:01 zame dovecot:imap:調試:模組已載入:/usr/lib/dovecot/modules/lib10_quota_plugin.so 8 月 21 日 17:27:01 zame dovecot:imap:調試:模組已載入:/usr/lib/dovecot/modules/lib11_imap_quota_plugin.so 8 月 21 日 17:27:01 zame dovecot:imap:調試:添加了 userdb 設置:mail=maildir:/var/vmail/domain/eg/ 8 月 21 日 17:27:01 zame dovecot:imap:調試:添加了 userdb 設置:plugin/quota_rule=*:bytes=10240000 8 月 21 日 17:27:01 zame dovecot: imap(eg@domain): Debug: Effective uid=5000, gid=5000, home= 8 月 21 日 17:27:01 zame dovecot: imap(eg@domain): Debug: Quota root: name=User quota backend=dict args=:proxy::sqluserquota 8 月 21 日 17:27:01 zame dovecot: imap(eg@domain): 調試: 配額規則: root=使用者配額郵箱=* 字節=10240000 消息=0 8 月 21 日 17:27:01 zame dovecot: imap(eg@domain): 調試: 配額寬限期: root=使用者配額字節=10485760 8 月 21 日 17:27:01 zame dovecot: imap(eg@domain): 調試: dict quota: user=eg@domain, uri=proxy::sqluserquota, noenforcing=0 8 月 21 日 17:27:01 zame dovecot: imap(eg@domain): 調試: maildir++: root=/var/vmail/domain/eg, index=, indexpvt=, control=, inbox=/var/vmail/domain/例如,alt= 8 月 21 日 17:27:14 zame dovecot: auth: Debug: auth client connected (pid=22910) 8 月 21 日 17:27:14 zame dovecot:身份驗證:調試:客戶端在:AUTH#0111#011PLAIN#011service=imap#011secured#011session=OdQF59MdDQBUSpxA#011lip=91.214.168.151#011rip=84.74.156.64#011lport=143#rport =61197 8 月 21 日 17:27:14 zame dovecot: auth: Debug: client passdb out: CONT#0111 8 月 21 日 17:27:14 zame dovecot: auth: Debug: client in: CONT#0111#011AGVnQHphbWUuY2gANHBsVVRPX25pdW0=(之前的 base64 數據可能包含敏感數據) 8 月 21 日 17:27:14 zame dovecot: auth-worker(22905): Debug: sql(eg@domain,84.74.156.64): query: SELECT CONCAT('*:bytes=', quota) AS userdb_quota_rule, password FROM 郵箱WHERE 使用者名 = 'eg@domain' 8 月 21 日 17:27:14 zame dovecot: auth: Debug: client passdb out: OK#0111#011user=eg@domain 8 月 21 日 17:27:14 zame dovecot: auth: 調試: master in: REQUEST#011213516289#01122910#0111#0119ed3b0c072c59928f45493e80687b82a#011session_pid=22911#011request_auth_token 8 月 21 日 17:27:14 zame dovecot: auth-worker(22905): Debug: sql(eg@domain,84.74.156.64): SELECT CONCAT('maildir:/var/vmail/',maildir) AS mail, CONCAT( '*:bytes=', quota) AS quota_rule, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = 'eg@domain' 8 月 21 日 17:27:14 zame dovecot: auth: Debug: master userdb out: USER#011213516289#011eg@domain#011mail=maildir:/var/vmail/domain/eg/#011quota_rule=*:bytes=10240000#011uid= 5000#011gid=5000#011auth_token=58a5177adf128ec45bf2e621abc97e43c9924530 8 月 21 日 17:27:14 zame dovecot: imap-login: 登錄: user=, method=PLAIN, rip=84.74.156.64, lip=91.214.168.151, mpid=22911, TLS, session= 8 月 21 日 17:27:14 zame dovecot:imap:調試:從目錄載入模組:/usr/lib/dovecot/modules 8 月 21 日 17:27:14 zame dovecot:imap:調試:模組已載入:/usr/lib/dovecot/modules/lib10_quota_plugin.so 8 月 21 日 17:27:14 zame dovecot:imap:調試:模組已載入:/usr/lib/dovecot/modules/lib11_imap_quota_plugin.so 8 月 21 日 17:27:14 zame dovecot:imap:調試:添加了 userdb 設置:mail=maildir:/var/vmail/domain/eg/ 8 月 21 日 17:27:14 zame dovecot:imap:調試:添加了 userdb 設置:plugin/quota_rule=*:bytes=10240000 8 月 21 日 17:27:14 zame dovecot: imap(eg@domain): Debug: Effective uid=5000, gid=5000, home= 8 月 21 日 17:27:14 zame dovecot: imap(eg@domain): Debug: Quota root: name=User quota backend=dict args=:proxy::sqluserquota 8 月 21 日 17:27:14 zame dovecot: imap(eg@domain): 調試: 配額規則: root=使用者配額郵箱=* 字節=10240000 消息=0 8 月 21 日 17:27:14 zame dovecot: imap(eg@domain): Debug: Quota Grace: root=User quota bytes=10485760 8 月 21 日 17:27:14 zame dovecot: imap(eg@domain): Debug: dict quota: user=eg@domain, uri=proxy::sqluserquota, noenforcing=0 8 月 21 日 17:27:14 zame dovecot: imap(eg@domain): 調試: maildir++: root=/var/vmail/domain/eg, index=, indexpvt=, control=, inbox=/var/vmail/domain/例如,alt=
收到郵件時的以下內容(對於超出配額的使用者):
8 月 21 日 17:31:50 zame postfix/smtpd[22964]:從 mout.gmx.net[212.227.15.19] 連接 8 月 21 日 17:31:50 zame dovecot:身份驗證:調試:從目錄載入模組:/usr/lib/dovecot/modules/auth 8 月 21 日 17:31:50 zame dovecot:身份驗證:調試:模組已載入:/usr/lib/dovecot/modules/auth/libdriver_mysql.so 8 月 21 日 17:31:50 zame dovecot: auth: Debug: Read auth token secret from /var/run/dovecot/auth-token-secret.dat 8 月 21 日 17:31:50 zame dovecot: auth: Debug: auth client connected (pid=0) 8 月 21 日 17:31:50 zame postfix/smtpd[22964]:CB20237236F:client=mout.gmx.net[212.227.15.19] 8 月 21 日 17:31:50 zame 後綴/清理 [22971]:CB20237236F:消息 ID = 8 月 21 日 17:31:50 zame postfix/qmgr[22288]: CB20237236F: from=, size=2826, nrcpt=1 (queue active) 8 月 21 日 17:31:50 zame postfix/virtual[22972]: CB20237236F: to=, relay=virtual, delay=0.06, delays=0.04/0.02/0/0.01, dsn=2.0.0, status=sent (delivered to郵件目錄) 8 月 21 日 17:31:50 zame 後綴/qmgr [22288]:CB20237236F:已刪除 8 月 21 日 17:31:50 zame postfix/smtpd[22964]:斷開與 mout.gmx.net[212.227.15.19] 的連接
如前所述,列的值
bytes
不會在 table 中更新quotas2
。所以,我不知何故錯過瞭如何連結 dovecot 以考慮配額並在嘗試將郵件傳遞到
/var/vmail/
.我會很高興任何提示。
為了完整起見,這裡是輸出
dovecot -n
:# 2.2.13: /etc/dovecot/dovecot.conf # 作業系統:Linux 3.2.0-4-amd64 x86_64 Debian 8.1 auth_debug = 是 auth_debug_passwords = 是 auth_mechanisms = 普通登錄 auth_verbose = 是 聽寫{ sqluserquota = mysql:/etc/dovecot/dovecot-dict-sql-user.conf } log_timestamp = "%Y-%m-%d %H:%M:%S" mail_debug = 是 mail_max_userip_connections = 20 mail_plugins = "配額" 傳遞數據庫 { 參數 = /etc/dovecot/dovecot-mysql.conf 驅動程序 = sql } 插入 { quota = dict:使用者配額::proxy::sqluserquota quota_exceeded_message = 對不起,%u 的郵箱超出了限制。 quota_grace = 10M } 協議 = imap 服務認證{ unix_listener /var/spool/postfix/private/auth_dovecot { 組=後綴 模式 = 0660 使用者 = 後綴 } unix_listener auth-master { 模式 = 0600 使用者 = vmail } 使用者 = 根 } 服務字典 { unix_listener 字典 { 模式 = 0600 使用者 = vmail } } ssl_cert = </etc/ssl/localcerts/mailserver.crt ssl_key = </etc/ssl/localcerts/mailserver.key 使用者數據庫 { 參數 = /etc/dovecot/dovecot-mysql.conf 驅動程序 = sql } 協議 imap { mail_plugins = 配額 imap_quota } 協議pop3 { pop3_uidl_format =%08Xu%08Xv } 協議 lda { auth_socket_path = /var/run/dovecot/auth-master mail_plugins = 配額 postmaster_address = admin@domain }
編輯:如果我更詳細地查看表格,它會變得更加混亂
quota2
:如果我從啟用了配額的帳戶(使用 Thunderbird 或 Squirrelmail)發送郵件,我實際上可以看到郵件中的值
bytes
在quota2
增加。我認為這一定是由於將消息複製到了已發送的文件夾中。似乎配額不適用於傳入郵件?
好的,經過更多研究,我找到了解決方案:問題出在 postfix 配置中,而不是 dovecot!
Postfix 在
mydestination
一行中有一個錯誤的條目——因此它從未使用虛擬傳輸將消息傳遞到 Dovecot,而是直接將它們傳遞到本地郵箱。從
mydestination
後綴配置中刪除條目後,一切都按預期工作。現在收到郵件時的日誌看起來也不同了——它現在明確地談到了 Dovecot:Aug 21 20:32:39 zame postfix/pipe[26958]: 676243723C8: to=<user@domain>, relay=dovecot, delay=0.85, delays=0.5/0.03/0/0.33, dsn=2.0.0, status=sent (delivered via dovecot service)
注意
relay=dovecot
.