UP | HOME

LPI-2 202-450 Topico 211.3: Administração do acesso ao email
Administração do acesso ao email

Índice

211.3 Administração do acesso ao email - Objetivos

Peso 2

O candidato deve ser capaz de instalar e configurar serviços POP e IMAP

Conhecimentos-chave:

Lista parcial dos arquivos, termos e ferramentas utilizados:

211.3 Administração do acesso ao email - Conteúdo

Atualmente, a modalidade mais comum de um cliente acessar uma caixa postal de emails é através de uma conexão IMAP ou POP3. Ambos podem ser utilizados juntos, mas é mais comum que apenas uma das modalidades seja escolhida. Quando um MUA acessa um servidor de email, o programa que responde é um servidor POP3 ou IMAP. Esse servidor então identifica o usuário e entrega para o MUA as mensagens armazenadas no servidor.

Tabela 1: Comparativo rápido POP3 e IMAP
POP3 (/Post Office Protocol) IMAP (Internet Message Access Protocol)
Baixa os EMails para o PC Os EMails ficam no servidor
Os EMails são armazenados no PC Os usuários lêem os emails remotamente

A grande vantagem do IMAP diante do POP3 é a capacidade de manter a mensagem original armazenada no servidor de EMails e por consequência permitir que ela seja acessada de múltiplos dispositivos e locais, a bem da verdade no IMAP o usuário apenas lê a mensagem e o servidor armazena o status se lida ou não, também permite a organização remota das mensagens em diretórios e subdiretórios. Diferente do POP3 onde os EMails são baixados para o computador pessoal do usuário e por padrão completamente removidos do servidor (embora seja possível configurar que a mensagem não seja apagada).

Courier

O Courier é um dos MTAs mais antigos no mundo do Software Livre ele consegue trabalhar com ESMTP, IMAP, POP3, SMAP, webmail e serviços de mailing list com componentes individuais.

Partes do Curier, como o sistema de filtro Maildrop, o Webmail e o servidor de IMAP podem ser instalados como pacotes independentes e podem ser utilizados com outros servidores de correio. Ele é bastante conhecido por seu servidor IMAP.

O Courier-IMAP é uma combinação popular com o QMail, Exim e o Postfix quando configurado para uso de maildirs.

Por exemplo em um servidor Debian-like podemos instalar os pacotes courier-imap e courier-pop para podermos usar esses protocolos.

Depois de instalado será criado o diretório /etc/courier dentro desse diretório encontraremos os arquivos de configuração dos protocolos POP3 /etc/courier/pop3d e IMAP /etc/courier/imapd.

Desses arquivos as diretivas mais importantes são:

ADDRESS

Diz quais endereços de IP o Courier deve esperar conexões. Quando definido em 0 (valor padrão) ele ouvirá em todos os endereços:

address=0

PORT

Define qual a porta o Courier deverá escutar. Para o IMAP o padrão é 143, para o POP o padrão é 110:

PORT=110

MAILDIRPATH
De forma básica essa é a diretiva mais importante pois mostra o caminho do maildir.

Dovecot

O Dovecot é um servidor IMAP e POP3 com licença MIT e LGPL escrito para sistemas GNU/Linux e Unix-like. Ele foi escrito com segurança como premissa básica.

O primeiro propósito do Dovecot é atuar como um servidor de armazenamento de EMail suportanto trabalhar tanto no modo mbox quanto no modo maildir.

Assim como o Courier o Dovecot é bastante modular e os nomes dos módulos são semelhantemente sugestivos. Para nossos estudos vamos focar nos pacotes voltados para acesso a EMails no caso o dovecot-imapd e o dovecot-pop3d. Importante deve ser removida qualquer instalação de outro software semelhante como o Courier para evitar conflitos.

Por motivos de segurança, durante o processo de instalação em sistemas Debian-like será criado automáticamente um certificado auto-assinado.

O diretório /etc/dovecot/

A configuração do dovecot pode ser encontrada em /etc/dovecot/

┌─[root@centos7lpi]──[22:46]──[~]
└─[45]─># cd /etc/dovecot/
┌─[root@centos7lpi]──[22:46]──[/etc/dovecot]
└─[46]─># ls -l
total 36
drwxr-xr-x 2 root root    4096 May 28 00:00 conf.d
-rw-r--r-- 1 root root    4401 Feb 27 11:17 dovecot.conf
-rw-r----- 1 root dovecot 1507 Mar 16  2016 dovecot-dict-auth.conf.ext
-rw-r----- 1 root dovecot  852 Mar 16  2016 dovecot-dict-sql.conf.ext
-rw-r----- 1 root dovecot 5612 Mar 16  2016 dovecot-sql.conf.ext
drwxr-xr-x 2 root root    4096 Feb 27 11:28 private
-rw-r--r-- 1 root root     121 Feb 27 11:29 README

┌─[root@centos7lpi]──[22:46]──[/etc/dovecot]
└─[47]─># tree
.
├── conf.d
│   ├── 10-auth.conf
│   ├── 10-director.conf
│   ├── 10-logging.conf
│   ├── 10-mail.conf
│   ├── 10-master.conf
│   ├── 10-ssl.conf
│   ├── 10-tcpwrapper.conf
│   ├── 15-lda.conf
│   ├── 15-mailboxes.conf
│   ├── 20-imap.conf
│   ├── 20-pop3.conf
│   ├── 90-acl.conf
│   ├── 90-plugin.conf
│   ├── 90-quota.conf
│   ├── auth-checkpassword.conf.ext
│   ├── auth-deny.conf.ext
│   ├── auth-dict.conf.ext
│   ├── auth-master.conf.ext
│   ├── auth-passwdfile.conf.ext
│   ├── auth-sql.conf.ext
│   ├── auth-static.conf.ext
│   ├── auth-system.conf.ext
│   └── auth-vpopmail.conf.ext
├── dovecot.conf
├── dovecot-dict-auth.conf.ext
├── dovecot-dict-sql.conf.ext
├── dovecot-sql.conf.ext
├── private
└── README

2 directories, 28 files

Existe um arquivo de configuração principal o dovecot.conf e vários outros arquivos de configuração que ficam em /etc/dovecot/conf.d/ que constam como includes dentro do arquivo principal.

## Dovecot configuration file

# If you're in a hurry, see http://wiki2.dovecot.org/QuickConfiguration

# "doveconf -n" command gives a clean output of the changed settings. Use it
# instead of copy&pasting files when posting to the Dovecot mailing list.

# '#' character and everything after it is treated as comments. Extra spaces
# and tabs are ignored. If you want to use either of these explicitly, put the
# value inside quotes, eg.: key = "# char and trailing whitespace  "

# Most (but not all) settings can be overridden by different protocols and/or
# source/destination IPs by placing the settings inside sections, for example:
# protocol imap { }, local 127.0.0.1 { }, remote 10.0.0.0/8 { }

# Default values are shown for each setting, it's not required to uncomment
# those. These are exceptions to this though: No sections (e.g. namespace {})
# or plugin settings are added by default, they're listed only as examples.
# Paths are also just examples with the real defaults being based on configure
# options. The paths listed here are for configure --prefix=/usr
# --sysconfdir=/etc --localstatedir=/var

# Enable installed protocols
!include_try /usr/share/dovecot/protocols.d/*.protocol

...

A instalação do Dovecot já nos tras vários arquivos de configuração dentro do diretório /etc/dovecot/conf.d/ que são chamados pelos includes.

┌─[root@centos7lpi]──[22:46]──[~]
└─[48]─># ls /etc/dovecot/conf.d
10-auth.conf        15-mailboxes.conf            auth-dict.conf.ext
10-director.conf    20-imap.conf                 auth-master.conf.ext
10-logging.conf     20-pop3.conf                 auth-passwdfile.conf.ext
10-mail.conf        90-acl.conf                  auth-sql.conf.ext
10-master.conf      90-plugin.conf               auth-static.conf.ext
10-ssl.conf         90-quota.conf                auth-system.conf.ext
10-tcpwrapper.conf  auth-checkpassword.conf.ext  auth-vpopmail.conf.ext
15-lda.conf         auth-deny.conf.ext

Precisamos apenas definir em qual diretório os EMails são armazenados no arquivo 10-mail.conf (para configurar o Dovecot a prover acesso a clientes como o M$ Outlook devem ser editados os arquivos 20-pop3.conf e 20-imap.conf, assunto que não faz parte do exame LPIC2).

Ao configurar o arquivo 10-mail.conf devemos editar a diretiva mail_location:

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

mail_location = maildir:~/mail/inbox para o formato maildir

Também é possível configurar o Dovecot para trabalhar na modalidade de contas virtuais seguindo o formato:

mail_location = maildir:/var/mail/vhosts/%d/%n

Nesse exemplo as mensagens serão armazenadas no diretório /var/mail/vhosts/ onde %d será expandido para o nome do domínio que constar no EMail e %u será expandido para o nome que constar no EMail. É importante que os diretórios base sejam criados antes que o Dovecote passe a utilizá-los. Também deve ser definida a diretiva mail_privileged_group = mail, onde mail indica o grupo que conta com permissão de escrita em /var/mail/.

O controle de acesso é definido no arquivo /etc/dovecot/conf.d/10-auth.conf. Nesse arquivo um ajuste importante é setar a diretiva disable_plaintext_auth = yes, negando acesso com senhas não criptografadas. Além disso devem ser ativados os mecanismos de autenticação com a diretiva auth_mechanisms = plain login.

Quando utilizadas contas virtuais armazenadas em banco de dados, é necessário ativar a opção !include auth-sql.conf.ext. O arquivo /etc/dovecot/conf.d/auth-sql.conf.ext será então utilizado pelo Dovecot para acessar a base de dados com as informações de contas virtuais. Se outras modalidades de contas não são utilizdas, a opção !include auth-system.conf.ext pode ser descadrtada comentando a linha com o caractere #.

No arquivo /etc/dovecot/conf.d/auth-sql.conf.ext é definido como são identificados os usuários e suas respectivas senhas.

passdb {
  driver = sql
  args   = /etc/dovecot/dovecot-sql.conf.ext
  }
userdb {
  driver = static
  args = uid=mail gid=mail home=/var/mail/vhosts/%d/%n
  }

É importante verificar se o usuário e o grupo indicados tem acesso liberado ao diretório /var/mail/vhosts/.

No arquivo /etc/dovecot/dovecot-sql.conf.ext são colocadas as informações específicas do banco de dados que guarda as informações das contas de EMail. Assumindo que é utilizado um banco de dados MySQL, a configuração a seguir deverá ser adotada:

driver = mysql
connect = host=127.0.0.1 dbname=vmail-db user=vmail-user password=p@ssw0rd
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';

AS informações de acesso ao banco de dados indicadas na linha connect devem ser ajustadas apropriadamente. Por conveniência, recomenda-se utilizar a mesma tabela de emails virtuais do Postfix, certificando-se de que as senhas ali armazenadas correspondam ao formato indicado na opção default_pass_scheme.

Não há daemons separados para POP e IMAP no Dovecot portanto e após executar algum ajuste de configuração o daemon dovecot deve ser reiniciado.

Após o reinicio do daemon do Dovecot podemos verificar o funcionamento inspecionando se ele está ouvindo nas portas corretas

┌─[root@centos7lpi]──[00:52]──[/var/spool/mail]
└─[83]─># lsof -i | grep dovecot
dovecot   9805     root   24u  IPv4  55915      0t0  TCP *:pop3 (LISTEN)
dovecot   9805     root   25u  IPv6  55916      0t0  TCP *:pop3 (LISTEN)
dovecot   9805     root   36u  IPv4  55951      0t0  TCP *:imap2 (LISTEN)
dovecot   9805     root   37u  IPv6  55952      0t0  TCP *:imap2 (LISTEN)

┌─[root@centos7lpi]──[00:52]──[/var/spool/mail]
└─[84]─># netstat -tulpen | grep 143
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      0          55951       9805/dovecot    
tcp6       0      0 :::143                  :::*                    LISTEN      0          55952       9805/dovecot    
udp6       0      0 :::60143                :::*                                111        17792       745/avahi-daemon: r
┌─[root@centos7lpi]──[00:52]──[/var/spool/mail]
└─[85]─># netstat -tulpen | grep 110
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN      0          55915       9805/dovecot    
tcp6       0      0 :::110                  :::*                    LISTEN      0          55916       9805/dovecot

Configuração básica de TLS para o Dovecot

Como já mensionado acima, em sistemas Debian-like hoje o Dovecot já vem pré-configurado para acesso criptografado por SSL já gerando o certificado auto-assinado no momento da instalação. Porém importa saber que as definições dessa configuração ficam em /etc/dovecot/conf.d/10-ssl.conf.

ssl = required
ssl_cert = </etc/ssl/certs/mailcert.pem
ssl_key = </etc/ssl/private/mail.key

O certificado e a chave privada podem ser os mesmos utilizados na configuração do Postfix. Terminada a configuração do Dovecot, devem ser incluídas no arquivo de configuração do Postfix /etc/postfix/main.cf as definições para que usuários remotos possam se conectar ao SMTP para enviar EMails:

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = \
    permit_sasl_authenticated, \
    permit_mynetworks, \
    reject_unauth_destination

Desse modo, além do Dovecot controlar o acesso criptografado via IMAP na porta 993 e POP3 na porta 995, ele é utilizado como um plugin pelo Postfix para autorizar os usuários que tentan utilizar o servidor SMTP para enviar mensagens pela porta 587. Ao final dos ajustes devemos reiniciar o Postfix e o Dovecot para que as alterações tenham efeito.

Aqui também podemos validar o funcionamento do Dovecot conferindo as portas em que o daemon está ouvindo, poderemos verificar que serão adicionadas as portas 993 e 995 relativas ao SSL:

┌─[root@centos7lpi]──[00:57]──[/var/spool/mail]
└─[97]─># lsof -i | grep dovecot
dovecot   12447     root   24u  IPv4  76973      0t0  TCP *:pop3 (LISTEN)
dovecot   12447     root   25u  IPv6  76974      0t0  TCP *:pop3 (LISTEN)
dovecot   12447     root   26u  IPv4  76975      0t0  TCP *:pop3s (LISTEN)
dovecot   12447     root   27u  IPv6  76976      0t0  TCP *:pop3s (LISTEN)
dovecot   12447     root   38u  IPv4  77011      0t0  TCP *:imap2 (LISTEN)
dovecot   12447     root   39u  IPv6  77012      0t0  TCP *:imap2 (LISTEN)
dovecot   12447     root   40u  IPv4  77013      0t0  TCP *:imaps (LISTEN)
dovecot   12447     root   41u  IPv6  77014      0t0  TCP *:imaps (LISTEN)

doveconf

O comando doveconf lê e analisa os arquivos de configuração do Dovecot e os converte em um formato mais simples usado pelo resto do Dovecot printanto na tela todas as configurações vigentes.

Desse comando é importante memorizar a opção -n que mostra apenas as configurações vigentes que não são valores padrão.

┌─[root@centos7lpi]──[00:57]──[~]
└─[103]─># doveconf -n
# 2.2.22 (fe789d2): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.13 (7b14904)
# OS: Linux 4.10.0-28-generic x86_64 Ubuntu 16.04.3 LTS 
mail_location = maildir:~/mail/inbox
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
}
protocols = " imap pop3"
ssl = no
userdb {
  driver = passwd
}

Autenticação

O Dovecot suporta vários formatos de autenticação. Veja a lista completa em https://doc.dovecot.org/configuration_manual/authentication/authentication_mechanisms/

Aqui importa ter a noção dos seguintes formatos:

Tabela 2: Mecanismos de autenticação
Mecanismo Descrição
plain Clássica e insegura autenticação em texto plano
cram-md5 Protege a senha em trânsito contra terceiros. Suporte relativamente bom nos clients.
digest-md5 Um pouco mais forte criptograficamente do que CRAM-MD5, mas os clients raramente o suportam.

O comando doveadm

O comando doveadm é uma ferramenta em linha de comando para administrar o Dovecot sendo útil para gerenciar várias partes do Dovecot tais como acessos de usuários a suas mailboxes.

usage: doveadm [-Dv] [-f <formatter>] <command> [<args>]

  altmove      [-u <user>|-A] [-S <socket_path>] [-r] <search query>
  auth         cache|login|lookup|test
  backup       [-u <user>|-A] [-S <socket_path>] [-fPRU] [-l <secs>] [-r <rawlog path>] [-m <mailbox>] [-g <mailbox_guid>] [-n <namespace> | -N] [-x <exclude>] [-s <state>] -d|<dest>
  batch        [-u <user>|-A] [-S <socket_path>] <sep> <cmd1> [<sep> <cmd2> [..]]
  config       [doveconf parameters]
  copy         [-u <user>|-A] [-S <socket_path>] <destination> [user <source user>] <search query>
  deduplicate  [-u <user>|-A] [-S <socket_path>] [-m] <search query>
  dict         get|inc|iter|set|unset
  director     add|down|dump|flush|kick|map|move|remove|ring|status|up|update
  dump         [-t <type>] <path>
  exec         <binary> [binary parameters]
  expunge      [-u <user>|-A] [-S <socket_path>] [-m] <search query>
  fetch        [-u <user>|-A] [-S <socket_path>] <fields> <search query>
  flags        add|remove|replace
  force-resync [-u <user>|-A] [-S <socket_path>] <mailbox mask>
  fs           copy|delete|get|iter|iter-dirs|metadata|put|stat
  help         <cmd>
  import       [-u <user>|-A] [-S <socket_path>] [-s] <source mail location> <dest parent mailbox> <search query>
  index        [-u <user>|-A] [-S <socket_path>] [-q] [-n <max recent>] <mailbox mask>
  instance     list|remove
  kick         [-a <anvil socket path>] <user mask>[|]<ip/bits>
  log          errors|find|reopen|test
  mailbox      create|delete|list|metadata|mutf7|rename|status|subscribe|unsubscribe
  mount        add|list|remove
  move         [-u <user>|-A] [-S <socket_path>] <destination> [user <source user>] <search query>
  penalty      [-a <anvil socket path>] [<ip/bits>]
  proxy        kick|list
  purge        [-u <user>|-A] [-S <socket_path>] 
  pw           [-l] [-p plaintext] [-r rounds] [-s scheme] [-t hash] [-u user] [-V]
  reload       
  replicator   add|dsync-status|remove|replicate|status
  save         [-u <user>|-A] [-S <socket_path>] [-m mailbox]
  search       [-u <user>|-A] [-S <socket_path>] <search query>
  sis          deduplicate|find
  stats        dump|reset|top
  stop         
  sync         [-u <user>|-A] [-S <socket_path>] [-1fPRU] [-l <secs>] [-r <rawlog path>] [-m <mailbox>] [-g <mailbox_guid>] [-n <namespace> | -N] [-x <exclude>] [-s <state>] -d|<dest>
  user         [-a <userdb socket path>] [-x <auth info>] [-f field] [-u] <user mask> [...]
  who          [-a <anvil socket path>] [-1] [<user mask>] [<ip/bits>]
  zlibconnect  <host> [<port>]

Eventuais problemas de funcionamento do servidor de EMail podem ser investigados nos arquivos de log /var/log/mail.info, /var/log/mail.warn e /var/log/mail.err. Além disso, os comandos doveconf e doveadm podem ser utilizados para inspecionar as configurações e o funcionamento do servidor, por exemplo o comando doveadm who lista as conexões ativas com no Dovecot. Em sistemas que utilizam o systemd, os registros de log podem ser inspecionados com os comandos:

journalclt -u postfix.service

journalctl -u dovecot.service

Também em função de facilitar a resolução de problemas é bastante útil habilitar a diretiva verbose_proctitle definindo-a para yes no arquivo /etc/dovecot/dovecot.conf ela irá apresentar como títlo dos processos o nome de usuário e o endereço de IP da conexão com o servidor, facilitando assim eventuais investigações de problemas.

$ ps aux | grep -I dovevot

dovenull  5552  0.0  0.1  18820  5444 ?        S    18:53   0:00 dovecot/imap-login [1 connections (1 TLS)]
vmail     5553  0.3  0.1  13612  4304 ?        S    18:53   0:00 dovecot/imap [user at example.com 1.2.3.4 IDLE]

Autor: Jeremias Alves Queiroz

Criado em: 2021-12-19 dom 20:03

Valid XHTML 1.0 Strict