我试图在达夫科特设定配额。 目前,在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 。