Tabela de Conteúdos

Página desactualizada Esta página contém uma versão anterior deste guia que pode estar desatualizada. Para a consultar a versão mais recente clique aqui.

5.1.2 Quotas

Objectivo

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 para reportar informações sobre as quotas, usando o protocolo imap.

Toda a configuração é efectuada no ficheiro de configuração /etc/dovecot/dovecot.conf:

/etc/dovecot/dovecot.conf
# [...]

##
## IMAP specific settings
##

protocol imap {
  # Login executable location.
  #login_executable = /usr/lib/dovecot/imap-login

  # IMAP executable location. Changing this allows you to execute other
  # binaries before the imap process is executed.
  #
  # This would write rawlogs into user's ~/dovecot.rawlog/, if it exists:
  #   mail_executable = /usr/lib/dovecot/rawlog /usr/lib/dovecot/imap
  # </usr/doc/dovecot-common/wiki/Debugging.Rawlog.txt>
  #
  # This would attach gdb into the imap process and write backtraces into
  # /tmp/gdbhelper.* files:
  #   mail_executable = /usr/lib/dovecot/gdbhelper /usr/lib/dovecot/imap
  #
  #mail_executable = /usr/lib/dovecot/imap

  # Maximum IMAP command line length in bytes. Some clients generate very long
  # command lines with huge mailboxes, so you may need to raise this if you get
  # "Too long argument" or "IMAP command line too large" errors often.
  #imap_max_line_length = 65536

  # Maximum number of IMAP connections allowed for a user from each IP address.
  # NOTE: The username is compared case-sensitively.
  #mail_max_userip_connections = 10

  # Support for dynamically loadable plugins. mail_plugins is a space separated
  # list of plugins to load.
  #mail_plugins =

  mail_plugins = quota imap_quota

  #mail_plugin_dir = /usr/lib/dovecot/modules/imap

# [...]

Em seguida são definidos o tipo e os valores da quota. Neste exemplo é imposto um limite de 20Mb de armazenamento na maildir de cada utilizador.

A configuração é também guardada em /etc/dovecot/dovecot.conf.

/etc/dovecot/dovecot.conf
# [...]

##
## Plugin settings
##

plugin {
  # Here you can give some extra environment variables to mail processes.
  # This is mostly meant for passing parameters to plugins. %variable
  # expansion is done for all values.

  # Quota plugin. 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
  #
  # Quota limits are set using "quota_rule" parameters, either in here or in
  # userdb. It's also possible to give mailbox-specific limits, for example:
  #   quota_rule = *:storage=1048576
  #   quota_rule2 = Trash:storage=102400
  # User has now 1GB quota, but when saving to Trash mailbox the user gets
  # additional 100MB.
  #
  # Multiple quota roots are also possible, for example:
  #   quota = dict:user::proxy::quota
  #   quota2 = dict:domain:%d:proxy::quota_domain
  #   quota_rule = *:storage=102400
  #   quota2_rule = *:storage=1048576
  # Gives each user their own 100MB quota and one shared 1GB quota within
  # the domain.
  #
  # You can execute a given command when user exceeds a specified quota limit.
  # Each quota root has separate limits. Only the command for the first
  # exceeded limit is excecuted, so put the highest limit first.
  # Note that % needs to be escaped as %%, otherwise "% " expands to empty.
  #   quota_warning = storage=95%% /usr/local/bin/quota-warning.sh 95
  #   quota_warning2 = storage=80%% /usr/local/bin/quota-warning.sh 80
  #quota = maildir

  quota = maildir
  quota_rule = *:storage=20M

# [...]

Finalmente, reiniciar o servidor:

root@server:~# /etc/init.d/dovecot restart

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 STARTTLS AUTH=PLAIN] Dovecot ready.
a001 capability
  * CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT IDLE CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS QUOTA STARTTLS AUTH=PLAIN
a001 OK Capability completed.
a002 logout
  * BYE Logging out
a002 OK Logout completed.
Connection closed by foreign host.

A resposta ao comando capability 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 directamente, 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