Skip to content


Evitando spoofing de remetente no postfix

Um recurso existente no postfix e que poucas pessoas usam é a validação do campo MAIL FROM para usuários do domínio, suportada nativamente.

Um exemplo seria alguém enviar um email interno (após ter se autenticado corretamente), se passando pelo chefe (crianças, não tentem fazer isso em casa sem a supervisão de um adulto).

vejamos:


235 2.0.0 Authentication successful
mail from:<chefe@seudominio.com>
250 2.1.0 Ok
rcpt to:<vitima@seudominio.com>
data
Assunto: vc foi promovido
A partir do mês que vem você receberá o dobro do salário! Parabéns!
.
250 2.0.0 Ok: queued as 2C702C192C8
quit

E então o servidor aceitou a mensagem, e seu amigo ficou feliz por alguns minutos, antes de ser avisado que era uma brincadeira.

postfix

Corrigindo o relay

Essa dica se destina a quem usa uma solução de correio com postfix, sasl, mysql, etc. Vou assumir que você já tem a solução instalada e que entende os conceitos que irei utilizar. Caso você não esteja familiarizado, um tutorial legal de como instalar e integrar a solução pode ser lido no vivaolinux.

Primeiramente devemos fechar o relay interno. Apenas usuários autenticados e o próprio servidor de correio devem enviar emails.

Para isso, no arquivo main.cf, acrescente a seguinte linha:
mynetworks_style = host

Assegure-se de que a variável mynetworks não exista, ou então esteja comentada.

Como você é uma pessoa cuidadosa e está utilizando autenticação via SASL (você está né?), o seu campo smtpd_recipient_restrictions deve ser parecido com:
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, etc

Verificando o campo MAIL FROM

Esse foi o que deu mais trabalho. Caso um remetente do seu domínio seja fornecido – quer exista ou não – por padrão o postfix tenta enviar a mensagem para o destinatário. A partir do postfix 2.1, existe o controle reject_sender_login_mismatch, que irá fazer a verificação do usuário autenticado via SASL, e ver se o mesmo bate com os autorizados para ele.

A autorização é feita via tabelas, utilizando o controle smtpd_sender_login_maps, que no meu caso utiliza o mysql, mas vc pode usar hash, ldap, etc.

Seria algo parecido com:

smtpd_sender_login_maps = mysql:/etc/postfix/access.cf

E então no campo smtpd_sender_restrictions, vc acrescenta a verificação:
smtpd_sender_restrictions = reject_non_fqdn_sender,
reject_unknown_sender_domain,
reject_unauthenticated_sender_login_mismatch,
reject_sender_login_mismatch

o arquivo access.cf:

user=postfix-user
password=senha
dbname=postfix
table=mailbox
select_field=username
where_field=username
hosts=localhost

Voilá! Agora o usuário só envia email se estiver autenticado,
e somente se o MAIL FROM corresponder com o usuário logado! 🙂

Posted in Admin. de Sistemas, Debian.

Tagged with , .


2 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Rfacker says

    Parabéns por ter aprendido e aplicado no seu work, brow… Hehehe…

Continuing the Discussion

  1. Protegendo-se de spoffing de usuários no Postfix « A Página do Relâmpago Elétrico linked to this post on 22/10/2008

    […] Isso é ou deveria ser um complemento para um post publicado pelo Eder Marques […]



Some HTML is OK

or, reply to this post via trackback.