Tabela de Conteúdos
5.1.2 Quotas
Estabelecer um limite à capacidade de armazenamento de e-mails no servidor IMAP.
Dada a especificidade do nosso servidor, o sistema de quotas será implementado tendo em atenção o seguinte:
- Como o nosso servidor apenas disponibiliza o protocolo imap, apenas será implementado o sistema de quotas associado a este protocolo.
(No entanto, o dovecot também suporta quotas no protocolo pop3) - A limitação da quota terá como base o espaço em disco.
(No entanto, o sistema de quotas no dovecot aceita como limites uma quantidade de mensagens) - A limitação aplica-se a todos os utilizadores por igual.
(Embora o dovecot suporte definição de quotas por utilizador)
Configuração
A implementação do sistema de quotas no dovecot é feita por plugins. Basta activar esse plugins e configurar as suas opções.
São necessários 2 plugins:
- quota: implementa todo o sistema de gestão de quotas;
- imap_quota: usado pelo protocolo imap para reportar informações sobre as quotas.
Toda a configuração será guardada em diferentes ficheiros na diretoria /etc/dovecot/conf.d. Cada ficheiro de configuração é responsável por uma funcionalidade do dovecot.
Em primeiro lugar, o plugin quota é adicionada à lista de plugins utilizados:
# [...] # Space separated list of plugins to load for all services. Plugins specific to # IMAP, LDA, etc. are added to this list in their own .conf files. #mail_plugins = mail_plugins = $mail_plugins quota # [...]
Em seguida é declarado o plugin imap_quota.
# [...] protocol imap { # Space separated list of plugins to load (default is global mail_plugins). #mail_plugins = $mail_plugins mail_plugins = $mail_plugins imap_quota # [...] } # [...]
Em seguida, são definidos valores limites da quota e o tipo (backends). Neste exemplo é imposto um limite de 20Gb de armazenamento na maildir de cada utilizador.
A configuração é também guardada em /etc/dovecot/local.conf.
# [...] ## ## Quota limits ## # Quota limits are set using "quota_rule" parameters. To get per-user quota # limits, you can set/override them by returning "quota_rule" extra field # from userdb. It's also possible to give mailbox-specific limits, for example # to give additional 100 MB when saving to Trash: plugin { #quota_rule = *:storage=1G quota_rule = *:storage=20G quota_rule2 = Trash:storage=+100M # [...] } # [...] ## ## Quota backends ## # Multiple backends are supported: # dirsize: Find and sum all the files found from mail directory. # Extremely SLOW with Maildir. It'll eat your CPU and disk I/O. # dict: Keep quota stored in dictionary (eg. SQL) # maildir: Maildir++ quota # fs: Read-only support for filesystem quota plugin { #quota = dirsize:User quota #quota = maildir:User quota #quota = dict:User quota::proxy::quota #quota = fs:User quota quota = maildir }
A nova configuração pode ser verificada com o comando dovecot -n
:
root@server:~# dovecot -n # 2.2.27 (c0f36b0): /etc/dovecot/dovecot.conf # Pigeonhole version 0.4.16 (fed8554) # OS: Linux 4.9.0-3-amd64 x86_64 Debian 9.0 auth_mechanisms = plain login mail_location = maildir:~/Maildir mail_plugins = " quota" namespace inbox { inbox = yes location = mailbox Drafts { special_use = \Drafts } mailbox Junk { special_use = \Junk } mailbox Sent { special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } mailbox Trash { special_use = \Trash } prefix = } passdb { driver = pam } plugin { quota = maildir quota_rule = *:storage=20G quota_rule2 = Trash:storage=+100M } protocols = " imap" ssl = required ssl_cert = </etc/ssl/certs/server.crt ssl_key = # hidden, use -P to show it userdb { driver = passwd } protocol imap { mail_max_userip_connections = 20 mail_plugins = " quota imap_quota" }
Finalmente, devemos reiniciar o servidor:
root@server:~# systemctl restart dovecot
É possível recalcular as quotas das caixas de correio com o comando doveadm quota recalc
:
- Para um utilizador:
doveadm quota recalc -u <utilizador>
- Para todos os utilizadores:
doveadm quota recalc -A
Verificação
Verificar que o serviço IMAP suporta quotas:
root@server:~# telnet 127.0.0.1 imap Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN] Dovecot ready. a001 login fribeiro MyPassword a001 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE QUOTA] Logged in a002 logout * BYE Logging out a002 OK Logout completed (0.000 + 0.000 secs). Connection closed by foreign host.
A resposta ao comando login
deverá assinalar que o serviço suporta quotas.
Clientes
A maior parte dos clientes e-mail actuais podem fornecer ao utilizador informações sobre quotas. No caso do thunderbird, esse suporte é fornecido por add-ons, bastando fazer uma pesquisa por “quotas” no sítio https://addons.mozilla.org/thunderbird.
Após instalação, é possível obter informações acerca do estado da caixa de correio em relação ao limite imposto pelas quotas:
Em muitos clientes, apagar um e-mail implica uma cópia para a pasta “Trash” antes de apagar o original. Se a cota já tiver sido ultrapassada, esta operação poderá ser negada com um erro “Quota Excedida”. Neste caso, a mensagem deve ser apagada diretamente, e não enviada para o “Trash”. No thunderbird, as teclas Shift + Del permitem apagar uma mensagem sem a enviar para o “Trash”.