Skip to main content


Introdução ao Dovecot


O Dovecot é um Mail Delivery Agent (MDA) de código aberto desenvolvido para sistemas Linux/UNIX que trabalha com IMAP e POP3. Ele foi projetado para ser seguro, eficiente e altamente configurável. Criado por Timo Sirainen, seu desenvolvimento começou devido à insatisfação com outras soluções disponíveis na época. Ele se destaca pela sua facilidade de configuração, suporte a múltiplos formatos de armazenamento de e-mails (como Maildir e mdbox), compatibilidade com autenticação segura e recursos avançados como clustering e replicação.


O protocolo SMTP (Simple Mail Transfer Protocol) não é utilizado para receber e-mails; sua função é exclusivamente enviar e rotear mensagens entre servidores e clientes. Para o recebimento e acesso aos e-mails, entra o Dovecot, que utiliza protocolos como:

  • POP3 (Post Office Protocol 3): Baixa as mensagens do servidor para o cliente e, geralmente, as remove do servidor.
  • IMAP (Internet Message Access Protocol): Permite acessar e gerenciar e-mails diretamente no servidor sem baixá-los localmente.

O fluxo do e-mail foi explicado na seção do Postfix, mas, de forma bem simplificada, funciona da seguinte maneira:

  • Envio (SMTP)
    O cliente de e-mail usa SMTP para enviar a mensagem ao servidor de e-mail de saída, conhecido como MTA.

  • Transferência entre servidores (SMTP)
    O servidor SMTP de origem (MTA) encaminha a mensagem ao servidor SMTP do destinatário (outro servidor MTA).

  • Recebimento (IMAP/POP3)
    O destinatário usa IMAP ou POP3 para acessar e-mails armazenados no servidor (MTA).



Post Office Protocol v3 - POP3


O POP3 é um protocolo simples projetado para baixar e-mails do servidor para um cliente de e-mail. Ele usa a porta 110 para conexões não criptografadas e 995 para conexões seguras via SSL/TLS. Diferente do IMAP, que mantém as mensagens no servidor, o POP3 geralmente apaga os e-mails do servidor após o download. Isso torna o protocolo útil para quem deseja manter seus e-mails armazenados localmente e liberar espaço no servidor.


O POP3 funciona da seguinte maneira:

  1. O cliente de e-mail se conecta ao servidor POP3 na porta 110 (ou 995 com SSL/TLS).
  2. O usuário faz login com seu nome de usuário e senha.
  3. O cliente pode listar os e-mails disponíveis e baixá-los.
  4. Por padrão, os e-mails são apagados do servidor após o download, mas alguns clientes permitem manter cópias.
  5. A conexão é encerrada com o comando QUIT.

O POP3 não permite organização de e-mails no servidor, pois trabalha apenas com a INBOX.


O POP3 oferece diversas vantagens, como a possibilidade de uso offline, permitindo que os e-mails sejam baixados e acessados sem necessidade de conexão com a internet. Além disso, contribui para a redução do uso de armazenamento no servidor, já que, após o download, as mensagens podem ser excluídas, liberando espaço. Sua baixa complexidade também é um ponto positivo, pois é um protocolo simples, fácil de configurar e amplamente compatível com a maioria dos clientes de e-mail. Por fim, o POP3 minimiza a carga no servidor, pois não exige a manutenção contínua dos e-mails no servidor nem a sincronização de pastas, resultando em menor consumo de recursos.


Apesar das vantagens, o POP3 tem limitações. Não há sincronização entre dispositivos, pois os e-mails baixados ficam apenas no aparelho original. Há risco de perda se não houver backup, já que as mensagens podem ser apagadas do servidor. Ele não permite organização em pastas no servidor, limitando-se à INBOX. Além disso, sem criptografia, as credenciais são transmitidas em texto plano, tornando essencial o uso de POP3S (SSL/TLS) na porta 995.


Alguma dicas importantes se você deseja operar com POP3:

  • Configurar backup regularmente
    Como os e-mails são baixados e apagados do servidor, é essencial ter backups automáticos.

  • Habilitar a opção "Manter cópias no servidor"
    Isso evita perda de mensagens caso precise acessá-las em outro dispositivo.

  • Usar sempre criptografia (POP3S - Porta 995)
    Para evitar vazamento de senhas e interceptação de dados.

  • Evitar em ambientes corporativos
    Empresas costumam preferir IMAP, pois permite acesso simultâneo aos e-mails de qualquer dispositivo.


Para testar um servidor POP3 via telnet, siga estes passos. No terminal, use o seguinte comando para conectar no servidor usando o telnet:

telnet mail.exemplo.com 110

Se estiver testando localmente, substitua mail.exemplo.com por localhost.


Se o servidor estiver rodando corretamente, ele responderá algo como:

+OK Dovecot ready.

Digite o comando USER seguido do nome de usuário:

USER usuario

Se for aceito, a resposta será:

+OK

Agora, insira a senha com o comando PASS:

PASS senha

Se as credenciais forem corretas:

+OK Logged in.

Para ver as mensagens na caixa de entrada, use o comando:

LIST

O servidor responderá com algo assim:

+OK 2 messages (3200 octets)
1 1500
2 1700
.

Isso significa que há 2 mensagens, a primeira com 1500 bytes e a segunda com 1700 bytes.


Para ler um e-mail, use RETR seguido do número da mensagem:

RETR 1


Internet Message Access Protocol v3 - IMAP3


O IMAP3 é um protocolo que permite o acesso a e-mails armazenados em um servidor de forma remota. Diferente do POP3, que baixa e-mails para o dispositivo local, o IMAP3 mantém os e-mails no servidor e permite a sincronização entre múltiplos dispositivos. Ele usa a porta 143 para conexões não criptografadas e 993 para conexões seguras via SSL/TLS.


O IMAP3 funciona da seguinte maneira:

  1. O cliente de e-mail se conecta ao servidor IMAP3 na porta 143 (ou 993 com SSL/TLS).
  2. O usuário faz login com suas credenciais.
  3. O cliente pode listar e visualizar e-mails diretamente no servidor, sem baixá-los permanentemente.
  4. As mensagens permanecem no servidor, permitindo acesso simultâneo de diferentes dispositivos.
  5. Alterações como leitura, exclusão ou movimentação de e-mails são sincronizadas entre todos os dispositivos conectados.

O IMAP utiliza UIDs únicos para cada e-mail, garantindo que os clientes possam sincronizar mensagens corretamente. Além disso, permite a organização em pastas, diferente do POP3.


O IMAP3 oferece diversas vantagens, sendo ideal para quem precisa de acesso a e-mails de múltiplos dispositivos, já que as mensagens permanecem no servidor e podem ser consultadas a qualquer momento. Além disso, permite uma organização avançada, com suporte a pastas e filtros, facilitando a categorização dos e-mails. Como o armazenamento é gerenciado pelo servidor, o IMAP3 não ocupa espaço no dispositivo local, garantindo que mesmo máquinas com pouco armazenamento possam acessar grandes volumes de mensagens. Outro benefício é a possibilidade de acesso offline, já que alguns clientes de e-mail permitem armazenar cópias locais para leitura e sincronizam automaticamente as alterações ao reconectar à internet.


Por outro lado, o IMAP3 também apresenta algumas desvantagens. Como os e-mails são mantidos no servidor, o uso de espaço pode crescer rapidamente, exigindo uma gestão eficiente para evitar sobrecarga. Além disso, o protocolo consome mais recursos do servidor, já que cada acesso envolve sincronização e leitura em tempo real, o que pode impactar o desempenho, especialmente em servidores com muitos usuários. Outra limitação é a dependência de conexão com a internet, pois sem acesso ao servidor os e-mails não podem ser consultados ou gerenciados. Por fim, há o risco de perda total dos e-mails caso o servidor seja comprometido e não haja backups, tornando essencial a implementação de políticas regulares de cópia de segurança.


Alguma dicas importantes se você deseja operar com IMAP3:

  • Backup regular do servidor
    Como os e-mails permanecem no servidor, um problema no servidor pode levar à perda de mensagens. Ferramentas como doveadm backup podem ser usadas para criar backups.

  • Gerenciar cotas de armazenamento
    Se muitos usuários deixarem e-mails no servidor sem exclusão, o espaço pode se esgotar rapidamente.

  • Usar criptografia (IMAPS - Porta 993)
    Para evitar vazamento de senhas e interceptação de dados.

  • Configurar sincronização offline quando necessário
    Para usuários que precisam acessar e-mails sem conexão constante.


Para testar um servidor IMAP3 via telnet, siga estes passos. No terminal, use o seguinte comando para conectar no servidor usando o telnet:

telnet mail.exemplo.com 143

Se estiver testando localmente, substitua mail.exemplo.com por localhost.


Se o servidor estiver rodando corretamente, ele responderá algo como:

* OK [CAPABILITY IMAP4rev1 ...] Dovecot ready.

No IMAP3, os comandos precisam de um identificador único para cada cliente, geralmente uma letra ou palavra (exemplo: a1). Cada novo comando enviado ao servidor deve ter um identificador único na sessão. O cliente escolhe esses identificadores arbitrariamente (exemplo: a, b, c, cmd1, xyz123, etc.), e o servidor responde usando o mesmo identificador. Isso permite que o cliente saiba exatamente a qual comando cada resposta pertence.

Digite o seguinte comando para autenticar:

a1 LOGIN usuario senha

Se o login for bem-sucedido, a resposta será:

a1 OK Logged in

Para ver as pastas de e-mail, use:

b1 LIST "" "*"

Isso mostrará algo como:

* LIST (\HasNoChildren) "." INBOX
b1 OK List completed.

Isso indica que existe apenas a INBOX disponível.


Agora, escolha a pasta que deseja acessar (exemplo: INBOX):

c1 SELECT INBOX

O servidor responderá com o número de mensagens na caixa de entrada:

* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [UIDVALIDITY 3857529045] UIDs valid
* 3 EXISTS
c1 OK [READ-WRITE] INBOX selected.

Para listar os e-mails da INBOX, use:

d1 FETCH 1:* FLAGS

Se houver mensagens, o servidor mostrará algo como:

* 1 FETCH (FLAGS (\Seen))
* 2 FETCH (FLAGS ())
* 3 FETCH (FLAGS (\Answered))
d1 OK Fetch completed.

Para visualizar o conteúdo de uma mensagem, use:

e1 FETCH 1 BODY[]

O servidor retornará o conteúdo do primeiro e-mail.



Ambiente de testes


Para efetuar alguns testes vou contar com dois servidores, um com o domínio zion.com.br e o outro com o domínio ctos.com.br. Cada servidor/domínio terá um usuário para efetuar os testes de email. O domínio zion terá o usuário chamado Bob enquanto que o domínio ctos terá o usuário chamado Jhon.


Também vou subir um servidor DNS para que possamos trabalhar a configuração de registros voltados para os servidores de email.



Configurar os registros DNS


Para que um domínio consiga enviar e receber e-mails corretamente, é necessário configurar os seguintes registros DNS:

  • MX
  • SPF
  • TXT
  • DKIM
  • DMARC
  • PTR

Na verdade apenas o registro MX deve estar registrado, mas para uma boa configuração de um servidor de email, todos esses devem ser configurados. Para um ambiente de testes, vamos configurar apenas o registro MX.


A configuração abaixo foi realizada no BIND para a zona ctos.com.br:

zona ctos.com.br
ctos.com.br.            IN      MX      10 mail.ctos.com.br.
mail.ctos.com.br. IN A 192.168.140.12

A configuração abaixo foi realizada no BIND para a zona zion.com.br:

zona zion.com.br
zion.com.br.            IN      MX      10 mail.zion.com.br.
mail.zion.com.br. IN A 192.168.140.11

Agora podemos tentar enviar email entre os domínios zion e ctos. No meu caso está funcionando, caso o seu não funcione, verifique o arquivo de log em /var/log/mail.log.



Instalando o Dovecot


A instalação manual do Dovecot via compilação geralmente não é recomendada, a menos que você queira criar trabalho desnecessário para si mesmo. Na maioria dos casos, os pacotes oficiais disponíveis nas distribuições Linux são suficientes e garantem atualizações mais simples, compatibilidade com o sistema e menor esforço de manutenção. A compilação só deve ser considerada se houver necessidade de recursos personalizados ou otimizações específicas.


O Dovecot fornece diversos pacotes pré-compilados para sistemas como Debian e Ubuntu, cada um com uma funcionalidade específica. Alguns dos principais são:


PacoteDescrição
dovecot-corePacote principal, contém os componentes essenciais do Dovecot.
dovecot-commonArquivos de configuração e scripts comuns a várias instalações.
dovecot-imapdSuporte ao protocolo IMAP.
dovecot-pop3dSuporte ao protocolo POP3.
dovecot-lmtpdImplementação do protocolo LMTP para entrega local.
dovecot-managesievedSuporte ao protocolo ManageSieve para gerenciamento de filtros de e-mail. Permite aos usuários gerenciarem seus próprios scripts Sieve remotamente via clientes compatíveis (como Roundcube ou Thunderbird com plugins).
dovecot-sieveImplementação do Sieve, usada para filtragem automática de mensagens, e normalmente apenas o administrador pode configurar regras diretamente nos arquivos do servidor.
dovecot-ldapIntegração com servidores LDAP para autenticação e gerenciamento de usuários.
dovecot-mysqlSuporte a banco de dados MySQL para autenticação e armazenamento de usuários.
dovecot-pgsqlSuporte a banco de dados PostgreSQL para autenticação e armazenamento de usuários.

Instale os pacotes necessários para subir o serviço do Dovecot servidor de email. Além dos pacotes do Dovecot, vou instalar também o Postfix.

# Instale os pacotes para trabalhar com o dovecot:
$ sudo apt-get -y install postfix dovecot-core dovecot-common dovecot-managesieved dovecot-sieve

Os arquivos do Dovecot ficam em /etc/dovecot, sendo o arquivo principal chamado de dovecot.conf.

Por padrão faça uma cópia desse arquivo porque vamos alterar ele.

$ sudo cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig

Aṕos instalar o Dovecot, podemos verificar se o mesmo está funcionando das seguintes maneiras:

# Usando o comando PS:
$ ps ax | grep dovecot
579 ? Ss 0:00 /usr/sbin/dovecot -F
749 ? S 0:00 dovecot/anvil
750 ? S 0:00 dovecot/log
751 ? S 0:00 dovecot/config

## Se o comando acima não retornar nenhuma saída, o Dovecot pode não estar rodando.

# Usando o systemd:
$ systemctl status dovecot
● dovecot.service - Dovecot IMAP/POP3 email server
Loaded: loaded (/lib/systemd/system/dovecot.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2025-02-14 19:07:07 UTC; 47min ago
Docs: man:dovecot(1)
http://wiki2.dovecot.org/
Main PID: 579 (dovecot)
Tasks: 4 (limit: 1049)
Memory: 6.6M
CGroup: /system.slice/dovecot.service
├─579 /usr/sbin/dovecot -F
├─749 dovecot/anvil
├─750 dovecot/log
└─751 dovecot/config

Feb 14 19:07:07 mail.zion.com.br systemd[1]: Started Dovecot IMAP/POP3 email server.
Feb 14 19:07:05 mail.zion.com.br dovecot[579]: master: Dovecot v2.3.7.2 (3c910f64b) starting up for sieve (core dumps disabled)

# Também podemos verificar quais portas o Dovecot está ouvindo:
$ ss -tunlp | grep dovecot
tcp LISTEN 0 100 0.0.0.0:4190 0.0.0.0:* users:(("dovecot",pid=579,fd=15))
tcp LISTEN 0 100 [::]:4190 [::]:* users:(("dovecot",pid=579,fd=16))

A porta 4190 é usada pelo Sieve (ManageSieve), um protocolo para gerenciar regras de filtragem de e-mail no Dovecot.


Por padrão ao instalar o Dovecot ele vem configurado para usar o /etc/passwd (para obter os usuários) e /etc/shadow (para obter as credenciais de acesso). Uma forma que podemos usar para validar a autenticação de usuário no Dovecot é usando o comando doveadm auth test USERNAME.

$ sudo doveadm auth test bob
Password:
passdb: bob auth succeeded
extra fields:
user=bob

# Exibir informações do userdb sobre o usuário 'vagrant' no Dovecot:
$ sudo doveadm user vagrant
field value
uid 1000
gid 1000
home /home/vagrant
mail mbox:~/mail:INBOX=/var/mail/vagrant
system_groups_user vagrant

Isso está configurado assim por causa da linha !include auth-system.conf.ext dentro de /etc/dovecot/conf.d/10-auth.conf, ela faz com que o Dovecot inclua a configuração do arquivo /etc/dovecot/conf.d/auth-system.conf.ext. Essa configuração é a seguinte:

passdb {
driver = pam
}

userdb {
driver = passwd
}

O passdb { driver = pam } faz com que o Dovecot use PAM (Pluggable Authentication Module) para validar senhas, o que permite autenticação contra /etc/shadow ou outros métodos configurados no PAM. Já o userdb { driver = passwd } faz com que o Dovecot busque as informações dos usuários no /etc/passwd para determinar diretório home, UID, GID, etc.


Anteção

A instalação do Dovecot, por si só, não faz com que o Postfix o utilize como agente de entrega, nem habilita os serviços POP3 ou IMAP. Neste estágio, o Dovecot está apenas instalado e parcialmente configurado, mas ainda não está ativo para processar a entrega de e-mails ou permitir acesso aos usuários.



Configuração do Dovecot


A configuração do Dovecot é centralizada no diretório /etc/dovecot/, onde o principal arquivo de configuração é o dovecot.conf. Esse arquivo principal referencia diversos arquivos de configuração adicionais localizados dentro do diretório /etc/dovecot/conf.d/.


Dentro de /etc/dovecot/conf.d/, os arquivos são organizados da seguinte forma:


ArquivoDescrição
10-auth.confConfiguração de autenticação.
10-mail.confConfiguração de armazenamento das caixas de e-mail.
10-master.confDefinições dos serviços e processos do Dovecot.
10-ssl.confConfiguração do SSL/TLS.
15-lda.confConfiguração do Local Delivery Agent (LDA).
20-imap.conf e 20-pop3.confDefinições específicas dos protocolos IMAP e POP3.
90-quota.conf e 90-sieve.confConfiguração de plugins de quota e filtragem de e-mails com Sieve.

Os arquivos de configuração do Dovecot possuem números no nome (por exemplo, 10-mail.conf) para controlar a ordem de carregamento. O Dovecot lê os arquivos de configuração em ordem crescente, garantindo que certos arquivos sejam processados antes de outros. Arquivos com números menores são carregados primeiro e definem as configurações básicas. Arquivos com números maiores são carregados depois, permitindo sobrescrever ou adicionar configurações extras.


Há duas abordagens principais para modificar a configuração do Dovecot:

  1. Editar diretamente os arquivos existentes dentro de /etc/dovecot/conf.d/, ativando ou modificando os parâmetros conforme necessário.
  2. Criar um arquivo separado chamado /etc/dovecot/local.conf, que é incluído automaticamente ao final da configuração, permitindo sobrescrever configurações sem alterar os arquivos originais.

Para verificar a configuração ativa do Dovecot, utilize o comando abaixo. Ele exibe apenas as configurações que foram modificadas em relação aos valores padrão, facilitando a identificação de personalizações realizadas.

doveconf -n

A partir do Dovecot 2.0, a configuração passou a utilizar seções e chaves { } para organizar os parâmetros em diferentes contextos. Isso permite que as configurações sejam agrupadas e aplicadas de maneira modular para serviços ou funcionalidades específicas. Parâmetros globais, que se aplicam a todos os serviços, podem ser definidos fora de qualquer seção:

mail_location = maildir:/var/mail/%u
auth_mechanisms = plain login

Isso significa que todos os serviços usarão maildir como formato de armazenamento e aceitarão os mecanismos de autenticação plain e login.


Cada serviço pode ter configurações próprias, agrupadas em seções com o uso de chaves:

protocol imap {
mail_plugins = imap_quota
imap_idle_notify_interval = 2 mins
}

Aqui, estamos dizendo que somente o serviço IMAP usará o plugin imap_quota e terá um intervalo de notificação IDLE de 2 minutos.



Ferramentas do Dovecot


O Dovecot oferece diversas ferramentas de gerenciamento para administração e manutenção do servidor de e-mails. As principais ferramentas incluem o doveadm e doveconf.



doveadm


O doveadm é a ferramenta principal de administração do Dovecot. Ele permite a execução de uma ampla gama de comandos para gerenciamento de usuários, mailboxes e status do servidor. Alguns exemplos de uso são:


# Verificar autenticação de um usuário:
doveadm auth test usuario@example.com

# Ver status de replicação (se ativado):
doveadm replicator status

# Mover e-mails entre pastas:
doveadm move -u usuario@example.com INBOX/Lixeira mailbox INBOX

# Expurgar e-mails marcados para exclusão:
doveadm expunge -u usuario@example.com mailbox INBOX savedbefore 30d

# Pesquisar e-mails por remetente dentro de uma mailbox:
doveadm search -u usuario@example.com mailbox INBOX FROM exemplo@dominio.com

# Contar a quantiade de email tem na INBOX:
doveadm search -u usuario@example.com mailbox INBOX | wc -l

# Listar os diretórios (pastas) do usuário:
doveadm mailbox list -u usuario@example.com

# Buscar os últimos 5 e-mails da INBOX com informações básicas:
doveadm fetch -u usuario@example.com 'mailbox uid hdr.subject date.saved' mailbox INBOX | tail -n 5
## 'mailbox', 'uid', 'hdr.subject' e 'date.saved' = Retorna o UID, assunto e a data de salvamento.

# Buscar informações dos e-mails da INBOX:
doveadm fetch -u usuario@example.com 'hdr.subject hdr.from date.saved' mailbox INBOX
## Retorna o assunto, o remetente e a data de salvamento de cada e-mail.

# Buscar os últimos 5 e-mails recebidos:
doveadm fetch -u usuario@example.com 'date.saved hdr.subject hdr.from' mailbox INBOX | tail -n 5
## Retorna os últimos 5 e-mails com informações sobre data de salvamento, assunto e remetente.

# Listar e-mails em ordem de recebimento:
doveadm fetch -u usuario@example.com 'date.received' mailbox INBOX | sort -k2 | tail -n 10

# Obter detalhes de um e-mail específico pelo UID:
doveadm fetch -u usuario@example.com 'hdr.from hdr.to hdr.subject hdr.date' mailbox INBOX uid 187
## Exibe os detalhes do e-mail com UID 187, incluindo remetente, destinatário, assunto e data.

# Obter os 'guid' e 'uid' dos emails de 'user1@example.com' que tem 'to' como 'teste@example.com':
doveadm search -u user1@example.com to teste@example.com

# Criar o novo INBOX com um nome customizado:
doveadm mailbox create -u user1@example.com -s newibox
## Cria uma nova mailbox chamada newibox para o usuário user1@example.com.
## O '-s' indica que a nova mailbox será uma pasta especial, semelhante a Sent ou Trash.

# O comando abaixo realiza a importação de e-mails de um armazenamento externo (mdbox) para a INBOX do usuário 'user1@example.com':
doveadm import -s -u user1@example.com mdbox:/tmp/email-restore/mdbox/ newibox mailbox INBOX
## 'doveadm import': Comando para importar mensagens de outro local.
## '-s': Modo "simulação" (dry-run)'.
## '-u user1@example.com': Define o usuário de destino para a importação.
## 'mdbox:/tmp/email-restore/mdbox/': Define a origem dos e-mails, ou seja, onde o backup está armazenado.
## 'newibox': Define o nome da mailbox dentro do backup que está sendo restaurado.
## 'mailbox INBOX': Indica que os e-mails importados serão restaurados para a INBOX do usuário.


# Saber onde o email abaixo foi salvo e ver o header do email 'hdr':
doveadm fetch -u user1@example.com "mailbox hdr" mailbox-guid 06as33s063f6195dbc180000faa40aaa uid 199693

# Verifica de todas as ocorrencias que forem encontradas:
doveadm search -u user1@example.com to teste@example.com |
while read guid uid; do
doveadm fetch -u user1@example.com "mailbox" mailbox-guid $guid uid $uid
done

# Ver quota:
doveadm quota get -u user1@example.com


doveconf


O doveconf é usado para visualizar e verificar a configuração ativa do Dovecot.

# Listar toda a configuração carregada:
doveconf

# Listar apenas configurações alteradas em relação ao padrão:
doveconf -n

# Ver configuração de um parâmetro específico:
doveconf mail_plugins

# Exibir configurações padrão do Dovecot:
doveconf -d

O doveadm possui dois parâmetros que são backup e sync. Eles são utilizados para fazer backup e sincronização de mailboxes entre servidores.

# Fazer backup da mailbox de um usuário para um diretório específico:
doveadm backup -u usuario@example.com maildir:/backup/usuario/

# Sincronizar mailboxes entre servidores Dovecot:
doveadm sync -u usuario@example.com remote:usuario@servidor-remoto


# Fazer um backup das mensagens do usuário 'user1' a partir de '26-May-2024' para '/tmp/user1.bkp':
doveadm sync -u user1 mdbox:/tmp/user1.bkp -t 26-May-2024

# Criar uma nova mailbox para 'user2@example.com' para importar o backup acima:
doveadm mailbox create -u user2@example.com -s user1_copy

# Importar mensagens do 'user1' para 'user2':
doveadm import -U user1@example.com -u user2@example.com all user1_copy savedafter 26-May-2024

## 'doveadm import': Copia e-mails entre caixas de correio.
## '-U user1@example.com': Usuário de origem.
## '-u user2@example.com': Usuário de destino.
## 'all': Importa mensagens de todas as pastas.
## 'user1_copy': Pasta de destino onde os e-mails serão armazenados.
## 'savedafter 26-May-2024': Apenas mensagens salvas depois de 26-May-2024 são copiadas.

# Listar os e-mails copiados para user2:
doveadm search -u user2@example.com mailbox user1_copy

## 'doveadm search': Busca mensagens na mailbox.
## '-u user2@example.com': Usuário cuja mailbox será pesquisada.
## 'mailbox user1_copy': Busca apenas na pasta user1_copy.


Logs no Dovecot


O Dovecot utiliza logs para registrar eventos do servidor, ajudando no diagnóstico de problemas, segurança e monitoramento. A configuração dos logs pode ser ajustada no arquivo 10-logging.conf.


Os logs do Dovecot normalmente são armazenados em diferentes lugares dependendo do Sistema Operacional:

  • Debian/Ubuntu: /var/log/mail.log
  • CentOS/RHEL: /var/log/maillog
  • Logs de erro específicos: /var/log/dovecot.log (se configurado)

O Dovecot pode registrar logs no syslog (que é o padrão) ou em um arquivo próprio. Para definir um log específico faça:

10-logging.conf
log_path = /var/log/dovecot.log

Para manter o padrão do sistema (syslog):

10-logging.conf
log_path = syslog

No arquivo 10-logging.conf, os seguintes parâmetros ajustam a quantidade de informações nos logs:

ConfiguraçãoDescrição
auth_verbose = yesRegistra tentativas de autenticação com mais detalhes.
auth_debug = yesAtiva logs detalhados de autenticação, útil para debug.
mail_debug = yesRegistra informações detalhadas sobre a manipulação dos e-mails.
verbose_proctitle = yesExibe informações sobre processos no ps (como usuário e IP).

Abaixo podemos ver um exemplo de tentativa de login bem-sucedida via IMAP:

Feb 20 10:35:12 server dovecot: imap-login: Login: user=<user@example.com>, method=PLAIN, rip=192.168.1.100, lip=192.168.1.1, session=<P5mC5xU+>

Abaixo podemos ver um exemplo de falha na autenticação:

Feb 20 10:36:45 server dovecot: auth: Failed login (auth failed, 3 attempts): user=<user@example.com>, rip=192.168.1.100, lip=192.168.1.1


Formato da Mailbox


Uma mailbox (caixa de correio) é um espaço de armazenamento onde os e-mails de um usuário são mantidos. O Dovecot suporta diferentes formatos de armazenamento de e-mails, cada um com características específicas que podem influenciar no desempenho, escalabilidade e manutenção do servidor de e-mail. A escolha do formato adequado depende das necessidades específicas do ambiente.


Uma Mailbox possui a seguinte estrutura padrão, principalmente no Dovecot:

  • INBOX: Pasta principal onde novos e-mails chegam.
  • Drafts: Rascunhos salvos pelo usuário.
  • Sent: Mensagens enviadas.
  • Trash: Lixeira, onde e-mails excluídos são armazenados temporariamente.
  • Junk: Pasta de spam.

Para configurar onde ficarão armazenados os email podemos fazer assim, exemplos retirados da documentação:

/etc/dovecot/conf.d/10-mail.conf
# Com mdbox:
mail_location = mdbox:/var/vmail/example.com/%n/mdbox

# Com maildir:
mail_location = maildir:~/Maildir

# Com mbox:
mail_location = mbox:~/mail:INBOX=/var/mail/%u

O ~/ em maildir e mbox representa o diretório Home do usuário. Quando configurado dessa forma, o Dovecot entende que os e-mails de cada usuário devem ser armazenados dentro do diretório pessoal dele. Já %u representa o nome completo do usuário, incluindo o domínio, se houver e %n representa apenas a parte antes do @, sem o domínio (seria o "username").


Mailbox default

Na época em que este documento foi escrito, o padrão usado pelo Dovecot 2.3.7.2 é o seguinte:


mail_location = mbox:~/mail:INBOX=/var/mail/%u


Maildir


O Maildir é um formato de armazenamento de e-mails onde cada mensagem é armazenada como um arquivo separado dentro de um diretório estruturado. Ele possui três subdiretórios principais:

  • tmp/
    Onde as mensagens são temporariamente salvas antes da entrega final.

  • new/
    Onde ficam as mensagens que ainda não foram lidas pelo usuário.

  • cur/
    Onde são armazenadas as mensagens já acessadas. Esse formato reduz o risco de corrupção de dados, pois cada e-mail é independente, facilitando backups e restaurações.


Além disso, o Maildir é eficiente para acessos simultâneos, tornando-se ideal para servidores IMAP. No entanto, ele pode gerar um grande número de arquivos pequenos, o que pode afetar o desempenho em sistemas de arquivos que lidam mal com muitos inodes.



MBOX


O mbox é um formato de armazenamento de e-mails onde todas as mensagens de uma caixa de correio são armazenadas em um único arquivo contínuo. Cada nova mensagem é anexada ao final do arquivo, e os e-mails são separados por uma linha especial começando com "From " seguida do remetente e data. Esse formato economiza espaço em disco, pois utiliza menos inodes, e é compatível com sistemas legados.


No entanto, apresenta algumas desvantagens, como maior risco de corrupção de dados, já que um problema no arquivo pode afetar todas as mensagens, além de ter desempenho inferior em caixas de correio grandes, pois a manipulação de um único arquivo torna operações de leitura, exclusão e modificação mais lentas. O mbox é um dos formatos mais comuns e, muitas vezes, o padrão. A INBOX pode ser encontrada normalmente em /var/spool/mail ou /var/mail.

Dovecot pode trabalhar com IMAP usando mbox mas isso pode e provavelmente vai se tornar um problema por causa do tamanho dos arquivos que vão crescendo e com isso vão consumindo mais I/O a medida que o arquivo cresce.



MDBOX


O mdbox é um formato de armazenamento desenvolvido pelo Dovecot que organiza múltiplas mensagens em arquivos binários maiores, em vez de armazená-las separadamente como no Maildir ou em um único arquivo contínuo como no mbox. O administrador define o tamanho que cada arquivo terá, algumas pessoas diriam que um tamanho entre 5 e 10MB é suficiente. O Dovecot vai então fechar um arquivo quando ele atingir o tamanho especificado, isso vai facilitar ao fazer o backup e une a vantagem das duas opções acima.


Esse formato melhora a eficiência do espaço em disco, reduzindo a fragmentação e permitindo compactação automática. Além disso, facilita a manutenção e a replicação de dados, sendo ideal para grandes volumes de e-mails.


O mdbox também suporta armazenamento em camadas, permitindo separar e-mails entre discos rápidos e lentos conforme a necessidade. No entanto, ele exige ferramentas do Dovecot, como doveadm, para gerenciar e recuperar mensagens, tornando a administração um pouco mais complexa em comparação a formatos tradicionais.



SDBOX


O sdbox é um formato de armazenamento do Dovecot semelhante ao mdbox, mas em vez de agrupar múltiplas mensagens em um único arquivo, ele armazena cada e-mail em um arquivo separado, como o Maildir. Isso combina a organização simplificada do Maildir com as otimizações do mdbox, oferecendo melhor gerenciamento de espaço e suporte a compactação e indexação eficientes. Ele permite recuperação mais fácil de mensagens individuais e melhora a integridade dos dados, mas, assim como o mdbox, exige ferramentas do Dovecot, como doveadm, para manutenção e recuperação, o que pode aumentar a complexidade da administração.



Espaço de nomes IMAP


O IMAP Namespace (ou Espaço de nomes IMAP no Português Brasileiro) no Dovecot define como as pastas de e-mail são organizadas e acessadas pelos clientes IMAP. Ele controla se as pastas estão dentro da INBOX ou em nível paralelo, além de definir o separador de hierarquia (. ou /).


A configuração do namespace é feita no arquivo 10-mail.conf. Um exemplo de configuração padrão seria:

namespace inbox {
type = private
separator = .
prefix = INBOX.
inbox = yes
list = yes
subscriptions = yes
}

Explicação dos parâmetros acima
  • type = private Define que o namespace pertence a um único usuário.

  • separator = . Usa ponto (.) como separador de hierarquia (por exemplo, INBOX.Pessoal).

  • prefix = INBOX. Todas as pastas IMAP serão criadas dentro da INBOX.

  • inbox = yes Define esse namespace como o que contém a INBOX.


Caso prefira um separador diferente, como /, basta alterar separator = /.


O separador de hierarquia define como as subpastas são representadas:

SeparadorExemplo de Estrutura
. (ponto)INBOX.Pessoal.Viagens
/ (barra)INBOX/Pessoal/Viagens

Se o servidor já tem dados, é recomendado manter o mesmo separador usado anteriormente para evitar problemas de compatibilidade com clientes IMAP.


Cuidado com o separador ponto .

Se usuários compartilham pastas IMAP e seus nomes de login contêm um ponto (.), o separador pode causar confusão, criando uma hierarquia indesejada no cliente de e-mail​.


Se o usuário bob@example.com compartilhar uma pasta INBOX.Personal.Vacation, o cliente pode exibi-la como:

shared
├── p
│ ├── heinlein@example
│ │ ├── com
│ │ │ ├── INBOX
│ │ │ │ ├── Personal
│ │ │ │ ├── Vacation

Isso acontece porque o nome do usuário contém pontos, e o cliente IMAP interpreta esses pontos como subpastas. Se for um novo servidor, recomendo usar separator = /, pois assim vai evitar problemas com nomes de usuários e o IMAP permite que cada servidor defina seu próprio separador, e os clientes IMAP se adaptam automaticamente​.


O prefixo define onde as pastas IMAP são criadas:

  • Pastas abaixo da INBOX (mais comum em servidores modernos)

    prefix = INBOX.

    Cria INBOX.Sent, INBOX.Drafts, etc. As pastas de e-mail (Sent, Drafts, Trash, etc.) são criadas dentro da INBOX. No cliente IMAP, todas as pastas aparecem como subpastas da INBOX.

  • Pastas no mesmo nível da INBOX

    prefix =

    Cria Sent, Drafts, Spam, separadas da INBOX. Eu particularmente gosto mais dessa abordagem.


Dovecot permite ambas as abordagens, diferente de outros servidores como Courier IMAP, que só aceita pastas dentro da INBOX.


Além do namespace privado (type = private), o Dovecot permite configurar namespaces para pastas compartilhadas entre usuários e pastas públicas. Permite que um usuário compartilhe pastas com outros usuários:

namespace {
type = shared
separator = /
prefix = shared/%%u/
location = maildir:/var/vmail/shared/%%u
subscriptions = yes
}
  • prefix = shared/%%u/: Cada usuário terá uma pasta shared/nome_do_usuario/.
  • location: Define onde as mensagens compartilhadas são armazenadas.

O Namespace Público permite a criação de pastas acessíveis a todos os usuários, útil para e-mails organizacionais:

namespace {
type = public
separator = /
prefix = Public/
location = maildir:/var/vmail/public
subscriptions = yes
}

Aqui, os e-mails ficam na pasta /var/vmail/public, acessível a todos os usuários.


Para evitar que cada cliente IMAP crie nomes diferentes para as pastas de sistema (Sent, Trash, Junk), o Dovecot segue a RFC 6154 e permite configurar nomes padronizados no arquivo 15-mailboxes.conf:

namespace inbox {
mailbox Drafts {
special_use = \Drafts
}
mailbox Junk {
special_use = \Junk
}
mailbox Trash {
special_use = \Trash
}
mailbox Sent {
special_use = \Sent
}
mailbox "Sent Messages" {
special_use = \Sent
}
}

Isso garante que os clientes IMAP reconheçam corretamente essas pastas sem criar outras duplicadas. Você pode observar que temos dois mapeamentos para Sent, isso acontece porque alguns clientes IMAP utilizam Sent, enquanto outros usam Sent Messages. O padrão RFC 6154 define \Sent como a "pasta de e-mails enviados", mas não obriga um nome específico.


Clientes como Outlook, Apple Mail e Thunderbird podem usar nomes diferentes para a pasta de enviados. Ter múltiplos mapeamentos permite que todos os clientes reconheçam a mesma pasta, evitando que criem pastas duplicadas.



Autenticação


A autenticação no Dovecot é um processo fundamental que garante o acesso seguro dos usuários às suas caixas de e-mail. Ela é composta por quatro componentes principais:

  1. Mecanismos de Autenticação (Authentication Mechanisms)
    Definem o protocolo de comunicação entre o cliente e o servidor durante o processo de autenticação. Um exemplo comum é o mecanismo PLAIN, onde o cliente envia o nome de usuário e a senha em texto claro. Para proteger essas credenciais durante a transmissão, é altamente recomendável o uso de SSL/TLS, garantindo que os dados sejam criptografados e seguros contra interceptações.

  2. Esquemas de Senha (Password Schemes)
    Referem-se ao método de armazenamento das senhas no banco de dados ou arquivos do Dovecot. As senhas podem ser armazenadas em texto claro ou utilizando hashes seguros, como PLAIN, MD5-CRYPT, SHA512-CRYPT, BLF-CRYPT e SCRAM-SHA-256.

    A escolha do esquema de senha influencia diretamente os mecanismos de autenticação disponíveis. Por exemplo, métodos de autenticação que não enviam a senha em texto claro, como CRAM-MD5 ou SCRAM-SHA-256, exigem que a senha esteja armazenada em um formato específico ou até mesmo em texto claro para que a verificação seja possível.

    Se a autenticação for feita por métodos externos como LDAP, PAM ou OAuth2, o Dovecot não precisa armazenar as senhas localmente. Nesse caso, o passdb apenas encaminha a autenticação ao serviço externo, e o esquema de armazenamento interno de senhas se torna irrelevante.

  3. Banco de Dados de Senhas (passdb)
    É o componente responsável por verificar as credenciais fornecidas pelo usuário. O Dovecot suporta diversos tipos de passdb, incluindo arquivos de senha locais, bancos de dados SQL e serviços LDAP. A escolha do passdb depende da infraestrutura e das necessidades específicas de cada implementação.

  4. Banco de Dados de Usuários (userdb)
    Após a autenticação bem-sucedida, o userdb fornece informações adicionais sobre o usuário, como o diretório home e outras configurações específicas. Assim como o passdb, o userdb pode ser configurado para obter informações de diversas fontes, garantindo flexibilidade na gestão dos dados dos usuários.


Para que a autenticação no Dovecot funcione corretamente, o servidor precisa de cinco informações essenciais para cada usuário. Essas informações garantem não apenas a validação das credenciais, mas também o correto acesso às caixas de e-mail e outros arquivos relacionados ao usuário. Essas informações são:

  • Nome de usuário
  • Senha
  • UID do usuário sob o qual os arquivos de e-mail são salvos
  • GID do usuário sob o qual os arquivos de e-mail são salvos
  • O diretório inicial do usuário onde os arquivos de e-mail, scripts Sieve e outros itens individuais são armazenados

Para configurar os mecanismos de autenticação no Dovecot, utiliza-se a diretiva auth_mechanisms no arquivo de configuração principal. Por exemplo, para habilitar os mecanismos PLAIN e LOGIN, a configuração seria:

/etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login

É importante notar que o mecanismo LOGIN é considerado obsoleto, mas ainda é necessário para compatibilidade com clientes mais antigos, como algumas versões do Outlook e dispositivos móveis da Microsoft. Para aumentar a segurança, especialmente ao utilizar mecanismos de autenticação em texto claro, é essencial implementar SSL/TLS, garantindo que as credenciais sejam transmitidas de forma segura. Além disso, o Dovecot oferece suporte a mecanismos de autenticação mais robustos, como CRAM-MD5, DIGEST-MD5 e os mais modernos SCRAM-SHA-1 e SCRAM-SHA-256, que fornecem camadas adicionais de proteção, mesmo quando a comunicação não é criptografada.


Para ambientes que utilizam diretórios corporativos, como o LDAP, o Dovecot pode ser configurado para autenticar usuários diretamente contra esses serviços, centralizando a gestão de credenciais e simplificando a administração.



Nome de Usuário na Autenticação


A opção auth_username_format no arquivo 10-auth.conf define como o Dovecot processa o nome de usuário antes de enviá-lo para autenticação. Essa configuração pode afetar diretamente a maneira como os logins são interpretados e armazenados. Abaixo segue um exemplo de uso:

/etc/dovecot/conf.d/10-auth.conf
# Força a autenticação usando o email completo (user@exemplo.com):
auth_username_format = %u

As tabela abaixo mostra as opções que podemos configurar no auth_username_format e seus significado:


OpçãoDescriçãoExemplo de EntradaResultado
%nMantém apenas a parte antes do @.bob@example.combob
%dMantém apenas a parte após o @.bob@example.comexample.com
%uMantém o endereço completo.bob@example.combob@example.com
%LnConverte a parte local para minúsculas.bob@Example.combob
%LuConverte todo o endereço para minúsculas.bob@Example.combob@example.com

Um aspecto importante da autenticação é a possibilidade de utilizar o endereço de e-mail completo como nome de usuário como mostrado acima, essa configuração pode variar de acordo com o método escolhido. Os métodos de autenticação baseados em bancos de dados, como MySQL, PostgreSQL e LDAP, permitem o uso do endereço de e-mail completo como identificador de login. Isso é especialmente útil para provedores de e-mail que gerenciam múltiplos domínios, pois possibilita a autenticação direta sem a necessidade de conversão do nome de usuário.


Apesar de ser possível usar %u para efetuar a autenticação com base no email, o mais indicado é usado %Lu, assim não importa se o endereço de email é digitado maiúsculo ou minúsculo.


Por outro lado, métodos de autenticação que utilizam arquivos tradicionais do sistema, como passwd e shadow, não suportam endereços de e-mail como login. Isso ocorre porque esses sistemas normalmente utilizam nomes de usuário exclusivos (como usuario01, usuario), e o caractere @ não é permitido nesses arquivos. Em ambientes que utilizam passwd e shadow, é comum configurar aliases de e-mail para mapear endereços de e-mail completos para nomes de usuário locais. No entanto, isso pode tornar a administração mais complexa, especialmente quando há múltiplos domínios envolvidos.



Métodos de autenticação


O Dovecot suporta vários métodos de autenticação, permitindo a validação de usuários a partir de diferentes fontes de dados. A escolha do método depende do ambiente e das necessidades de integração com outros sistemas. Cada método pode ser configurado no arquivo 10-auth.conf, e múltiplas fontes de autenticação podem ser combinadas para garantir redundância e maior segurança.


Dentro do arquivo de configuração, na seção final, encontramos uma lista de includes, que carregam configurações adicionais para a autenticação de usuários. Esses arquivos permitem personalizar o comportamento do Dovecot, ativando diferentes métodos de autenticação. Linhas que começam com #! são desabilitadas por padrão e não serão carregadas, já as linhas que começam apenas com ! estão ativas.


DiretivaDescrição
#!include auth-deny.conf.extBloqueia usuários específicos de se autenticarem. Pode ser útil para listas de exclusão.
#!include auth-master.conf.extHabilita autenticação para usuários mestres (master users), que podem acessar múltiplas contas com uma única credencial.
!include auth-system.conf.extAtivado - Utiliza a autenticação do sistema (/etc/passwd e /etc/shadow).
#!include auth-sql.conf.extAutenticação baseada em bancos de dados SQL (MySQL, PostgreSQL, SQLite).
#!include auth-ldap.conf.extAutenticação via LDAP/Active Directory, ideal para ambientes corporativos.
#!include auth-passwdfile.conf.extUtiliza um arquivo de senhas personalizado, independente do sistema.
#!include auth-checkpassword.conf.extPermite autenticação via programas externos que implementam o protocolo checkpassword.
#!include auth-vpopmail.conf.extUtiliza o Vpopmail, usado para gerenciar domínios virtuais em servidores de e-mail.
#!include auth-static.conf.extDefine autenticação estática, útil para testes ou acessos fixos sem validação de senha real.


auth-system.conf.ext


Por padrão, o arquivo auth-system.conf.ext está ativado no Dovecot e define a busca de usuários (userdb) no arquivo /etc/passwd e a verificação de senhas (passdb) via PAM, que normalmente consulta /etc/shadow. A configuração desse arquivo é a seguinte:

auth-system.conf.ext
passdb {
driver = pam
# args = dovecot
}

userdb {
driver = passwd
# args =
}

passdb: Utiliza PAM (Pluggable Authentication Module) para autenticação, que normalmente consulta /etc/shadow.
userdb: Obtém informações dos usuários diretamente do arquivo /etc/passwd.



Autenticação com passwd-file


Para quem deseja um gerenciamento de usuários simples em arquivos ASCII sem depender de /etc/passwd, o Dovecot oferece a opção passwd-file. Esse método permite armazenar credenciais separadamente em /etc/dovecot/users, sem relação com os usuários do sistema Linux. O passwd-file segue a mesma estrutura do /etc/passwd, mas com algumas diferenças importantes:

/etc/dovecot/users
username:password:uid:gid:realname:home:extra_fields

  • username: Nome do usuário ou endereço de e-mail.
  • password: Senha armazenada em texto plano ou hash.
  • uid e gid: Identificadores do usuário e grupo.
  • realname: Pode ser deixado em branco.
  • home: Diretório da caixa de e-mail do usuário.
  • extra_fields: Campos adicionais, como regras de cota.

Com auth_username_format=%Lu, podemos definir e-mails completos como login:

bob@example.org:{PLAIN}test:10000:10000::/srv/vmail/example.org/bob::
jhon@example.com:{PLAIN}test:10000:10000::/srv/vmail/example.com/jhon::
  • O usuário bob@example.org tem a senha test, UID e GID 10000, e sua caixa de e-mail está localizada em /srv/vmail/example.org/bob/.
  • O usuário jhon@example.com segue a mesma estrutura.

Para garantir segurança, é recomendável armazenar senhas em formato hash, como {SHA256} ou {CRYPT}.


usar o mesmo UID e GID

No exemplo do passwd-file, todos os usuários têm o mesmo UID (10000) e GID (10000) porque isso é uma prática comum em servidores de e-mail que utilizam armazenamento virtual. Diferente de usuários normais do sistema, usuários de e-mail não precisam ter contas reais no Linux. Em vez disso, todos os e-mails são armazenados em um diretório único gerenciado pelo Dovecot.


Ao atribuir o mesmo UID/GID para todos os usuários de e-mail, o sistema simplifica permissões e gerenciamento de arquivos, evitando a necessidade de criar um usuário real para cada conta de e-mail.



LDAP e Active Directory


O Dovecot pode utilizar LDAP como fonte de autenticação, permitindo integração com servidores de diretório, como OpenLDAP e Active Directory (AD). Para configurar esse método, é necessário definir parâmetros como host, credenciais de acesso e filtros de busca no LDAP.


Antes de começarmos, é importante deixar claro que não vou demonstrar como configurar basedo em Active Directory e também não vou explicar como configurar o LDAP. Já tenho registrado na parte do Postfix como criar um servidor LDAP com Openldap.


Ao usar LDAP, é preciso escolher entre dois métodos de verificação de senha:

MétodoDescrição
Authentication BindsO Dovecot tenta autenticar diretamente no LDAP usando o login e senha fornecidos pelo cliente. Se o login for bem-sucedido, a credencial está correta.
Password LookupsO Dovecot acessa o banco LDAP com um usuário proxy, localiza o registro do usuário e verifica a senha armazenada.

O método do Active Directory (AD) exige Authentication Binds. Como o AD não permite leitura do campo de senha, o método Password Lookups não funcionam. Como o AD exige senha em texto plano para autenticação, métodos como CRAM-MD5 e DIGEST-MD5 não são compatíveis.


Para usar LDAP, primeiro ative a configuração no arquivo 10-auth.conf descomentando a linha abaixo e comente outros método de autenticação. Isso fará com que o Dovecot utilize LDAP para autenticação.

!include auth-ldap.conf.ext

Em seguida, o arquivo auth-ldap.conf.ext configura as buscas de passdb (senha) e userdb (dados do usuário):

passdb {
driver = ldap
args = /etc/dovecot/dovecot-ldap.conf.ext
}

userdb {
driver = ldap
args = /etc/dovecot/dovecot-ldap.conf.ext
}

Explicação

O passdb define o método de autenticação de senhas. O driver = ldap indica que o Dovecot usará o LDAP para autenticação de senhas. O args = /etc/dovecot/dovecot-ldap.conf.ext especifica o caminho para o arquivo de configuração LDAP do Dovecot, que contém as informações necessárias para conectar-se ao servidor LDAP e autenticar usuários.


O userdb define como o Dovecot obtém informações sobre os usuários. O driver = ldap indica que o Dovecot usará o LDAP para obter informações sobre os usuários. O args = /etc/dovecot/dovecot-ldap.conf.ext especifica o caminho para o mesmo arquivo de configuração LDAP usado para autenticação de senhas. Esse arquivo também contém configurações para buscar detalhes dos usuários no LDAP.


O arquivo dovecot-ldap.conf.ext contém os detalhes do servidor LDAP, como host, base DN, filtros de pesquisa e credenciais. Como ele suporta diferentes versões do LDAP e os dois métodos de autenticação, pode parecer complexo inicialmente.


A configuração do LDAP com Dovecot foi descrita na parte do Postfix, em como configurar o Dovecot para conectar no LDAP, para acessar clique aqui.



Usuários Virtuais


Os usuários virtuais no Dovecot são contas de e-mail que não estão ligadas a usuários do sistema operacional (/etc/passwd). Isso facilita o gerenciamento de grandes quantidades de contas sem criar usuários no sistema, tornando o servidor de e-mail mais escalável e eficiente. Os usuários virtuais podem ser armazenados e autenticados de várias formas no Dovecot:

MétodoDescrição
passwd-fileArquivo de texto semelhante a /etc/passwd, mas independente do sistema. Fácil de configurar e gerenciar manualmente.
SQL (MySQL/PostgreSQL)Permite armazenar credenciais e configurações em um banco de dados. Ideal para servidores grandes.
LDAP e Active DirectoryIntegração com diretórios corporativos, permitindo login unificado.

Todos os usuários devem ter o mesmo UID e GID, isso é uma prática comum em servidores de e-mail que utilizam armazenamento virtual. Diferente de usuários normais do sistema, usuários de e-mail não precisam ter contas reais no Linux. Em vez disso, todos os e-mails são armazenados em um diretório único gerenciado pelo Dovecot.


Ao atribuir o mesmo UID/GID para todos os usuários de e-mail, o sistema simplifica permissões e gerenciamento de arquivos, evitando a necessidade de criar um usuário real para cada conta de e-mail.


Para armazenar e-mails de usuários virtuais, o Dovecot precisa de um usuário e grupo exclusivos para gerenciar essas caixas postais. Isso é configurado por meio das diretivas mail_uid e mail_gid, garantindo que todas as caixas de e-mail tenham um proprietário comum, facilitando permissões e segurança. O Dovecot recomenda a criação de um usuário e grupo do sistema dedicados para gerenciar os e-mails, com um UID e GID fixo.


Execute os seguintes comandos para criar um grupo e usuário para gerenciar os e-mails:

# Criar grupo 'vmail' com GID 5000:
addgroup --system vmail --gid 5000

# Criar usuário 'vmail' sem permissão de login:
adduser --system --home /srv/vmail --uid 5000 --gid 5000 --disabled-password --disabled-login vmail

## '--system': Cria um usuário do sistema, evitando logins diretos.
##
## '--home /srv/vmail': Define `/srv/vmail` como diretório de armazenamento.
##
## '--uid 5000 --gid 5000': Define UID e GID fixos para usuários virtuais.
##
## '--disabled-password --disabled-login': Impede logins diretos no sistema.

Agora, crie o diretório onde os e-mails serão armazenados e em seguida corrija as permissões para garantir que apenas o usuário vmail possa acessar:

mkdir -p /var/vmail
chown vmail:vmail /var/vmail
chmod 770 /var/vmail

Agora, edite o arquivo 10-mail.conf (geralmente localizado em /etc/dovecot/conf.d/10-mail.conf) e adicione as seguintes diretivas:

/etc/dovecot/conf.d/10-mail.conf
mail_uid = vmail
mail_gid = vmail
mail_location = mdbox:/var/vmail/%d/%n/mdbox


Métodos de Autenticação


O Dovecot suporta diversos métodos de autenticação para validar usuários antes de conceder acesso ao serviço de e-mail. Esses métodos variam em nível de segurança e compatibilidade com diferentes clientes de e-mail e servidores. Já foi mencionado o uso de autenticação na configuração de Postfix + Dovecot, onde métodos como PLAIN e LOGIN são comumente usados.


Na parte de Postfix fizemos algumas configurações como:

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

Quando fazemos essa configuração acima, o Postfix delega toda a autenticação ao Dovecot, e os métodos de autenticação passam a ser os definidos no Dovecot, não mais no Postfix. Ou seja, a configuração smtpd_sasl_auth_enable = yes no Postfix apenas ativa a autenticação SASL, mas os métodos usados (PLAIN, LOGIN, CRAM-MD5, etc.) serão os definidos no auth_mechanisms do Dovecot, e não no Postfix.


Agora, vamos detalhar os principais métodos disponíveis no Dovecot.



Autenticação PLAIN e LOGIN


Esses métodos são os mais simples e amplamente suportados, mas requerem TLS/SSL para garantir segurança. É a configuração mais comum, mas sempre usado junto com TLS.

MétodoDescrição
PLAINO cliente envia o nome de usuário e senha em texto plano.
LOGINSimilar ao PLAIN, mas a senha é enviada em dois passos.

10-auth.conf
auth_mechanisms = plain login

A opção disable_plaintext_auth no Dovecot controla se métodos de autenticação em texto plano (PLAIN e LOGIN) podem ser usados sem criptografia (TLS/SSL). Usar a opção disable_plaintext_auth = yes impede autenticação sem criptografia, ou seja, apenas vai permitir login que utilizem TLS (só vai funcionar se STARTTLS ou SSL estiver ativo).

10-auth.conf
disable_plaintext_auth = yes

Além disso, se você quiser permitir PLAIN/LOGIN apenas com TLS, ainda temos que configurar os parâmetros de TLS no Dovecot. Abaixo podemos ver um exemplo:

/etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/postfix/certs/fullchain.pem
ssl_key = </etc/postfix/certs/privkey.pem
ssl_client_ca_dir = /etc/ssl/certs
ssl_dh = </etc/postfix/certs/ffdhe4096.pem

ssl_min_protocol = TLSv1.2
ssl_cipher_list = ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256

ssl_curve_list = prime256v1:secp384r1
ssl_prefer_server_ciphers = yes

Explicação

O ssl = required exige o uso de SSL/TLS nas conexões. Já ssl_cert e ssl_key configurando caminho do certificado e chave privada que o Dovecot vai usar nas conexões com TLS (estou deixando tudo no diretório do Postfix). O ssl_client_ca_dir define o diretório onde estão armazenados os certificados das autoridades certificadoras confiáveis para validação de clientes.


O ssl_dh define o arquivo com parâmetros Diffie-Hellman para negociações de chave seguras. A opção ssl_min_protocol configura o protocolo mínimo de TLS a ser utilizado, neste caso, TLS 1.2 ou superior. Já a opção ssl_cipher_list especifica a lista de cifras criptográficas permitidas para conexões SSL/TLS, garantindo um nível adequado de segurança.


A opção ssl_curve_list = prime256v1:secp384r1 define as curvas elípticas usadas para negociações de chaves, contribuindo para a segurança das conexões. A opção ssl_prefer_server_ciphers = yes faz com que o servidor prefira suas próprias cifras criptográficas em vez de aceitar as cifras sugeridas pelos clientes.



Formato de Hash para senhas


No Dovecot, as senhas podem ser armazenadas em diferentes formatos de hash. O formato padrão segue o mesmo esquema utilizado em LDAP e MySQL, onde o nome do algoritmo de hash é colocado entre chaves {} antes da senha. Abaixo podemos ver uma tabela com os exemplo de Formatos de Hash Suportados:

AlgoritmoExemplo de HashObservação
PLAIN{PLAIN}senha123Senha em texto plano (não recomendado).
CRYPT{CRYPT}4ZtRq3xJ6dR1sUsa o sistema de criptografia do Linux.
MD5{MD5}$1$47PZafRb$yaF4iBIaA8iCTCJV/JPnK1Compatível com sistemas antigos.
PLAIN-MD5{PLAIN-MD5}e8636ea013e682faf61f56ce1cb1ab5cVersão simples do MD5.
LDAP-MD5{LDAP-MD5}6GNuoBPmgvr2H1bOHLGrXA==Padrão usado em servidores LDAP.
SMD5{SMD5}8jI00LUVTivwWdg2YYOv/tMxXKo=MD5 com salt (mais seguro).
SHA{SHA}kGByAB793z4R5tK1eC9Hd/4Dhzk=Hash SHA-1.
SSHA{SSHA}6pJi9UmtiW5DxPLSDKJN3B//5pG1HTndSHA-1 com salt (mais seguro que SHA).
SHA256{SHA256}n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=SHA-256 puro.
SSHA256{SSHA256}41MaIjmxca3/sgzedFCcZXn5s3afDLkvN5h6+UTjCHiy0PMtSHA-256 com salt.
SHA512{SHA512}jYR+AdIrqpafcfo2K03iHJ4Tx4grzqE7pcaorg1x/IyXAMguAIemXIs3vSn1NnR/KMlnK+wcrndi0snza2AT8g==SHA-512 puro.
SSHA512{SSHA512}vx4qjIPiKrFyQrLCghRFNX/PlX1tABkLsoBItXgO4Hnl6W36fsa9svkxEKgX5Ul6WA+BgxCOl8mhhTSrawkfplCN/3Y=SHA-512 com salt (mais seguro).

Para criar senhas seguras, use o comando doveadm pw:

$ sudo doveadm pw -s sha256
Enter new password:
Retype new password:
{CRYPT}$2y$05$.iTMGdTq7kze2aJdZDKzj.bd86bTHvoIW1gBJyYdBToyXwzhWX8eK

Para usar o formato hexadecimal, adicione .hex:

doveadm pw -s sha256.hex

Caso as senhas não tenham um prefixo {}, o Dovecot assume um algoritmo padrão. Isso pode ser definido no arquivo 10-auth.conf:

# Define o algoritmo padrão caso a senha não tenha um prefixo
default_pass_scheme = SHA256

Se estiver usando passwd-file, adicione essa configuração no passdb:

passdb {
driver = passwd-file
args = scheme=SHA256 username_format=%u /etc/dovecot/users
}

O Dovecot pode lidar com senhas de diferentes formatos simultaneamente. Isso é útil em migrações, onde alguns usuários ainda possuem senhas em MD5, enquanto novos usuários usam SHA256. Para testar se um usuário pode se autenticar corretamente, use:

doveadm auth test usuario@dominio.com senha123


Quota


A configuração quota_rule no Dovecot não permite definir cotas individualmente para cada usuário diretamente. Ela é usada para definir regras globais ou por grupos de usuários. A sintaxe básica da quota_rule é:

/etc/dovecot/conf.d/90-quota.conf
quota_rule = <mailbox type>:<limit configuration>

Exemplo de configuração padrão para todos os usuários:

/etc/dovecot/conf.d/90-quota.conf
quota_rule = *:storage=1G

Isso define um limite de 1GB para todos os usuários.


  • storage=<valor> → Define o limite de armazenamento (exemplo: 1G, 500M, etc.).
  • bytes=<valor> → Define o limite diretamente em bytes.
  • messages=<valor> → Define um limite máximo para o número de mensagens.
  • ignore → Faz com que a pasta especificada seja ignorada no cálculo da cota.

Exemplo com regras adicionais:

plugin {
quota_rule = *:storage=1G
quota_rule1 = INBOX/Trash:storage=+100M
quota_rule2 = INBOX/Archive:storage=+20%%
quota_rule3 = INBOX/Sent:ignore
quota_rule4 = INBOX:messages=+100K
}
  • A lixeira (INBOX/Trash) pode armazenar 100MB extras.
  • A pasta INBOX/Archive pode crescer até 20% além da cota base.
  • A pasta INBOX/Sent não conta para a cota total.
  • A INBOX pode conter no máximo 100.000 mensagens.

O quota dict permite armazenar e recuperar cotas dinamicamente de um banco de dados ou outro serviço externo, possibilitando a definição de cotas individuais por usuário. No entanto, dependendo do serviço, como em alguns serviços de LDAP, a implementação pode exigir ajustes complexos no schema do LDAP.


Uma alternativa mais simples e eficiente é o uso de datasets do ZFS com quotas, proporcionando um controle direto do espaço de armazenamento para cada usuário no Dovecot. Como o ZFS permite definir quotas em datasets individuais, e cada usuário possui seu próprio diretório (/var/vmail/exemplo/usuario), criar um dataset separado para cada conta e definir uma cota específica é uma solução robusta e de fácil administração, desde que configurado corretamente.


Abaixo podemos ver um método básico e que ainda precisa de ajustes para configurar quotas no ZFS para armazenar os emails do Dovecot:

# Crie os datasets individuais para cada usuário e aplique a quota:
zfs create -o mountpoint=/var/vmail/exemplo.com/usuario1 zpool/usuario1
zfs set quota=1G zpool/usuario1

zfs create -o mountpoint=/var/vmail/exemplo.com/usuario2 zpool/usuario2
zfs set quota=2G zpool/usuario2

Esse método de configuração não configura quota por usuário e/ou grupo, apenas quota por dataset.


Atenção

Lembre-se, este é apenas um exemplo básico para contornar as limitações do Dovecot e permitir algum controle sobre o espaço de armazenamento dos e-mails dos usuários. O ZFS foi utilizado como uma solução para gerenciar a quantidade de armazenamento disponível para cada usuário. No entanto, ainda são necessárias algumas configurações adicionais no ZFS para um gerenciamento mais eficiente dos arquivos dentro dos datasets.


Este método não é totalmente adequado caso você pretenda utilizar snapshots. Existem aspectos importantes a serem considerados nesse cenário, mas não abordarei esse tema aqui, pois esta documentação é focada no Dovecot, e não no ZFS.


Essa abordagem usando quotas do ZFS diretamente no pool funciona muito bem para limitar o espaço usado por cada usuário, mas tem um problema. O Dovecot (e qualquer serviço de autenticação como LDAP ou SQL) não possuem conhecimento da quota definida no ZFS, ou seja, o usuário não vai receber avisos de cota ao atingir o limite. Portanto, o Dovecot pode continuar aceitando e-mails até que ocorra um erro de gravação.


Podemos configurar scripts de notificação para alertar os usuários quando eles estiverem atingindo a quota no ZFS. Como o Dovecot não tem integração direta com as quotas do ZFS, um script externo pode monitorar o uso do espaço e enviar avisos automaticamente. Mas novamente, essa abordagem requer diversos ajustes por falta de integração entre os sistemas.


Ainda há um problema difícil de resolver com a solução que apresentei. Se isso não for uma limitação para você e sua infraestrutura, talvez ainda seja uma abordagem viável. No entanto, um dos principais desafios é que os clientes de e-mail (MUAs, como Thunderbird, Outlook, etc.) podem não reconhecer corretamente a quota.


Como os MUAs geralmente utilizam comandos IMAP para obter informações de quota, se o Dovecot não retornar uma resposta compatível, o cliente de e-mail não exibirá a quota corretamente. Isso pode deixar tanto o usuário quanto a equipe de suporte no escuro quando o limite for atingido, tornando mais difícil diagnosticar problemas de espaço.


Se o Dovecot estiver recebendo e-mails via LMTP (Local Mail Transfer Protocol), ele rejeitará imediatamente mensagens que excedam a quota, retornando um erro permanente "552 Quota exceeded" ao servidor de origem. Por outro lado, se estiver usando dovecot-lda, ele tentará entregar o e-mail, mas falhará ao gravá-lo no Maildir/Mdbox, resultando em um erro enviado ao Postfix. Nesse caso, o Postfix pode tentar reenviar a mensagem ou devolvê-la ao remetente.



Fontes


https://doc.dovecot.org/2.4.0/

https://doc.dovecot.org/2.3/configuration_manual/quota/unified_quota_configuration/

https://doc.dovecot.org/2.3/configuration_manual/quota/

https://doc.dovecot.org/2.3/configuration_manual/quota/quota_dict/

https://doc.dovecot.org/2.3/configuration_manual/dict/#dict

https://doc.dovecot.org/2.3/configuration_manual/authentication/static_user_database/#authentication-static-user-database

https://doc.dovecot.org/2.3/configuration_manual/authentication/user_database_extra_fields/#passwd-file