Configuração de um servidor SMTP com Postfix no CentOS Configuração de um servidor SMTP com Postfix no CentOS Resumo Este documento tem como objetivo fornecer uma documentação para implementação e administração de um servidor SMTP utilizando o Postfix. Introdução 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 encontramse 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 [root@centos ]# tail -f /var/log/maillog Teste a conexão com telnet, envie o email como na figura abaixo. [root@centos ]# telnet smtp.minhaempresa.com.br 25
Você acabou de enviar um email para o fulano, vamos confirmar: [root@centos ]# postqueue -p 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. [root@centos ]# postsuper -d 7A4DB834D 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: [root@centos ]# postconf -n 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: [root@centos ]# postconf -m 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: [root@centos ]# postalias /etc/postfix/aliases 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 ]# postmap /etc/postfix/client_access Para consultar o mapa e testar, faça: [root@centos ]# postmap -q 10.0.2.5 hash:/etc/postfix/client_access 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. [root@centos ]# postmap -q ola@naoresponda.com regexp:/etc/postfix/sender_access.regexp 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_restrictions Após o comando HELO ou EHLO smtpd_sender_restrictions Após o comando MAIL FROM smtpd_recipient_restrictions Após o comando RCPT TO smtpd_etrn_restrictions Quando do comando ETRN smtpd_restriction_classes Classe genéricas definidas pelo usuário
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_sender_domain que rejeita MAIL FROM cujo domínio não resolve para um registro A ou MX. 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_client_access Verifica o IP do cliente check_sender_access Verifica o endereço do remetente (MAIL FROM) check_recipient_access Verifica o endereço do destinatário (RCPT TO) 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_access e coloque o seguinte conteúdo: 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 ]# service saslauthd start 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.