Dovecot's grace_quota no funciona

1

Mi servidor de correo está trabajando en:

  • Postfix 3.1
  • Dovecot 2.2.22
  • MySQL 5.7
  • Ubuntu 16.04

Configuré que la cuota de cada usuario se lea desde la tabla de usuarios de la base de datos de correo de la columna quota:

dovecot-sql.conf.ext

driver = mysql

connect = host=127.0.0.1  dbname=mail user=admin password=XIOVwxasxvD

default_pass_scheme = SHA512-CRYPT


user_query = SELECT CONCAT('/home/vmail/',CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1))) AS home, 5000 AS uid, 5000 AS gid, concat('*:bytes=', quota) AS quota_rule FROM users WHERE email='%u'


password_query = SELECT email as user, password, 5000 AS userdb_uid, 5000 AS userdb_gid, concat('*:bytes=', quota) AS userdb_quota_rule FROM users WHERE email='%u';

E hice la siguiente configuración para habilitar las advertencias de cuota en 80% y 95%, y tener una cuota de gracia de 10% y un máximo de 50 MB para cada usuario,

conf.d/90-quota.conf:

plugin {
  quota_rule = *:bytes=1G
  quota_rule2 = Trash:storage=+100M
  quota_rule3 = Sent:storage=+100M
}

plugin {
  quota_warning = storage=95%% quota-warning 95 %u
  quota_warning2 = storage=80%% quota-warning 80 %u
}

service quota-warning {
  executable = script /usr/local/bin/quota-warning.sh
  user = vmail
  unix_listener quota-warning {
    user = vmail
  }
}

plugin {
  quota = maildir:User quota
}
plugin {
  quota_grace = 10%%
  quota_grace = 50M
}
plugin {
  quota_over_flag_value = TRUE



  quota_over_script = quota-warning mismatch %u
}

Los mensajes de advertencia funcionan correctamente, pero una vez que el usuario alcanza el tamaño de cuota "101%", rechaza cualquier mensaje nuevo con el mensaje de error "Cuota excedida" al remitente sin aplicar la configuración de cuota de gracia,

En el registro del modo de depuración obtuve:

Jul 12 18:48:57 mail postfix/smtp[23827]: 22A7FE884: to=<[email protected]>, relay=127.0.0.1[127.0.0.1]:10024, conn_use=178, delay=17, delays=0.01/16/0.01/1.7, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 490A8D627)
Jul 12 18:48:57 mail postfix/qmgr[25020]: 22A7FE884: removed
Jul 12 18:48:57 mail postfix/pickup[24689]: 5C653E898: uid=5000 from=<[email protected]>
Jul 12 18:48:57 mail postfix/cleanup[25288]: warning: connect to Milter service inet:localhost:9001: Cannot assign requested address
Jul 12 18:48:57 mail postfix/cleanup[25288]: 5C653E898: message-id=<[email protected]>
Jul 12 18:48:57 mail postfix/qmgr[25020]: 5C653E898: from=<[email protected]>, size=418, nrcpt=1 (queue active)
Jul 12 18:48:58 mail postfix/smtpd[25228]: 389E6D627: client=localhost[127.0.0.1]
Jul 12 18:48:58 mail postfix/cleanup[25288]: 389E6D627: message-id=<[email protected]>
Jul 12 18:48:58 mail postfix/qmgr[25020]: 389E6D627: from=<[email protected]>, size=877, nrcpt=1 (queue active)
Jul 12 18:48:58 mail dovecot: lmtp(24483): Debug: Quota root: name=User quota backend=maildir args=
Jul 12 18:48:58 mail dovecot: lmtp(24483): Debug: Quota rule: root=User quota mailbox=* bytes=1073741824 messages=0
Jul 12 18:48:58 mail dovecot: lmtp(24483): Debug: Quota rule: root=User quota mailbox=Trash bytes=+104857600 messages=0
Jul 12 18:48:58 mail dovecot: lmtp(24483): Debug: Quota rule: root=User quota mailbox=Sent bytes=+104857600 messages=0
Jul 12 18:48:58 mail dovecot: lmtp(24483): Debug: Quota warning: bytes=1020054732 (95%) messages=0 reverse=no command=quota-warning 95 raw mail user
Jul 12 18:48:58 mail dovecot: lmtp(24483): Debug: Quota warning: bytes=858993459 (80%) messages=0 reverse=no command=quota-warning 80 raw mail user
Jul 12 18:48:58 mail dovecot: lmtp(24483): Debug: Quota grace: root=User quota bytes=52428800
Jul 12 18:48:58 mail dovecot: lmtp(24483): Debug: none: root=, index=, indexpvt=, control=, inbox=, alt=
Jul 12 18:48:58 mail dovecot: lmtp(24483): Connect from local
Jul 12 18:48:58 mail dovecot: auth: Debug: master in: USER#011104#[email protected]#011service=lmtp
Jul 12 18:48:58 mail dovecot: auth-worker(15471): Debug: sql([email protected]): SELECT CONCAT('/home/vmail/',CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1))) AS home, 5000 AS uid, 5000 AS gid, concat('*:bytes=', quota) AS quota_rule FROM users WHERE email='[email protected]'
Jul 12 18:48:58 mail dovecot: auth: Debug: userdb out: USER#011104#[email protected]#011home=/home/vmail/mydomain.com/user#011uid=5000#011gid=5000#011quota_rule=*:bytes=102400
Jul 12 18:48:58 mail dovecot: lmtp([email protected]): Debug: auth input: [email protected] home=/home/vmail/mydomain.com/user uid=5000 gid=5000 quota_rule=*:bytes=102400
Jul 12 18:48:58 mail dovecot: lmtp([email protected]): Debug: Added userdb setting: plugin/quota_rule=*:bytes=102400
Jul 12 18:48:58 mail dovecot: lmtp(24483, [email protected]): Debug: Effective uid=5000, gid=5000, home=/home/vmail/mydomain.com/user
Jul 12 18:48:58 mail dovecot: lmtp(24483, [email protected]): Debug: Quota root: name=User quota backend=maildir args=
Jul 12 18:48:58 mail dovecot: lmtp(24483, [email protected]): Debug: Quota rule: root=User quota mailbox=* bytes=102400 messages=0
Jul 12 18:48:58 mail dovecot: lmtp(24483, [email protected]): Debug: Quota rule: root=User quota mailbox=Trash bytes=+104857600 messages=0
Jul 12 18:48:58 mail dovecot: lmtp(24483, [email protected]): Debug: Quota rule: root=User quota mailbox=Sent bytes=+104857600 messages=0
Jul 12 18:48:58 mail dovecot: lmtp(24483, [email protected]): Debug: Quota warning: bytes=97280 (95%) messages=0 reverse=no command=quota-warning 95 [email protected]
Jul 12 18:48:58 mail dovecot: lmtp(24483, [email protected]): Debug: Quota warning: bytes=81920 (80%) messages=0 reverse=no command=quota-warning 80 [email protected]
Jul 12 18:48:58 mail dovecot: lmtp(24483, [email protected]): Debug: Quota grace: root=User quota bytes=52428800
Jul 12 18:48:58 mail dovecot: lmtp(24483, [email protected]): Debug: Namespace inbox: type=private, prefix=, sep=, inbox=yes, hidden=no, list=yes, subscriptions=yes location=maildir:/home/vmail/mydomain.com/user
Jul 12 18:48:58 mail dovecot: lmtp(24483, [email protected]): Debug: maildir++: root=/home/vmail/mydomain.com/user, index=, indexpvt=, control=, inbox=/home/vmail/mydomain.com/user, alt=
Jul 12 18:48:58 mail dovecot: lmtp(24483, [email protected]): Debug: quota: quota_over_flag check: STORAGE ret=1 value=101 limit=100
Jul 12 18:48:58 mail dovecot: lmtp(24483, [email protected]): Debug: quota: quota_over_flag check: MESSAGE ret=0 value=99 limit=0
Jul 12 18:48:58 mail dovecot: lmtp(24483, [email protected]): Debug: quota: quota_over_flag=0((null)) vs currently overquota=1
Jul 12 18:48:58 mail dovecot: lmtp(24483, [email protected]): Debug: quota: Executing warning: quota-warning mismatch [email protected]
Jul 12 18:48:58 mail dovecot: lmtp([email protected]): 4GRuG8FuZlmjXwAAPxyzFw: msgid=<[email protected]>: save failed to INBOX: Quota exceeded (mailbox for user is full)
MohammedSimba
fuente

Respuestas:

3

Dovecot grace_quotano funciona como lo espera. Del manual de Dovecot sobre la cuota :

Con v2.2 + por defecto, el último correo puede llevar al usuario por encima de la cuota. Esto es útil para permitir que el usuario supere la cuota sin ambigüedades en lugar de fallar algunos de los últimos correos más grandes y pasar algunos correos más pequeños. Por supuesto, el último correo no debe permitir que el usuario supere enormemente la cuota, por lo que, por defecto, en v2.2 + este límite es el 10% del límite de la cuota del usuario. (En v2.1 esto está deshabilitado por defecto).

En otras palabras, quota_graceevita una situación confusa en la que un correo (grande) se rechaza porque el correo excede la cuota del usuario, pero luego los correos más nuevos (y más pequeños) se entregan con éxito (ya que todavía se ajustan a la cuota del usuario). Con quota_grace, Dovecot permite que se entregue este último correo grande, pero luego bloquea más correos ya que el usuario está más allá del 100% del uso de la cuota.

Dovecot no conoce una característica como la que está buscando, mientras que simplemente puede enviar correos con valores de uso de cuota cambiados (por ejemplo, enviar "usó el 100% de su cuota" aunque el usuario todavía está al 90% y ajustar el límite real correspondiente), la cuota real todavía se transmite a través de IMAP para clientes de correo que muestran el uso de su cuota.

Jens Erat
fuente
Muchas gracias :), eso es exactamente lo que estaba malentendiendo, pensé que actuaría como el escenario que mencioné,
MohammedSimba