我正在尝试在 Dovecot 中设置配额。目前 Postfix 与 Dovecot 和 postfixadmin 一起在 Debian Jessie 上运行。
我的问题是配额没有应用,也没有重新计算。即使我超过了 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 密码{ args = /etc/dovecot/dovecot-mysql.conf 驱动程序 = sql } 用户数据库{ args = /etc/dovecot/dovecot-mysql.conf 驱动程序 = sql } 服务认证{ unix_listener /var/spool/postfix/private/auth_dovecot { 组 = 后缀 模式 = 0660 用户 = 后缀 } unix_listener auth-master { 模式 = 0600 用户 = vmail } 用户 = 根 } # 为配额启用字典内容 服务字典{ unix_listener dict { 模式 = 0600 用户 = vmail } } # 启用 imap_quota 协议 imap { mail_plugins = 配额 imap_quota } 插入 { # 使用 SQL 表存储当前配额大小 quota_grace = 10M 配额 = dict:用户配额::代理::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
包含:
connect = host=localhost dbname=postfixadmin user=postfixadmin 密码=secret 地图 { 模式 = priv/配额/存储 表 = 配额 2 用户名_字段 = 用户名 value_field = 字节 } 地图 { 模式 = priv/quota/messages 表 = 配额 2 用户名_字段 = 用户名 value_field = 消息 }
对文件中邮箱和密码的查询/etc/dovecot/dovecot-mysql.conf
包含:
驱动程序 = mysql connect = host=localhost dbname=postfixadmin user=postfixadmin 密码=secret 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 邮箱 WHERE username = '%u'
如果我手动触发报价的计算,事情看起来很合理:
root@zame:/etc/dovecot# doveadm quota recalc -u user@domain root@zame:/etc/dovecot# doveadm quota get -u user@domain 配额名称 类型 值限制 % 用户配额 STORAGE 37091 10000 370 用户配额 MESSAGE 126 - 0
如果我Display Quota
在 Thunderbird 中启用插件,Thunderbird 还会报告使用了 371% 的配额。所以从数据库中读取当前值似乎有效。
但是,如果我将邮件发送到该邮箱(超过 370% 的配额),邮件仍然会被送达。
登录/var/log/mail.log
期间的日志显示以下内容(如果我只是启动雷鸟):
8 月 21 日 17:27:01 zame dovecot:auth:调试:从目录加载模块:/usr/lib/dovecot/modules/auth 8 月 21 日 17:27:01 zame dovecot:auth:调试:模块加载:/usr/lib/dovecot/modules/auth/libdriver_mysql.so 8 月 21 日 17:27:01 zame dovecot:auth:调试:从 /var/run/dovecot/auth-token-secret.dat 读取身份验证令牌秘密 8 月 21 日 17:27:01 zame dovecot:auth:调试:auth 客户端已连接(pid=22901) 8 月 21 日 17:27:01 zame dovecot: auth: 调试: 客户端: AUTH#0111#011PLAIN#011service=imap#011secured#011session=E54/5tMd9QBUSpxA#011lip=91.214.16061614rip14#168.14514514513 #011rport=61173 8 月 21 日 17:27:01 zame dovecot:auth:调试:客户端密码输出: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):调试:sql(eg@domain,84.74.156.64):查询:SELECT CONCAT('*:bytes=', quota) AS userdb_quota_rule,密码来自邮箱WHERE 用户名 = 'eg@domain' 8 月 21 日 17:27:01 zame dovecot:auth:调试:客户端 passdb 输出:OK#0111#011user=eg@domain 8 月 21 日 17:27:01 zame dovecot: auth: 调试: master in: REQUEST#0111999634433#01122901#0111#011636e2ad86df15a637411ff278b1f4db9_requestth1f4db9#02011 8 月 21 日 17:27:01 zame dovecot: auth-worker(22905): 调试: sql(eg@domain,84.74.156.64): SELECT CONCAT('maildir:/var/vmail/',maildir) AS 邮件,CONCAT( '*:bytes=', quota) AS quota_rule, 5000 AS uid, 5000 AS gid FROM 邮箱 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=1020410000 5000#011gid=5000#011auth_token=d6c1d88ed77a7ffaf8057151bb5db289c4815786 8 月 21 日 17:27:01 zame dovecot:imap-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):调试:有效 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 配额: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:调试:auth 客户端已连接(pid=22910) 8 月 21 日 17:27:14 zame dovecot: auth: 调试: 客户端: AUTH#0111#011PLAIN#011service=imap#011secured#011session=OdQF59MdDQBUSpxA#011lip=91.214.160616rip14r10.168.14r10.168.14r14r10.168.14r10.13 =61197 8 月 21 日 17:27:14 zame dovecot:auth:调试:客户端密码输出: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):调试:sql(eg@domain,84.74.156.64):查询:SELECT CONCAT('*:bytes=', quota) AS userdb_quota_rule,密码来自邮箱WHERE 用户名 = 'eg@domain' 8 月 21 日 17:27:14 zame dovecot:auth:调试:客户端 passdb 输出:OK#0111#011user=eg@domain 8 月 21 日 17:27:14 zame dovecot: auth: 调试: master in: REQUEST#011213516289#01122910#0111#0119ed3b0c072c59928f45493e80687b1session_1auth_ken_1auth=011213516289#01122910 8 月 21 日 17:27:14 zame dovecot: auth-worker(22905): 调试: sql(eg@domain,84.74.156.64): SELECT CONCAT('maildir:/var/vmail/',maildir) AS 邮件,CONCAT( '*:bytes=', quota) AS quota_rule, 5000 AS uid, 5000 AS gid FROM 邮箱 WHERE username = 'eg@domain' 8 月 21 日 17:27:14 zame dovecot:auth:调试:主 userdb 输出:USER#011213516289#011eg@domain#011mail=maildir:/var/vmail/domain/eg/#011quota_rule=*:bytes=10#0110000 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):调试:有效 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):调试:配额宽限:root=用户配额字节=10485760 8 月 21 日 17:27:14 zame dovecot:imap(eg@domain):调试:dict 配额: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:auth:调试:从目录加载模块:/usr/lib/dovecot/modules/auth 8 月 21 日 17:31:50 zame dovecot:auth:调试:模块加载:/usr/lib/dovecot/modules/auth/libdriver_mysql.so 8 月 21 日 17:31:50 zame dovecot:auth:调试:从 /var/run/dovecot/auth-token-secret.dat 读取身份验证令牌秘密 8 月 21 日 17:31:50 zame dovecot:auth:调试:auth 客户端已连接(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)邮件目录) 8 月 21 日 17:31:50 zame postfix/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 = "配额" 密码{ args = /etc/dovecot/dovecot-mysql.conf 驱动程序 = sql } 插入 { 配额 = dict:用户配额::代理::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 dict { 模式 = 0600 用户 = vmail } } ssl_cert = </etc/ssl/localcerts/mailserver.crt ssl_key = </etc/ssl/localcerts/mailserver.key 用户数据库{ args = /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
postfix 配置中删除条目后,一切都按预期工作。收到邮件时的日志现在看起来也不同了 - 它现在明确地谈论 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)
Run Code Online (Sandbox Code Playgroud)
请注意relay=dovecot
.
归档时间: |
|
查看次数: |
2845 次 |
最近记录: |