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.

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! ![]()




