Ferramentas de Usuário

Ferramentas de Site


pt:stretch:email:imap:dovecot_quota

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

Sugestão

É 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:

Informação do estado das quotas no Thunderbird

Atenção

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”.

Referências

pt/stretch/email/imap/dovecot_quota.txt · Última modificação em: 2024-02-15 01:05 por 127.0.0.1

Excepto menção em contrário, o conteúdo neste wiki está sob a seguinte licença: CC Attribution-Noncommercial-Share Alike 4.0 International
CC Attribution-Noncommercial-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki