Grace_quota от Dovecot не работает

805
MohammedSimba

Мой почтовый сервер работает на:

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

Я настроил квоту каждого пользователя для чтения из таблицы пользователей почтовой базы данных из столбца quota:

голубятня-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'; 

И я сделал следующую конфигурацию, чтобы включить предупреждения о квотах на 80% и 95%, и чтобы льготная квота составляла 10% и максимум 50 МБ для каждого пользователя,

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 } 

Предупреждающие сообщения работают правильно, но как только пользователь достигает размера квоты «101%», он отклоняет любые новые сообщения с сообщением об ошибке «Превышена квота» отправителю без применения настройки льготной квоты,

В журнале режима отладки я получил:

Jul 12 18:48:57 mail postfix/smtp[23827]: 22A7FE884: to=<user@mydomain.com>, 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=<vmail@mail.mydomain.com> 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=<20170712184857.5C653E898@mail.mydomain.com> Jul 12 18:48:57 mail postfix/qmgr[25020]: 5C653E898: from=<vmail@mail.mydomain.com>, 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=<20170712184840.D489CE885@mail.mydomain.com> Jul 12 18:48:58 mail postfix/qmgr[25020]: 389E6D627: from=<vmail@mail.mydomain.com>, 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#011user@mydomain.com#011service=lmtp Jul 12 18:48:58 mail dovecot: auth-worker(15471): Debug: sql(user@mydomain.com): 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='user@mydomain.com' Jul 12 18:48:58 mail dovecot: auth: Debug: userdb out: USER#011104#011user@mydomain.com#011home=/home/vmail/mydomain.com/user#011uid=5000#011gid=5000#011quota_rule=*:bytes=102400 Jul 12 18:48:58 mail dovecot: lmtp(user@mydomain.com): Debug: auth input: user@mydomain.com home=/home/vmail/mydomain.com/user uid=5000 gid=5000 quota_rule=*:bytes=102400 Jul 12 18:48:58 mail dovecot: lmtp(user@mydomain.com): Debug: Added userdb setting: plugin/quota_rule=*:bytes=102400 Jul 12 18:48:58 mail dovecot: lmtp(24483, user@mydomain.com): Debug: Effective uid=5000, gid=5000, home=/home/vmail/mydomain.com/user Jul 12 18:48:58 mail dovecot: lmtp(24483, user@mydomain.com): Debug: Quota root: name=User quota backend=maildir args= Jul 12 18:48:58 mail dovecot: lmtp(24483, user@mydomain.com): Debug: Quota rule: root=User quota mailbox=* bytes=102400 messages=0 Jul 12 18:48:58 mail dovecot: lmtp(24483, user@mydomain.com): Debug: Quota rule: root=User quota mailbox=Trash bytes=+104857600 messages=0 Jul 12 18:48:58 mail dovecot: lmtp(24483, user@mydomain.com): Debug: Quota rule: root=User quota mailbox=Sent bytes=+104857600 messages=0 Jul 12 18:48:58 mail dovecot: lmtp(24483, user@mydomain.com): Debug: Quota warning: bytes=97280 (95%) messages=0 reverse=no command=quota-warning 95 user@mydomain.com Jul 12 18:48:58 mail dovecot: lmtp(24483, user@mydomain.com): Debug: Quota warning: bytes=81920 (80%) messages=0 reverse=no command=quota-warning 80 user@mydomain.com Jul 12 18:48:58 mail dovecot: lmtp(24483, user@mydomain.com): Debug: Quota grace: root=User quota bytes=52428800 Jul 12 18:48:58 mail dovecot: lmtp(24483, user@mydomain.com): 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, user@mydomain.com): 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, user@mydomain.com): Debug: quota: quota_over_flag check: STORAGE ret=1 value=101 limit=100 Jul 12 18:48:58 mail dovecot: lmtp(24483, user@mydomain.com): Debug: quota: quota_over_flag check: MESSAGE ret=0 value=99 limit=0 Jul 12 18:48:58 mail dovecot: lmtp(24483, user@mydomain.com): Debug: quota: quota_over_flag=0((null)) vs currently overquota=1 Jul 12 18:48:58 mail dovecot: lmtp(24483, user@mydomain.com): Debug: quota: Executing warning: quota-warning mismatch user@mydomain.com Jul 12 18:48:58 mail dovecot: lmtp(user@mydomain.com): 4GRuG8FuZlmjXwAAPxyzFw: msgid=<20170712184840.D489CE885@mail.mydomain.com>: save failed to INBOX: Quota exceeded (mailbox for user is full) 
1

1 ответ на вопрос

3
Jens Erat

Dovecot's grace_quotaне работает, как вы ожидаете. Из руководства Dovecot по квоте :

С v2.2 + по умолчанию последнее письмо может принести пользователю сверх квоты. Это полезно, чтобы позволить пользователю однозначно превышать квоту, вместо того чтобы проваливать некоторые из последних больших писем и проходить через несколько меньших писем. Конечно, нельзя допустить, чтобы последнее письмо приводило к чрезмерному превышению квоты пользователем, поэтому по умолчанию в v2.2 + это ограничение составляет 10% от предела квоты пользователя. (В версии 2.1 это отключено по умолчанию.)

Другими словами, quota_graceпредотвращает запутанную ситуацию, когда (большое) письмо отклоняется, потому что оно превышает квоту пользователя, но затем новые (и меньшие) письма доставляются успешно (так как они все еще вписываются в квоту пользователя). Благодаря quota_graceDovecot эта последняя большая почта может быть доставлена, но затем блокируется дальнейшая почта, поскольку пользователь превышает 100% квоты.

Dovecot не знает функции, которую вы ищете, в то время как вы могли бы просто отправлять письма со смещенными значениями использования квоты (например, отправлять «вы использовали 100% вашей квоты», хотя пользователь на самом деле все еще находится на уровне 90%, и настроить соответственно, фактический лимит), фактическая квота по-прежнему передается через IMAP для почтовых клиентов, которые отображают использование вашей квоты.

Большое спасибо :), это именно то, что я неправильно понял, я думал, что это будет действовать как сценарий, который я упомянул, MohammedSimba 6 лет назад 0

Похожие вопросы