Servidor de Email –; Parte 3 ; Dovecot

O que ando aprendendo nesta caminhada sobre a Terra

Servidor de Email – Parte 3 – Dovecot

Esta é a terceira parte do processo de criação do servidor de Email em um CentOS 8. Se chegou aqui por acaso, melhor ler primeiro as publicações anteriores

Parte 1 – Instalação dos Pacotes

Parte 2 – Configurar MariaDB

O Dovecot é um MDA (Mail Delivery Agent) que é um agente que transporta as mensagens do Postfix para as caixas de mensagens virtuais. Nesta seção iremos configurar a instalação do Dovecot para forçar os usuários a usarem SSL quando eles se conectarem, desta forma nunca enviando senhas em modo texto simples.

Eu sempre gosto de manter os arquivos originais de qualquer definição para caso eu acabar me perdendo durante as configurações. Eu posso dizer que esse passo não é necessário caso esteja fazendo esse tutorial integralmente, porém, se já tem uma configuração anterior e está apenas usando para melhorá-lo sugiro fortemente que faça copia de seus arquivos.

No nosso caso, os arquivos de configuração estarão em /etc/dovecot/conf.d/. Podemos então fazer a cópia com o comando:

$ sudo cp -R /etc/dovecot/conf.d /etc/dovecot/conf.d.orig

Criando usuário

O Dovecot irá armazenar as mensagens (e todo seu conteúdo) em um diretório que definiremos no arquivo de configuração e para que ele consiga fazer isso é necessário que ele rode sob um usuário com as permissões adequadas. Os comandos abaixo irão criar este usuário e grupo. Usarei um padrão comum aos nomes que facilitam bastante a busca por soluções de problemas pela internet.

$ sudo groupadd -g 5000 vmail
$ sudo adduser -g 5000 -G mail -u 5000 -d /var/mail vmail

Editando Arquivos de Configurações

Primeiro arquivo que vamos configurar é o de autenticação. Como vamos usar uma tabela no banco de dados MariaDB para guardar os usuários e suas senhas vamos apontar isso em dois arquivos. O primeiro define o tipo de autenticação e segundo como o Dovecot irá fazer a validação da autenticação.

Edite o arquivo /etc/dovecot/conf.d/10-auth.conf e descomente (ou adicione) as linhas abaixo:

$ sudo vim /etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-system.conf.ext
!include auth-sql.conf.ext

Depois, edite o arquivo /etc/dovecot/conf.d/auth-sql.conf.ext para que fique com as linhas abaixo:

$ sudo vim /etc/dovecot/conf.d/auth-sql.conf.ext
# /etc/dovecot/conf.d/auth-sql.conf.ext
passdb {
  driver = sql
  args = /etc/dovecot/dovecot-mysql.conf.ext
}

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

Devemos também configurar os dados de conexão com o MariaDB através do arquivo /etc/dovecot/dovecot-sql.conf.ext. Este arquivo não é criado na instalação então nós o criaremos.

$ sudo vim /etc/dovecot/dovecot-mysql.conf.ext

driver = mysql
connect = host=localhost dbname=mypostfixdb user=mypostfixdbuser password=mypostfixdbuser_password
default_pass_scheme = SHA512-CRYPT

# following should all be on one line.
password_query = SELECT username as user, password, concat('/home/vmail/', maildir) as userdb_home, concat('maildir:/home/vmail/', maildir) as userdb_mail, 'vmail' as userdb_uid, 'mail' as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'

# following should all be on one line
user_query = SELECT concat('maildir:/home/vmail/', maildir) as mail, CONCAT('*:messages=10000:bytes=', quota) as quota_rule FROM mailbox WHERE username = '%u' AND active = '1'

NOTA: Use os mesmos dados que usou no passo que configurou a base de dados no MariaDB

Vamos fazer varias alterações no arquivo principal de configuração do Dovecot que é o 10-master.conf. O número a frente do arquivo indica a ordem de carregamento (prioridade). Você pode user qualquer editor que preferir. Eu gosto do Vim porque estou muito acostumado com seus comandos, mas nada impede de que use o nano por exemplo.

$ sudo vim /etc/dovecot/conf.d/10-master.conf

Para melhorar a segurança do servidor e reduzir ataques vamos desativar o acesso não criptografado. Para isso baste atribuirmos a o valor 0 para o atributo port nos serviços imap e pop3. Somente imaps e pop3s estarão disponíveis. Será necessário usar uma chave SSL que iremos criar logo mais adiante.

service imap-login {
  inet_listener imap {
    port = 0
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 0
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}

Altere também as configurações a seguir:

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
}
#############################
service auth {
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
  }
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
  # Auth process is run as this user.
  user = dovecot
}

service auth-worker {
  user = vmail
}

Certificado SSL

Para que possamos usar os serviços de criptografia necessários tanto na autenticação do usuário ao acessar sua conta quanto para garantir que o postfixadmin e o roundcube estejam sob conexões seguras devemos criar as chaves SSL validas. Neste ponto faremos a configuração criando uma chave auto-assinada (self-signed) que já é criada durante a instalação do Dovecot. Essa chave não pode ser usada para validar a conexão segura do navegador. Mais tarde iremos alterar essa configuração para usar uma chave SSL obtida através do Certbot (Lets Encrypt) em conjunto com o Nginx e configurações do DNS.

Se estiver seguindo os passos desse tutorial, não será necessário nenhuma mudança no arquivo /etc/dovecot/conf.d/10-ssl.conf que deverá conter as seguintes linhas

ssl = required
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

Caso os arquivos não existam ou se preferir recriá-los (deve ser feito caso tenha alterado o hostname, por exemplo) faça o seguinte:

Edite o arquivo /etc/pki/dovecot/dovecot-openssl.cnf e altere as entradas de acordo com as informações que você possuir.

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no
[ req_dn ]
# country (2 letter code)
C=BR
# State or Province Name (full name)
ST=SAO PAULO
# Locality Name (eg. city)
L=SAO PAULO
# Organization (eg. company)
O=MRE Development
# Organizational Unit Name (eg. section)
OU=IMAP Server
# Common Name (*.example.com is also possible)
CN=mail.meudominio.com.br
# E-mail contact
emailAddress=postmaster@meudominio.com.br

[ cert_type ]
nsCertType = server

Após ter alterado o arquivo, se já existirem os arquivos /etc/pki/dovecot/certs/dovecot.pem e /etc/pki/dovecot/private/dovecot.pem, apague-os e em seguida execute o script mkcert.sh.

$ sudo rm -f /etc/pki/dovecot/certs/dovecot.pem /etc/pki/dovecot/private/dovecot.pem 
$ sudo /usr/libexec/dovecot/mkcert.sh

A saída do script deverá ser algo parecido com essa:

Generating a 1024 bit RSA private key
............++++++
........++++++
writing new private key to '/etc/pki/dovecot/private/dovecot.pem'
-----

subject= /C=BR/ST=SAO PAULO/L=SAO PAULO/O=MRE Development/OU=IMAP server/CN=mail.meudominio.com.br/emailAddress=postmaster@meudominio.com.br
SHA1 Fingerprint=FA:86:97:8F:52:06:04:71:BA:DC:07:BA:33:6A:9B:3F:8A:EE:ED:C5

Outra configuração ainda no arquivo/etc/dovecot/conf.d/10-ssl.conf relacionada a criptografia é o atributo opcional ssl_dh. Adicione ou descomente a linha:

ssl_dh = </etc/dovecot/dh.pem

e execute o comando abaixo para gerar o arquivo .pem:

Atenção: A execução do comando abaixo costuma demorar bastante, as vezes até perto de 1 hora. É possível também utilizar um comando para gerar o mesmo arquivo de forma mais rápida.

$ openssl dhparam -out /etc/dovecot/dh.pem

Se desejar por conta e risco usar o modo rapido o comando está logo a seguir.

$ dd if=/var/lib/dovecot/ssl-parameters.dat bs=1 skip=88 | openssl dhparam -inform der > /etc/dovecot/dh.pem

Arquivo de Log

Por default o Dovecot irá usar o mecanismo de log syslog do CentOS, que normalmente envia as informações para o arquivo /var/log/messages. Como mais adiante irei mostrar como barrar diversas tentativas de ataques e uma delas inclui o uso do script Fail2ban, que faz analise de logs é melhor definirmos um arquivo exclusivo para que não tenhamos que monitorar um arquivo que se altera constantemente.

Para definirmos um arquivo de log exclusivo, vamos abrir o arquivo de configuração de log do Dovecot /etc/dovecot/conf.d/10-logging.conf e alterar ou adicionar as linhas a seguir.

log_path = /var/log/dovecot.log
auth_verbose = yes
auth_verbose_passwords = sha1:8

Salve o arquivo e reinicie o serviço

$ sudo systemctl restart dovecot

Verifique se o arquivo /var/log/dovecot.log foi criado e contém as informações indicando que o serviço está funcionando normalmente.

$ sudo tail /var/log/dovecot.log
Apr 24 22:45:58 master: Info: Dovecot v2.2.36 (1f10bfa63) starting up for imap, pop3, lmtp (core dumps disabled)

Regras de Firewall

Se estiver seguindo este tutorial desde o início em uma instalação padrão, é possível que as portas de conexão estejam fechadas para o exterior. Os comandos abaixo visam liberar as portas imaps (993), pop3s (995) para que seja possível conectar um cliente de e-mail como o Outlook ou Gmail. Mesmo que elas estejam abertas, mais adiante em outra publicação, vou mostrar uma lista de regras básicas de firewall para melhorar a segurança.

Primeiro certifique-se de que o serviço firewalld esteja rodando. Caso esteja parado, provavelmente todas as portas que possuírem um serviço de escuta estarão abertas.

$ sudo systemctl status firewalld

Verifique a linha do estado que pode estar como active (running) ou como inactive (dead). Caso esteja como inactive, não há necessidade de continuar. Se estiver como active, vamos listar quais portas estão abertas externamente.

$ sudo firewall-cmd --list-services
ssh dhcpv6-client

No exemplo acima, apenas ssh e dhcpv6-client estão permitidas. Vamos então adicionar as portas necessárias para receber e enviar emails externamente.

$ sudo firewall-cmd --add-service=pop3s --permanent
success
$ sudo firewall-cmd --add-service=imaps --permanent
success
$ sudo firewall-cmd --reload
success
$ sudo firewall-cmd --list-services
ssh dhcpv6-client imaps pop3s

Como podemos notar no exemplo, adicionamos os serviços imaps e pop3s que estão sendo ouvidas pelo serviço do Dovecot. Mais adiante iremos também adicionar as portas smtp e submission que serão ouvidas pelo serviço do Postfix (master). Note que não abrirei as portas imap e pop3 inseguras porque quero forçar o uso de SSL/TLS.

Para se certificar de que as portas estão mesmo abertas você pode tentar fazer telnet nas portas 993 e 995 de outro sistema na mesma rede e verificar se o arquivo /var/log/dovecot.log exibirá as tentativas. Se não tiver condições no momento de fazer o teste desta forma verifique a saída do comando abaixo?

$ sudo netstat -tap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:sunrpc          0.0.0.0:*               LISTEN      1/systemd
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      2669/sshd
tcp        0      0 0.0.0.0:imaps           0.0.0.0:*               LISTEN      5946/dovecot
tcp        0      0 0.0.0.0:pop3s           0.0.0.0:*               LISTEN      5946/dovecot
tcp        0      0 mail.meudominio.com:ssh    gateway:65257           ESTABLISHED 4631/sshd: myuser

E isso é tudo por enquanto. A seguir vamos configurar o Postfix 3.

 ;

3 Respostas

  1. [;] e e-mail utilizando as ferramentas mais comuns para ambiente OpenSource em Linux. Usei Postfix, Dovecot, Postfixadmin, Roundcube e [;]

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Este site utiliza o Akismet para reduzir spam. Fica a saber como são processados os dados dos comentários.