Pesquisa de site

Como configurar Postfix e Dovecot com usuários de domínio virtual no Linux - Parte 2


No artigo anterior desta série explicamos como configurar e gerenciar o banco de dados do servidor de e-mail com segurança usando phpMyAdmin.

Requerimento:

  1. Instale Postfix Mail Server e Dovecot com MariaDB – Parte 1

Agora é hora de configurar os programas internos que tornarão o envio e recebimento de emails uma realidade: Postfix e Dovecot (para lidar com emails enviados e recebidos, respectivamente).

Configurando o servidor de correio Postfix

Antes de começar a configurar o Postfix, valeria a pena dar uma olhada em suas páginas de manual aqui, com ênfase especial na seção intitulada “Informações para novos usuários do Postfix“ . Se fizer isso, será mais fácil seguir este tutorial.

Em poucas palavras, você deve saber que existem dois arquivos de configuração para o Postfix:

  1. /etc/postfix/main.cf (parâmetros de configuração do Postfix, consulte man 5 postconf para mais detalhes).
  2. /etc/postfix/master.cf (configuração do daemon master do Postfix, veja man 5 master para mais detalhes).

Em /etc/postfix/main.cf, localize (ou adicione, se necessário) as seguintes linhas e certifique-se de que correspondam aos valores indicados abaixo:


append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
dovecot_destination_recipient_limit = 1
message_size_limit = 4194304
readme_directory = no
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (CentOS)
smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

As próximas três configurações são de especial importância. Nos arquivos indicados em amarelo configuraremos o acesso do Postfix às tabelas Domains_tbl, Users_tbl e Alias_tbl:


virtual_mailbox_domains = mysql:/etc/postfix/mariadb-vdomains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mariadb-vusers.cf
virtual_alias_maps = mysql:/etc/postfix/mariadb-valias.cf

Observe que você pode escolher diferentes nomes de arquivo acima, desde que os crie e insira o seguinte conteúdo neles. Em cada caso, substitua SuaSenha pela senha que você escolheu para o usuário dba na Parte 1, ou você também pode usar o MariaDB credenciais root para usuário e senha abaixo.

Além disso, certifique-se de usar exatamente os mesmos nomes do banco de dados do servidor de e-mail e das tabelas criadas na Parte 1.

Em /etc/postfix/mariadb-vdomains.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Domains_tbl WHERE DomainName='%s'

Em /etc/postfix/mariadb-vuusers.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Users_tbl WHERE Email='%s'

Em /etc/postfix/mariadb-valias.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT Destination FROM Alias_tbl WHERE Source='%s'

Por fim, não se esqueça de alterar as permissões desses arquivos para 640:


chmod 640 /etc/postfix/mariadb-vdomains.cf
chmod 640 /etc/postfix/mariadb-vusers.cf
chmod 640 /etc/postfix/mariadb-valias.cf

E a propriedade do usuário root e do grupo postfix:


chown root:postfix /etc/postfix/mariadb-vdomains.cf
chown root:postfix /etc/postfix/mariadb-vusers.cf
chown root:postfix /etc/postfix/mariadb-valias.cf

A seguir, para ativar conexões seguras, precisamos ter certeza de que as seguintes configurações não foram comentadas (ou adicionadas, se necessário) em /etc/postfix/master.cf:


submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp

showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
#virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache

Nota: O recuo nas linhas que começam com a opção -o é crítico; caso contrário, a verificação do postfix retornará um erro:

Antes de salvar as alterações, adicione as seguintes linhas na parte inferior do arquivo:


dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

Neste ponto é essencial verificar se o Postfix tem acesso às tabelas do banco de dados e aos domínios, contas e alias que criamos na Parte 1.

Para isso, usaremos o comando postmap, um utilitário para testar a comunicação com as tabelas que o Postfix irá procurar durante a operação, mas antes de mais nada precisaremos reiniciar o postfix:


systemctl postfix restart
postmap -q linuxnewz.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q someotherdomain.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-valias.cf

Na imagem abaixo podemos observar que para os registros existentes no banco de dados é retornado um 1. Caso contrário, nada será exibido na tela. No caso da verificação de alias, observe que a conta de e-mail real para a qual o alias está mapeado é retornada:

Observe que NÃO estamos autenticando com base nas credenciais definidas para cada conta de e-mail; estamos apenas testando a capacidade do Postfix de detectar esses registros no banco de dados.

Portanto, se você obtiver uma saída diferente da acima, certifique-se de usar um par de usuário/senha válido em mariadb-vdomains.cf, mariadb-vuusers.cf e mariadb-valias.cf (ou como você quiser chamar esses arquivos).

Configurando o Dovecot

Como um servidor IMAP/POP3, o Dovecot fornece uma maneira para os usuários através de um Mail User Agent (MUA, ou também conhecido como cliente), como Thunderbird ou Outlook, para citar alguns exemplos, para acessar seus e-mails.

Para começar, vamos criar um usuário e um grupo para lidar com e-mails (precisaremos disso porque nossas contas de e-mail não estão associadas a um usuário do sistema). Você pode usar outro UID e GID (diferente de 5000 como fazemos abaixo), desde que não esteja em uso e seja um número alto:


groupadd -g 5000 vmail 
useradd -g vmail -u 5000 vmail -d /home/vmail -m

As configurações do Dovecot são divididas em vários arquivos de configuração (certifique-se de que as linhas a seguir não estejam comentadas e/ou edite-as para corresponder às configurações indicadas abaixo).

Em /etc/dovecot/dovecot.conf:


!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp
!include conf.d/*.conf
!include_try local.conf

Em /etc/dovecot/conf.d/10-auth.conf (habilite apenas a autenticação via SQL e deixe os outros métodos de autenticação comentados):


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

Em /etc/dovecot/conf.d/auth-sql.conf.ext (observe que armazenaremos e-mails em um diretório chamado seudominio.com dentro de / home/vmail, que você precisa criar se não existir. No nosso caso, fizemos mkdir /home/vmail/linuxnewz.com para gerenciar e-mails para esse domínio):


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

Caixas de entrada individuais para contas de usuários serão criadas quando os e-mails dessas contas forem recebidos pela primeira vez.

Em /etc/dovecot/conf.d/10-mail.conf:


mail_location = maildir:/home/vmail/%d/%n/Maildir
namespace inbox {
  inbox = yes
}
mail_privileged_group = mail
mbox_write_locks = fcntl

Em /etc/dovecot/conf.d/10-master.conf:


service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
   mode = 0600
   user = postfix
   group = postfix
  }
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  unix_listener auth-userdb {
   mode = 0600
   user = vmail
  }
  user = dovecot
}
service auth-worker {
  user = vmail
}
service dict {
  unix_listener dict {
  }
}

Em /etc/dovecot/conf.d/10-ssl.conf (substitua o certificado e os caminhos da chave se estiver planejando usar um certificado assinado por uma CA):


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

Em /etc/dovecot/dovecot-sql.conf.ext insira as informações do seu banco de dados e as credenciais do usuário administrativo criado na Parte 1.

Importante: se sua senha contiver um asterisco (#), você precisará incluir a string de conexão conforme indicado no exemplo abaixo:


driver = mysql
connect = "host=127.0.0.1 dbname=EmailServer_db user=dba password=PassWith#Here"
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM Users_tbl WHERE Email='%u';

Além disso, você pode configurar o registro do Dovecot para ser separado do Postfix em /etc/dovecot/conf.d/10-logging.conf:


log_path = /var/log/dovecot.log

Por fim, certifique-se de que o log do Dovecot esteja acessível para o usuário dovecot:


chown vmail:dovecot /var/log/dovecot.log
chmod 660 /var/log/dovecot.log

Verifique e corrija a configuração do Postifix e habilite SMTP, POP3 e IMAP no Firewall

Se acontecer de você encontrar algum problema ao configurar o Postfix e/ou Dovecot, em vez de enviar todos os arquivos de configuração para pedir ajuda, você pode obter um resumo da configuração (apenas linhas não comentadas) com:


postconf –n # Summary for /etc/postfix/main.cf
postconf –M # Summary for /etc/postfix/master.cf
doveconf –n # Summary of all configuration files for Dovecot

Além disso, certifique-se de que as caixas de entrada de e-mail possam ser lidas somente pelo vmail:


chown –R vmail:vmail /home/vmail

Os arquivos de configuração também devem ser legíveis pelos usuários do vmail e do dovecot:


chown -R vmail:dovecot /etc/dovecot 
chmod -R o-rwx /etc/dovecot 

Por fim, certifique-se de ativar SMTP, POP3 e IMAP através do firewall:


firewall-cmd --add-port=143/tcp
firewall-cmd --add-port=143/tcp --permanent
firewall-cmd --add-port=110/tcp
firewall-cmd --add-port=110/tcp --permanent
firewall-cmd --add-port=587/tcp
firewall-cmd --add-port=587/tcp --permanent

Configure o Thunderbird como um cliente de email para Postfix

Tendo acesso protegido através do firewall para as portas usadas nas comunicações por e-mail, é hora de configurar um cliente de e-mail. Usando [email  e sua senha correspondente, juntamente com mail.linuxnewz.com como servidor IMAP (ou POP3) e SMTP, estamos prontos para começar a enviar e receber e-mails para e dessa conta:

Você pode ignorar com segurança a mensagem de aviso exibida porque está usando um certificado que não está assinado por uma CA de terceiros confiável:

Vamos redigir um breve e-mail de teste e clicar em Enviar:

Quando solicitado a aceitar o certificado autoassinado para o servidor de saída, confirme-o anteriormente como antes:

Por fim, acesse o e-mail de destino para ver se recebeu o e-mail que acabou de ser enviado. Em caso afirmativo, responda e veja se ele é devolvido à caixa de entrada do e-mail de origem (caso contrário, consulte o log do Postfix em /var/log/maillog ou o log do Dovecot em /var /log/dovecot.log para obter informações sobre solução de problemas):

Agora você tem um servidor de e-mail Postfix e Dovecot funcionando e pode começar a enviar e receber e-mails.

Resumo

Neste artigo explicamos como configurar o Postfix e o Dovecot para lidar com o tráfego de e-mail em seu servidor Linux. Se algo não funcionar conforme indicado neste artigo, reserve um tempo para verificar a documentação do Postfix e Dovecot.

Observe que embora configurar um servidor de e-mail Postfix não seja uma tarefa fácil, é uma experiência gratificante para todo administrador de sistema.

Se depois de ler a documentação você ainda tiver dificuldades com o Postfix e/ou Dovecot, sinta-se à vontade para nos enviar uma mensagem usando o formulário de comentários abaixo e teremos prazer em ajudá-lo. ajudá-lo (não se esqueça de enviar para um serviço de armazenamento on-line a configuração do Postfix e Dovecot recuperada usando postconf e doveconf conforme descrito neste artigo).