Resumo
Este documento tem como objetivo fornecer uma documentação para implementação e administração de um servidor SMTP utilizando o Postfix.
O Postfix utiliza dois arquivos de configuração principais que ficam no diretório /etc/postfix, o main.cf e master.cf. Além disso, o postfix possui outro diretório chamado /var/spool/postfix/ onde encontram-se as filas de emails.
Configuração Básica
A configuração básica é bem simples de se fazer, e deixa o servidor apto a entregar emails diretamente aos destinatários, para fazer a configuração basta modificar os seguintes parâmetros do arquivo /etc/postfix/mainf.cf :
myhostname = smtp.minhaempresa.com.br
mydomain = minhaempresa.com.br
mydestination = $mydomain, $myhostname, localhost.domain
relay_domains = dominioamigo.com.br
O domínio utilizado deve ter seu nome resolvido !!
Apague a linha abaixo no main.cf:
inet_interfaces = localhost
Feita esta configuração basta iniciar o serviço para testar, verifique o log para confirmar que ocorreu tudo bem.
[root@centos ]# service postfix start
Teste a conexão com telnet, envie o email como na figura abaixo.
Você acabou de enviar um email para o fulano, vamos confirmar:
[root@centos ]#
Poderia ser utilizado ‘’mailq’‘ ou ainda as opções ‘’-f’‘ do postqueue para forçar a entrega dos emails. No nosso exemplo o email não foi entregue por que a resolução de nomes para dominioamigo.com.br não foi possível. Vamos excluir estes emails da fila.
No exemplo acima ‘’7A4DB834D’‘ é o identificador do email. Substitua este valor para um da sua fila. Para verificar quais parâmetros estão ativos no Postfix faça:
Mapas
O Postfix utiliza na sua configuração arquivos textos formatados em duas colunas, são os mapas. Os mapas são utilizados para adicionar funcionalidades a configuração, tais como controlar relay, autenticação, acesso a servidor LDAP, aliases de email, etc...
No arquivo de configuração (main.cf) os mapas são especificados no formato ‘’tipo:nome’‘.
transport_maps = hash:/etc/postfix/transport
header_checks = regexp:/etc/postfix/header_checks
Para descobrir, os tipos de mapas faça:
Mapa de "aliases"
Aliases são apelidos de contas de email utilizados para redirecionar mensagens de uma conta para outra. O arquivo onde são definidos os aliases é o /etc/postfix/aliases. Vamos adicionar um alias para a conta webmaster@minhaempresa.com.br. Para isso, edite o arquivo de aliases e adicone a seguinte linha:
webmaster: eva@empresa.com.br
É possível também utilizar o alias para fazer uma pequena lista, por exemplo:
diretoria: fulano@minhaempresa.com.br, deltrano123@gmail.com, joao
Atualize a base de dados de alias executando o comando abaixo:
Feita a configuração não é necessário reiniciar o Postfix. Faça testes enviando emails para os aliases.
Tabelas simples (DB, hash)
Vamos agora gerar mapas do tipo DB, criaremos um mapa que contém uma lista de endereços IP e uma ação a ser tomada. Edite um arquivo texto com o conteúdo abaixo e salve-o como /etc/postfix/client_access
10.0.2.5 REJECT
uol.com.br REJECT
spammer.net REJECT
intranet.com.br OK
Para que o Postfix possa utilizar este mapa, temos que converte-los para um mapa DB executando o comando abaixo.
[root@centos ]#
Para consultar o mapa e testar, faça:
Expressões Regulares
Tabela com expressões regulares (ER) tem na primeira coluna uma expressão regular, e na segunda coluna a substituição que deve ser feita. Se a ER ‘’casar’‘ com a chave de procura, o valor retornado será o da segunda coluna.
Vejam alguns exemplos feitos no arquivo /etc/postfix/sender_access.regexp:
Convertendo fulano@intranet.dominio.com.br para fulano@dominio.com.br
/(.*)@intranet\..*/ $1@dominio.com.br
Rejeita email do tipo qualquercoisa@naoresponda.com.br
/.*@naoresponda\.com\.br/ REJECT
Colocando o .br opcional
/.*@naoresponda\.com(\.br)?/ REJECT
Esse tipo de mapa não precisa ser convertido para DB. Vamos fazer testes com o postmap.
Usando Mapas em Restrições
No Postfix existem inúmeras classes de restrições que podem ser usadas para controlar se uma mensagem é aceita ou não. Para realizar esta decisão é possível verificar diversas variáveis:
• Endereço IP de origem da conexão.
• Parâmetro do comando EHLO (ou HELO).
• Remetente (MAIL FROM).
• Destinatário (RCPT TO).
• Conteúdo dos cabeçalhos da mensagem.
• Conteúdo da mensagem.
Estas variáveis são utilizadas nas classes de restrição, no postfix temos as seguintes classes disponíveis.
Table 1: Classes Disponíveis
Classe de restrição onde atua smtpd client restrictions | Estabelecimento de conexão com o servidor:
smtpd_helo
smtpd
smtpd
smtpd
smtpd
Configuração mínima
Uma configuração mínima para a classe ‘’smtpd_recipient_restrictions’‘ pode ser:
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
Esta configuração deve ser adicionada no arquivo main.cf e o postfix deve ser reiniciado para ativar esta nova configuração.
• permit mynetworks: Casa com o parâmetro mynetworks e indica os clientes que podem conectar no servidor e enviar emails.
• reject_unauth_destination: Rejeita relay não autorizado.
Acrescentando verificação de sintaxe e DNS
Vamos acrescentar mais duas verificações, a reject_non_fqdn_sender para rejeitar MAIL FROM não qualificado e reject_unknown
smtpd_recipient_restrictions =
reject_non_fqdn_sender,
reject_unknown_sender_domain,
permit_mynetworks,
reject_unauth_destination,
permit
Tente enviar um email onde o destino seja por exemplo bob@dominio, esta mensagem deve ser rejeitada.
Outras verificações ainda podem ser feitas:
• reject_non_fqdn_recipient: Rejeita mensagens cujo o domínio do destinatário não seja qualificado.
• reject_unknown_recipient_domain: Rejeita mensagens cujo o domínio do destinatário não pode ser resolvido por DNS.
Restrições de acesso
Com as restrições de acesso é possível também restringir um determinado domínio ou endereçoo IP, ou ainda um remetente específico, além de outras.
(Man 5 postconf)
A sintaxe das restrições são utilizadas no formato:
Verificação | O que faz
check_helo_access Verifica parâmetro passado para HELO
check
check
check
Com estes parâmetros a configuração deve ficar da seguinte maneira:
smtpd_recipient_restrictions =
reject_non_fqdn_sender,
reject_unknown_sender_domain,
permit_mynetworks,
reject_unauth_destination,
check_helo_access hash:/etc/postfix/helo_access,
check_client_access hash:/etc/postfix/client_access,
check_sender_access hash:/etc/postfix/sender_access,
check_sender_access regexp:/etc/postfix/sender_access.regexp,
check_recipient_access hash:/etc/postfix/recipient_access,
permit
Desta maneira, para fazermos com que nosso servidor de email bloqueie mensagens do domínio spammer.net edite o arquivo /etc/postfix/client
spammer.net REJECT
As ações que podem ser tomadas (colocadas nos mapas) são:
Ações | Efeito
OK Endereço/Email aceito
REJECT[texto] Endereço/Email rejetado
45[NN] texto Rejeita especificando qual o código e texto
DUNNO Age como se a chave não tivesse sido encontrada
HOLD [texto] Coloca a mensagem na fila de espera
DISCARD [texto] Faz de conta que aceita a mensagem, mas na verdade é descartada
Edite o arquivo client_access e configure para rejeitar o endereço de um cliente. Crie o mapa novamente e tente enviar um email deste cliente.
RBL - Realtime Black Lista
Para tentar vencer a briga contra os spammers as empresas juntaram-se coletando informações sobre as redes e servidores utilizados para enviar spam. Esses dados foram organizados e disponibilizados de maneira pública (ou não) para os administradores, foi criada então as ‘’black lists’‘. Para configuar que uma determinada ‘’black list’‘ seja utilizada para filtras os emails, adicione a seguinte configuração:
smtpd_recipient_restrictions =
reject_non_fqdn_sender,
reject_unknown_sender_domain,
permit_mynetworks,
reject_unauth_destination,
check_helo_access hash:/etc/postfix/helo_access,
check_client_access hash:/etc/postfix/client_access,
check_sender_access hash:/etc/postfix/sender_access,
check_sender_access regexp:/etc/postfix/sender_access.regexp,
check_recipient_access hash:/etc/postfix/recipient_access,
reject_rbl_client site.rbl.com,
reject_rbl_client outrosite.rbl.com,
permit
Inspeção de conteúdo
Com o postfix é possível fazer verificações no conteúdo das mensagens (cabeçalho e corpo) em tabelas, os parâmetros mais utilizados são:
Parâmetro | Função
header_checks Verifica cabeçalhos
body_checks Verifica o corpo da mensagem
mime_header checks texto Verifica cabeçalhos MIME somente
body_checks_size_limit Controla quantos bytes do corpo da mensagem são verificados
Esses filtros não são configurados dentro das classes de restrições de acesso, eles podem estar em qualquer local do arquivo de configuração do Postfix.
Exemplos:
/etc/postfix/main.cf
header_checks = regexp:/etc/postfix/header_checks.regexp
body_checks = regexp:/etc/postfix/body_checks.regexp
header checks.regexp
/^Subject: Fique rico/ REJECT
body checks.regexp
/filename=\"?.*\.(doc|tar|zip|exe)\.(pif|bat|com|exe)\"?$/
REJECT Possible Virus (double extension)
Autenticação
Até agora configuramos um servidor SMTP funcional que realiza alguns filtros que podem ser bem ‘’refinados’‘. Agora vamos fazer para que nosso servidor exija autenticação para os usuários que desejarem utilizá-lo. No Postfix é necessário utilizar a biblioteca SASL (Simple Authentication and Security Layer ) que oferece diversos métodos de autenticação, cada uma com suas características.
Autenticação é útil em:
• Controle (log) de usuários
• Permitir relay de usuários autenticados
• Servidor de email que envia mensagens para internet através de outro servidor de email.
Vamos configurar a autenticação utilizando do tipo plain text que utiliza o shadow do sistema, para isso edite o arquivo /usr/lib/sasl/smtpd.conf como abaixo:
pwcheck_method = saslauthd
Para configurar o daemon saslauthd que será responsável por ‘’pegar’‘ a senha e enviar para um dos diversos tipos de autenticação, devemos configurá-lo no arquivo /etc/sysconfig/saslauthd como abaixo:
MECH="shadow"
Você pode também rodar o comando "saslauthd -v" para visualizar uma lista disponível de mecanismos de autenticação.
Agora iniciamos o serviço:
[root@centos ]#
E por fim, configurar o Postfix com os seguintes parâmetros:
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
reject_non_fqdn_sender,
reject_unknown_sender_domain,
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_helo_access hash:/etc/postfix/helo_access,
check_client_access hash:/etc/postfix/client_access,
check_sender_access hash:/etc/postfix/sender_access,
check_sender_access regexp:/etc/postfix/sender_access.regexp,
check_recipient_access hash:/etc/postfix/recipient_access,
reject_rbl_client site.rbl.com,
reject_rbl_client outrosite.rbl.com,
permit
Reinicie o Postfix e configure um MUA de sua preferência para autenticar-se no seu servidor.
Configuração como ‘’Relay Agent’‘
Um servidor configurado como ‘’Relay Agent’‘ não envia as mensagens diretamente para os MTA dos provedores de destino, ele envia estas mensagens apenas para um servidor específico.
Para fazer esta configuração edite o arquivo main.fc e faça:
relayhost = smtp.meuprovedor.com.br
Desta maneira, o servidor já está atuando como ‘’Relay Agent’‘, mas em muitos casos os servidores exigem autenticação. Então deve-se configurar o Postfix como um cliente de autenticação SASL (diferente do passo anterior que configuramos como servidor de autenticação).
Habilitando a autenticação (cliente) no main.fc
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/saslpass
smtp_sasl_security_options =
Como definimos o arquivo do mapa anteriormente, agora temos que definir os servidores remotos e seus usuários e senhas. Edite o arquivo /etc/postfix/saslpass e faça:
smtp.meuprovedor.com.br bob:passw123
E depois, gere o mapa:
postmap /etc/postfix/saslpass
Domínios Virtuais
Provedores de acesso tem em seus servidores diversos domínios configurados,
para isso é utilizado Domínios Virtuais, vamos fazer uma configuração simples para
um domínio editando o main.fc:
virtual_alias_domains = virtual.com.br
virtual_alias_maps = hash:/etc/postfix/virtual
O arquivo /etc/postfix/virtual
postmaster@virtual.com.br postmaster
info@virtual.com.br fulano
joao@virtual.com.br jsilva
maria@virtual.com.br maria
compras@virtual.com.br gerencia@empresa.com.br
@virtual.com.br @empresa.com.br
Faça os testes enviando emails para estas contas.
E ficamos por ai. Grande Abraço a Todos.
8 comentários:
ola amigo, seu tutorial eh bem completo, porem testei a autenticacao de smtp e ela nao esta 100%, eu consigo enviar emais sem autenticar, verifique e se possivel corrija, no mais um bom trabalho. valeu, parabens.
Olá Marças, muito obrigado pelo elogio.
Mas seguinte, se você tiver cadastrado sua rede em mynetworks ele vai deixar passar pois a sequencia de esta como informada abaixo:
smtpd_recipient_restrictions =
reject_non_fqdn_sender,
reject_unknown_sender_domain,
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
Então ele vai deixar passar primeiro as permit_mynetworks depois os usuários autenticados permit_sasl_authenticated, mas você pode inverter a ordem de acordo com a sua necessidade ficando assim:
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_non_fqdn_sender,
reject_unknown_sender_domain...
Amigo Marcos Abadi, parabens pelo seu tutorial.
Segui o seu tutorial e não conssigo configurar o ’Relay Agent’.
A fim de tentar descobrir o que me está a falhar pergunto se onde diz:
MECH="shadow"
Não será antes:
MECH=shadow (sem as aspas)
Obrigado
Amigo Marcos Abadi, parabens pelo seu tutorial.
Segui o seu tutorial e não conssigo configurar o ’Relay Agent’.
A fim de tentar descobrir o que me está a falhar pergunto se onde diz:
MECH="shadow"
Não será antes:
MECH=shadow (sem as aspas)
Obrigado
Olá Vitor,
no arquivo /usr/lib/sasl/smtpd.conf
vai o seguinte conteúdo:
pwcheck_method: saslauthd
saslauthd_version: 2
e no arquivo /etc/sysconfig/saslauthd
vai:
MECH=shadow
(Sem aspas)
Alguem aqui fez curso na Mandriva :P
Olá Marcos parabéns pelo post muito explicativo teria como me ajudar? montei um servidor postfix em minha empresa para guarda os e-mail aqui com a gente só que depois de tudo configurado o postfix não esta baixando os email que esta no meu provedor tem como fazer isso, igual o Exchange da MS?
Muito Obrigado pelo post.
Paulo Carajas
Ótimo post Marcos,
gostaria de de pergunta se tem como configurar o postfix para baixar email de outro servidor como Exchange da MS.
att
Bom trabalho em seu Blogger
Postar um comentário