如果超过配额,则不会重新计算鸽子配额,也不会拒绝邮件

我试图在达夫科特设定配额。 目前,在Debian Jessie上,Postfix与Dovecot和postfixadmin一起运行。

我的问题是配额不适用,也不重新计算。 即使超过300%以上的配额,邮件仍然交付。 另外,当收到新邮件时,相应表quota2的值永远不会更新。

这是我迄今为止所做的:

我编辑了我的/etc/dovecot/dovecot.conf来启用配额(至less我认为我是这么做的):

 #2.1.7:/etc/dovecot/dovecot.conf
 #操作系统:Linux 3.2.0-4-amd64 x86_64 Debian 7.1
 #启用配额插件
 mail_plugins = $ mail_plugins配额

 auth_mechanisms =简单login
 log_timestamp =“%Y-%m-%d%H:%M:%S”

 #我们需要每个ip超过10个连接
 mail_max_userip_connections = 20

 #只启用imap
 protocols = imap

 #证书
 ssl_cert = </等/ SSL / localcerts / mailserver.crt
 ssl_key = </等/ SSL / localcerts / mailserver.key

 passdb {
   args = /etc/dovecot/dovecot-mysql.conf
   driver = sql
 }

 userdb {
   args = /etc/dovecot/dovecot-mysql.conf
   driver = sql
 }

服务auth {
   unix_listener / var / spool / postfix / private / auth_dovecot {
     group = postfix
    模式= 0660
    用户=后缀
   }
   unix_listener auth-master {
    模式= 0600
    用户= vmail
   }
   user = root
 }

 #启用字典的东西的配额
服务字典{
   unix_listener字典{
    模式= 0600
    用户= vmail
   }
 }

 #启用imap_quota
协议imap {
   mail_plugins =配额imap_quota
 }

插入 {
   #使用SQL Tables来存储当前的配额大小
   quota_grace = 10M
  配额=字典:用户配额::代理:: 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 password = secret

 map {
   pattern = priv / quota / storage
   table = quota2
   username_field =用户名
   value_field =字节
 }
 map {
   pattern = priv / quota / messages
   table = quota2
   username_field =用户名
   value_field =消息
 }

/etc/dovecot/dovecot-mysql.conf文件中的邮箱和密码的查询包含:

驱动程序= mysql
 connect = host = localhost dbname = postfixadmin user = postfixadmin password = secret
 default_pass_scheme = PLAIN-MD5

 password_query = SELECT CONCAT('*:bytes =',quota)as userdb_quota_rule,password FROM mailbox 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#doveadm配额recalc -u user @ domain
 root @ zame:/ etc / dovecot#doveadm quota get -u user @ domain
配额名称types数值限制%
用户配额储存37091 10000 370
用户配额MESSAGE 126  -  0

如果我在Thunderbird中启用Display Quota插件,Thunderbird也会报告371%的配额使用情况。 所以从数据库中读取当前值似乎工作。

但是,如果我发送邮件到邮箱(配额超过370%)邮件仍然交付。

/var/log/mail.log日志在login时显示以下内容(如果我刚启动thunderbird):

 8月21日17:27:01 zame dovecot:auth:Debug:从目录加载模块:/ usr / lib / dovecot / modules / auth
 Aug 21 17:27:01 zame dovecot:auth:Debug:加载模块:/usr/lib/dovecot/modules/auth/libdriver_mysql.so
 Aug 21 17:27:01 zame dovecot:auth:Debug:从/var/run/dovecot/auth-token-secret.dat读取授权令牌密码
 8月21日17:27:01 zame dovecot:auth:Debug:auth client connected(pid = 22901)
 Aug 21 17:27:01 zame dovecot:auth:Debug:client in:AUTH#0111#011PLAIN#011service = imap#011secured#011session = E54 / 5tMd9QBUSpxA#011lip = 91.214.168.151#011rip = 84.74.156.64#011lport = 143 #011rport = 61173
 Aug 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):debugging:从目录加载模块:/ usr / lib / dovecot / modules / auth
 Aug 21 17:27:01 zame dovecot:auth-worker(22905):debugging:加载模块:/usr/lib/dovecot/modules/auth/libdriver_mysql.so
 8月21日17:27:01 zame dovecot:auth-worker(22905):debugging:sql(例如@域,84.74.156.64):查询:selectCONCAT('*:bytes =',quota)AS userdb_quota_rule,密码FROM邮箱WHERE username ='eg @ domain'
 Aug 21 17:27:01 zame dovecot:auth:Debug:client passdb out:OK#0111#011user = eg @ domain
 Aug 21 17:27:01 zame dovecot:auth:Debug: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(例如@ 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:debugging:从目录加载模块:/ usr / lib / dovecot / modules
 Aug 21 17:27:01 zame dovecot:imap:Debug:加载模块:/usr/lib/dovecot/modules/lib10_quota_plugin.so
 Aug 21 17:27:01 zame dovecot:imap:Debug:模块已加载:/usr/lib/dovecot/modules/lib11_imap_quota_plugin.so
 8月21日17:27:01 zame dovecot:imap:debugging:添加userdb设置:mail = maildir:/ var / vmail / domain / eg /
 Aug 21 17:27:01 zame dovecot:imap:Debug:增加了userdb设置:plugin / quota_rule = *:bytes = 10240000
 8月21日17:27:01 zame dovecot:imap(eg @ domain):debugging:有效的uid = 5000,gid = 5000,home =
 8月21日17:27:01 zame dovecot:imap(例如@域):debugging:配额根目录:名称=用户配额后端=字典args =:代理:: sqluserquota
 8月21日17:27:01 zame dovecot:imap(例如@域):debugging:配额规则:root =用户配额邮箱= * bytes = 10240000 messages = 0
 8月21日17:27:01 zame dovecot:imap(例如@域名):debugging:配额宽限:root =用户配额bytes = 10485760
 8月21日17:27:01 zame dovecot:imap(例如@域名):debugging:字典配额:user = eg @ domain,uri = proxy :: sqluserquota,noenforcing = 0
 8月21日17:27:01 zame dovecot:imap(例如@域):debugging:maildir ++:root = / var / vmail / domain /例如,index =,indexpvt =,control =,inbox = / var / vmail / domain /例如,alt =
 8月21日17:27:14 zame dovecot:auth:Debug:auth client connected(pid = 22910)
 Aug 21 17:27:14 zame dovecot:auth:Debug:client in:AUTH#0111#011PLAIN#011service = imap#011secured#011session = OdQF59MdDQBUSpxA#011lip = 91.214.168.151#011rip = 84.74.156.64#011lport = 143#011rport = 61197
 Aug 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):debugging:sql(例如@域,84.74.156.64):查询:selectCONCAT('*:bytes =',quota)AS userdb_quota_rule,密码FROM邮箱WHERE username ='eg @ domain'
 Aug 21 17:27:14 zame dovecot:auth:Debug:client passdb out:OK#0111#011user = eg @ domain
 Aug 21 17:27:14 zame dovecot:auth:Debug: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(例如@ 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'
 Aug 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: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:debugging:从目录加载模块:/ usr / lib / dovecot / modules
 Aug 21 17:27:14 zame dovecot:imap:Debug:加载模块:/usr/lib/dovecot/modules/lib10_quota_plugin.so
 Aug 21 17:27:14 zame dovecot:imap:Debug:模块已加载:/usr/lib/dovecot/modules/lib11_imap_quota_plugin.so
 8月21日17:27:14 zame dovecot:imap:debugging:添加userdb设置:mail = maildir:/ var / vmail / domain / eg /
 Aug 21 17:27:14 zame dovecot:imap:Debug:增加了userdb设置:plugin / quota_rule = *:bytes = 10240000
 8月21日17:27:14 zame dovecot:imap(eg @ domain):debugging:有效的uid = 5000,gid = 5000,home =
 8月21日17:27:14 zame dovecot:imap(例如@域):debugging:配额根:名称=用户配额后端=字典args =:代理:: sqluserquota
 8月21日17:27:14 zame dovecot:imap(例如@域):debugging:配额规则:root =用户配额邮箱= * bytes = 10240000 messages = 0
 8月21日17:27:14 zame dovecot:imap(例如@域):debugging:配额宽限:root =用户配额bytes = 10485760
 8月21日17:27:14 zame dovecot:imap(例如@域名):debugging:字典配额:user = eg @ domain,uri = proxy :: sqluserquota,noenforcing = 0
 8月21日17:27:14 zame dovecot:imap(例如@域名):debugging:maildir ++:root = / var / vmail / domain / eg,index =,indexpvt =,control =,inbox = / var / vmail / domain /例如,alt =

以下是收到邮件时(超过配额的用户):

 Aug 21 17:31:50 zame postfix / smtpd [22964]:从mout.gmx.net连接[212.227.15.19]
 8月21日17:31:50 zame dovecot:auth:Debug:从目录加载模块:/ usr / lib / dovecot / modules / auth
 Aug 21 17:31:50 zame dovecot:auth:Debug:加载模块:/usr/lib/dovecot/modules/auth/libdriver_mysql.so
 Aug 21 17:31:50 zame dovecot:auth:Debug:从/var/run/dovecot/auth-token-secret.dat读取授权令牌密码
 8月21日17:31:50 zame dovecot:auth:Debug:auth client connected(pid = 0)
 Aug 21 17:31:50 zame postfix / smtpd [22964]:CB20237236F:client = mout.gmx.net [212.227.15.19]
 Aug 21 17:31:50 zame postfix / cleanup [22971]:CB20237236F:message-id =
 8月21日17:31:50 zame postfix / qmgr [22288]:CB20237236F:from =,size = 2826,nrcpt = 1(队列激活)
 Aug 21 17:31:50 zame postfix / virtual [22972]:CB20237236F:to =,relay = virtual,delay = 0.06,delay = 0.04 / 0.02 / 0 / 0.01,dsn = 2.0.0,status = sent邮件目录)
 Aug 21 17:31:50 zame postfix / qmgr [22288]:CB20237236F:已删除
 Aug 21 17:31:50 zame postfix / smtpd [22964]:从mout.gmx.net断开[212.227.15.19]

如前所述,列表bytes的值不会在表quotas2更新。

所以,我不知道如何链接dovecot以考虑配额并在尝试将邮件传递到/var/vmail/一个邮箱时进行更新。

我会很高兴的任何提示。

为了完整dovecot -n ,这里是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 =简单login
 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 =“配额”
 passdb {
   args = /etc/dovecot/dovecot-mysql.conf
   driver = sql
 }
插入 {
  配额=字典:用户配额::代理:: sqluserquota
   quota_exceeded_message =抱歉,%u的邮箱超出了限制。
   quota_grace = 10M
 }
 protocols = imap
服务auth {
   unix_listener / var / spool / postfix / private / auth_dovecot {
     group = postfix
    模式= 0660
    用户=后缀
   }
   unix_listener auth-master {
    模式= 0600
    用户= vmail
   }
   user = root
 }
服务字典{
   unix_listener字典{
    模式= 0600
    用户= vmail
   }
 }
 ssl_cert = </etc/ssl/localcerts/mailserver.crt
 ssl_key = </etc/ssl/localcerts/mailserver.key
 userdb {
   args = /etc/dovecot/dovecot-mysql.conf
   driver = 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),我实际上可以看到配额2中的值bytes正在增加。 我认为这一定是由于邮件复制到发送的文件夹。

似乎配额只是不适用于传入邮件?

好吧,经过一些更多的研究,我发现解决scheme:问题是在后缀configuration,而不是dovecot!

Postfix在mydestination行中有一个错误的条目 – 所以它从来没有使用虚拟传输将消息传递给Dovecot,而是直接将它们传递到本地邮箱。

在postfixconfiguration中从mydestination删除条目后,一切都按预期工作。 现在接收邮件的日志也看起来不一样 – 现在对德芙科特明确地说:

 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