Outro dia um amigo teve um problema de senhas fracas em seu servidor de emails.
Utilizando-se de brute-force obtiveram senhas de emails no servidor e com isso spammers dispararam emails através de uma conta válida autenticando-se via SASL. O remetente dos email (mail from) eram forjado com outros endereços.
Ele me perguntou se eu sabia como bloquear emails forjados e comecei a pesquisar.
A princípio pensei em desenvolver filtro de conteúdo (content filter), abrir as mensagens com um sed e comparar o SASL com o Mail From da mensagem. Mas logo depois resolvi pesquisar um pouco mais no site do Postfix.
Grata a surpresa o Postfix já possui essa proteção, foi então que encontrei o seguinte parâmetro:
reject_sender_login_mismatch
Reject the request when $smtpd_sender_login_maps specifies an owner for the MAIL FROM address, but the client is not (SASL) logged in as that MAIL FROM address owner; or when the client is (SASL) logged in, but the client login name doesn’t own the MAIL FROM address according to $smtpd_sender_login_maps.
Sabido que era a solução do problema, configurei o postfix da seguinte maneira.
Editei o arquivo /etc/postfix/main.cf e adicionei as seguintes linhas.
———————————————————————————————
smtpd_sender_login_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_sender_login_maps.cf
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $sender_bcc_maps $recipient_bcc_maps $smtp_generic_maps $lmtp_generic_maps $smtpd_sender_login_maps
smtpd_sender_restrictions = reject_sender_login_mismatch
———————————————————————————————
Em seguida foi criado o arquivo referenciado no main.cf do postfix (/etc/postfix/sql/mysql_virtual_sender_login_maps.cf) com o seguinte conteúdo.
———————————————————————————————
user = postfixusr
password = postfixpassword
hosts = localhost
dbname = postfix
query = SELECT username FROM mailbox WHERE username=’%s’ AND active = ’1′
———————————————————————————————
Lembrando que os campos da tabela podem estar diferentes, o exemplo segue conforme as tabelas utilizadas pelo postfixadmin (www.postfixadmin.org)
Se você deseja aplicar o bloqueio de emails forjados somente para usuários autenticados, altere a restrição de envio com o seguinte parâmetro “reject_authenticated_sender_login_mismatch”
Então reinicia-se o postfix (#postfix reload), e está pronto o bloqueio da saída de emails forjados do servidor.
Fonte: http://www.postfix.org/postconf.5.html#reject_sender_login_mismatch
Outros parâmetros que merecem atenção no filtro de emails indesejados.
reject_sender_login_mismatch, reject_unauthenticated_sender_login_mismatch, reject_unknown_sender_domain, reject_unlisted_sender
Tags: auth, bloquear, bruteforce, emails, forjados, impedir, mta, mysql, postfix, postfixadmin, reject_authenticated_sender_login_mismatch, reject_sender_login_mismatch, rejeitar, saida, sasl, smtpd_sender_login_maps, spam
[...] Enviado por Wagner Assis (wagnerΘlinuxadm·com·br): “Se a guerra contra o Spam parece não ter fim é importante se proteger para não trabalhar como um zumbi de spammers. Usuários insistem em manter senhas fracas em seus emails e com isso através de ataques brute-force capturam senhas e começam a utilizar servidores legítimos para disparar seus “ataques”. O artigo “Impedindo a saída de emails forjados no Postfix” da http://www.linuxadm.com.br dá uma ajuda aos administradores explicando como proteger o servidor impedindo a saída de emails forjados.” [referência: linuxadm.com.br] [...]
Como ficaria as regras para quem usa mailbox?
Obrigado por fazer o comentário.
A solução apresentada independe do formato da caixa postal, pois refere-se somente aos parâmetros de validação de usuário (SASL)
O funcionamento é simples, compara-se o mail from do email de saída ao email (usuário) utilizado na autenticação para o envio de email.
Qualquer dúvida queira postar o erro para que possa auxiliá-lo.
Abraços
Wagner Assis
Olá Wagner,
Recentemente esse artigo me ajudou aos montes, porem tenho uma duvida:
Como trato aqueles malditos spams que utilizam a conta propriamente dita para enviar os spams?
quando o e-mail do sender é o e-mail do meu dominio…
Obrigado pela resposta Wagner.
Preciso esclarecer mais uma coisinha:
No contesto do seu post, a query mysql:
SELECT username FROM mailbox WHERE username=’%s’ AND active = ’1′
Ela pega o usuário do “from=<", que seria o %s ali e verifica da base de dados se ele existe e se ele está ativo, seria isso ?
–
"Deve-se aprender sempre, até mesmo com um inimigo."
(Isaac Newton)
Atenciosamente,
Saul Figueiredo
Analista FreeBSD/Linux
Linux Professional Institute Certification Level 2
saulfelipecf@gmail.com
saul-felipe@hotmail.com