Postfix: Usuários representando outros usuários no mesmo domínio

1

Eu tenho um servidor de e-mail postfix em execução e estava tudo bem ... até que alguém decidiu se passar por outros usuários. A situação atual é:

Nos cabeçalhos de e-mails falsificados, posso ver isso:

From: User2 <[email protected]>

(Authenticated sender: [email protected])

É evidente que o usuário está usando seu endereço de e-mail legítimo / senha para autenticar no servidor e, em seguida, define o cabeçalho From para o usuário que ele deseja representar.

Eu mesmo testei isso e funciona. No entanto, se eu alterar o domínio para algum domínio que não esteja na tabela de domínios virtuais, o cliente de email diz que o servidor recusou o email.

Existe uma maneira de garantir que [email protected] só possa enviar e-mails com o cabeçalho from correspondente a seu e-mail e não a outra pessoa na tabela de domínios virtuais? - Dê um erro como acontece quando o domínio não está listado.

Minhas restrições atuais de smtpd são:

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_unauth_pipelining, reject_unknown_sender_domain, reject_unknown_recipient_domain

smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client cbl.abuseat.org

smtpd_sender_restrictions = permit_mynetworks, reject_unknown_address, reject_unknown_sender_domain, reject_non_fqdn_sender

Observação : No servidor há endereçamento adicional (ex. user1+something@ mydomain.dev entregará emails para [email protected] ) e também mapas de alias virtuais. Para alguém postar uma solução para o problema acima, você pode ter certeza de que o usuário ainda é capaz de "representar" os próprios e-mails com base em endereços de mais ou aliases. Eu preciso então poder enviar de [email protected] ou [email protected] (somente se eles pertencerem a eles).

Obrigado.

    
por TCB13 25.01.2016 / 03:23

1 resposta

3

Com a preciosa ajuda do @tarleb (que me apontou na direção certa), consegui chegar a essa solução:

  1. Adicione reject_sender_login_mismatch ao final da seção smtpd_sender_restrictions ;
  2. Como eu tenho virtual_mailbox_domains e virtual_alias_maps com base nas consultas do MySQL, adicione smtpd_sender_login_maps = mysql:/etc/postfix/mysql-virtual_sender-login-maps.cf . Estes são os mapas usados pelo postfix para garantir que o email de login do remetente e o campo from correspondam;
  3. Crie /etc/postfix/mysql-virtual_sender-login-maps.cf com o seguinte conteúdo:

    user = emailserveruser
    password = sdfjn1234ns
    hosts = 127.0.0.1
    dbname = mailstack
    query = SELECT * FROM (SELECT email FROM 'virtual_users' WHERE email = '%s' UNION SELECT destination FROM 'virtual_alias' WHERE source = '%s' ) a
    

Como funciona?

O postfix lhe dará o e-mail From como %s e excetuará receber como resultado de uma consulta um endereço que corresponda ao usado na autenticação SMTP.

Nesse caso, primeiro consultamos a tabela virtual_users e, se nada for retornado dela (ou seja, não existe um usuário real com esse email), consultamos virtual_alias para obter o endereço destination (uma caixa de correio de usuário real ) que corresponde a um possível alias de email (nosso campo source ).

Se não houver correspondência, a consulta não retorna nada, isso significa que: 1) não há esse usuário com esse e-mail 2) não há esse alias para nenhum usuário com esse e-mail - o Postfix fornece ao cliente de e-mail Sender address rejected: not owned by user erro.

Espero que isso ajude alguém no futuro com uma configuração semelhante!

    
por 25.01.2016 / 14:35

Tags