Я пытаюсь настроить квоты в Голубятне. В настоящее время Постфикс работает вместе с Голубятней и postfixadmin на Debian Jessie.
Проблема, которую я имею, состоит в том, что квоты не применяются, ни повторно вычисляются. Даже если я превышаю квоту на 300% или больше, письма все еще поставляются. Также, когда новая почта получена значение в соответствующей таблице quota2
никогда не обновляется.
Вот то, что я сделал до сих пор:
Я отредактировал мой /etc/dovecot/dovecot.conf
для включения квот (хорошо, по крайней мере, я думаю, что сделал так):
# 2.1.7: /etc/dovecot/dovecot.conf # OS: Linux 3.2.0-4-amd64 x86_64 Debian 7.1 # Enable the quota plugin mail_plugins = $mail_plugins quota auth_mechanisms = plain login log_timestamp = "%Y-%m-%d %H:%M:%S " # We need more than 10 connections per ip mail_max_userip_connections = 20 # Enable only imap protocols = imap # Certificates ssl_cert=</etc/ssl/localcerts/mailserver.crt ssl_key=</etc/ssl/localcerts/mailserver.key passdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } userdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } service auth { unix_listener /var/spool/postfix/private/auth_dovecot { group = postfix mode = 0660 user = postfix } unix_listener auth-master { mode = 0600 user = vmail } user = root } # Enable the dict stuff for quotas service dict { unix_listener dict { mode = 0600 user = vmail } } # Enable imap_quota protocol imap { mail_plugins = quota imap_quota } plugin { # Using SQL Tables to store current quota size quota_grace = 10M quota = dict:User quota::proxy::sqluserquota quota_exceeded_message = Sorry, the mailbox of %u has exceeded the limit. } auth_debug = yes auth_debug_passwords = yes auth_verbose = yes mail_debug = yes dict { sqluserquota = mysql:/etc/dovecot/dovecot-dict-sql-user.conf } protocol pop3 { pop3_uidl_format = %08Xu%08Xv } protocol lda { mail_plugins = quota 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 = username value_field = bytes } map { pattern = priv/quota/messages table = quota2 username_field = username value_field = messages }
И запросы для почтовых ящиков и паролей в файле /etc/dovecot/dovecot-mysql.conf
содержите:
driver = 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 quota recalc -u user@domain root@zame:/etc/dovecot# doveadm quota get -u user@domain Quota name Type Value Limit % User quota STORAGE 37091 10000 370 User quota MESSAGE 126 - 0
Если я включаю Display Quota
Плагин в Thunderbird, Thunderbird также сообщает об использовании 371% квоты. Таким образом, чтение текущих значений от базы данных, кажется, работает.
Но если я отправляю почту в тот почтовый ящик (где квота превышена на 370%), почта все еще поставляется.
Журнал в /var/log/mail.log
показывает следующее во время входа в систему (если я только запускаю тандерберд):
Aug 21 17:27:01 zame dovecot: auth: Debug: Loading modules from directory: /usr/lib/dovecot/modules/auth Aug 21 17:27:01 zame dovecot: auth: Debug: Module loaded: /usr/lib/dovecot/modules/auth/libdriver_mysql.so Aug 21 17:27:01 zame dovecot: auth: Debug: Read auth token secret from /var/run/dovecot/auth-token-secret.dat Aug 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 Aug 21 17:27:01 zame dovecot: auth: Debug: client in: CONT#0111#011AGVnQHphbWUuY2gANHBsVVRPX25pdW0= (previous base64 data may contain sensitive data) Aug 21 17:27:01 zame dovecot: auth-worker(22905): Debug: Loading modules from directory: /usr/lib/dovecot/modules/auth Aug 21 17:27:01 zame dovecot: auth-worker(22905): Debug: Module loaded: /usr/lib/dovecot/modules/auth/libdriver_mysql.so Aug 21 17:27:01 zame dovecot: auth-worker(22905): Debug: sql(eg@domain,84.74.156.64): query: SELECT CONCAT('*:bytes=', quota) AS userdb_quota_rule, password FROM mailbox 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 Aug 21 17:27:01 zame dovecot: auth-worker(22905): Debug: sql(eg@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: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 Aug 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= Aug 21 17:27:01 zame dovecot: imap: Debug: Loading modules from directory: /usr/lib/dovecot/modules Aug 21 17:27:01 zame dovecot: imap: Debug: Module loaded: /usr/lib/dovecot/modules/lib10_quota_plugin.so Aug 21 17:27:01 zame dovecot: imap: Debug: Module loaded: /usr/lib/dovecot/modules/lib11_imap_quota_plugin.so Aug 21 17:27:01 zame dovecot: imap: Debug: Added userdb setting: mail=maildir:/var/vmail/domain/eg/ Aug 21 17:27:01 zame dovecot: imap: Debug: Added userdb setting: plugin/quota_rule=*:bytes=10240000 Aug 21 17:27:01 zame dovecot: imap(eg@domain): Debug: Effective uid=5000, gid=5000, home= Aug 21 17:27:01 zame dovecot: imap(eg@domain): Debug: Quota root: name=User quota backend=dict args=:proxy::sqluserquota Aug 21 17:27:01 zame dovecot: imap(eg@domain): Debug: Quota rule: root=User quota mailbox=* bytes=10240000 messages=0 Aug 21 17:27:01 zame dovecot: imap(eg@domain): Debug: Quota grace: root=User quota bytes=10485760 Aug 21 17:27:01 zame dovecot: imap(eg@domain): Debug: dict quota: user=eg@domain, uri=proxy::sqluserquota, noenforcing=0 Aug 21 17:27:01 zame dovecot: imap(eg@domain): Debug: maildir++: root=/var/vmail/domain/eg, index=, indexpvt=, control=, inbox=/var/vmail/domain/eg, alt= Aug 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 Aug 21 17:27:14 zame dovecot: auth: Debug: client in: CONT#0111#011AGVnQHphbWUuY2gANHBsVVRPX25pdW0= (previous base64 data may contain sensitive data) Aug 21 17:27:14 zame dovecot: auth-worker(22905): Debug: sql(eg@domain,84.74.156.64): query: SELECT CONCAT('*:bytes=', quota) AS userdb_quota_rule, password FROM mailbox 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 Aug 21 17:27:14 zame dovecot: auth-worker(22905): Debug: sql(eg@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 Aug 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= Aug 21 17:27:14 zame dovecot: imap: Debug: Loading modules from directory: /usr/lib/dovecot/modules Aug 21 17:27:14 zame dovecot: imap: Debug: Module loaded: /usr/lib/dovecot/modules/lib10_quota_plugin.so Aug 21 17:27:14 zame dovecot: imap: Debug: Module loaded: /usr/lib/dovecot/modules/lib11_imap_quota_plugin.so Aug 21 17:27:14 zame dovecot: imap: Debug: Added userdb setting: mail=maildir:/var/vmail/domain/eg/ Aug 21 17:27:14 zame dovecot: imap: Debug: Added userdb setting: plugin/quota_rule=*:bytes=10240000 Aug 21 17:27:14 zame dovecot: imap(eg@domain): Debug: Effective uid=5000, gid=5000, home= Aug 21 17:27:14 zame dovecot: imap(eg@domain): Debug: Quota root: name=User quota backend=dict args=:proxy::sqluserquota Aug 21 17:27:14 zame dovecot: imap(eg@domain): Debug: Quota rule: root=User quota mailbox=* bytes=10240000 messages=0 Aug 21 17:27:14 zame dovecot: imap(eg@domain): Debug: Quota grace: root=User quota bytes=10485760 Aug 21 17:27:14 zame dovecot: imap(eg@domain): Debug: dict quota: user=eg@domain, uri=proxy::sqluserquota, noenforcing=0 Aug 21 17:27:14 zame dovecot: imap(eg@domain): Debug: maildir++: root=/var/vmail/domain/eg, index=, indexpvt=, control=, inbox=/var/vmail/domain/eg, alt=
И следующее, в то время как почта получена (для пользователя, где квота превышена):
Aug 21 17:31:50 zame postfix/smtpd[22964]: connect from mout.gmx.net[212.227.15.19] Aug 21 17:31:50 zame dovecot: auth: Debug: Loading modules from directory: /usr/lib/dovecot/modules/auth Aug 21 17:31:50 zame dovecot: auth: Debug: Module loaded: /usr/lib/dovecot/modules/auth/libdriver_mysql.so Aug 21 17:31:50 zame dovecot: auth: Debug: Read auth token secret from /var/run/dovecot/auth-token-secret.dat Aug 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= Aug 21 17:31:50 zame postfix/qmgr[22288]: CB20237236F: from=, size=2826, nrcpt=1 (queue active) Aug 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 to maildir) Aug 21 17:31:50 zame postfix/qmgr[22288]: CB20237236F: removed Aug 21 17:31:50 zame postfix/smtpd[22964]: disconnect from mout.gmx.net[212.227.15.19]
Как упомянуто прежде, значение столбца bytes
не становится обновленным в таблице quotas2
.
Так, я так или иначе отсутствую, как связать голубятню, чтобы принять во внимание квоты и обновить их, когда она пытается поставить почту одному из почтовых ящиков в /var/vmail/
.
Я радовался бы за любые подсказки.
Для полноты вот вывод dovecot -n
:
# 2.2.13: /etc/dovecot/dovecot.conf # OS: Linux 3.2.0-4-amd64 x86_64 Debian 8.1 auth_debug = yes auth_debug_passwords = yes auth_mechanisms = plain login auth_verbose = yes dict { sqluserquota = mysql:/etc/dovecot/dovecot-dict-sql-user.conf } log_timestamp = "%Y-%m-%d %H:%M:%S " mail_debug = yes mail_max_userip_connections = 20 mail_plugins = " quota" passdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } plugin { quota = dict:User quota::proxy::sqluserquota quota_exceeded_message = Sorry, the mailbox of %u has exceeded the limit. quota_grace = 10M } protocols = imap service auth { unix_listener /var/spool/postfix/private/auth_dovecot { group = postfix mode = 0660 user = postfix } unix_listener auth-master { mode = 0600 user = vmail } user = root } service dict { unix_listener dict { mode = 0600 user = vmail } } ssl_cert = </etc/ssl/localcerts/mailserver.crt ssl_key = </etc/ssl/localcerts/mailserver.key userdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } protocol imap { mail_plugins = quota imap_quota } protocol pop3 { pop3_uidl_format = %08Xu%08Xv } protocol lda { auth_socket_path = /var/run/dovecot/auth-master mail_plugins = quota postmaster_address = admin@domain }
Править: Его получение, более сбивающее с толку, если я смотрю на таблицу quota2
больше подробно:
Если я отправляю почту от учетной записи, где квоты включены (использование Thunderbird или Squirrelmail), я могу на самом деле видеть что значение bytes
в quota2
увеличивается. Я думаю, что это должно произойти из-за копирования сообщения в отправленную папку.
Кажется, что к квоте просто не относятся входящая корреспонденция?
Хорошо, после некоторых дополнительных исследований я нашел решение: Проблема была внутри конфигурации постфикса, а не голубятни!
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)
Обратите внимание на relay = dovecot
.