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:
- 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:
- /etc/postfix/main.cf (parâmetros de configuração do Postfix, consulte man 5 postconf para mais detalhes).
- /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).