exim: verificando aliases contra usuários autenticados?

1

É possível verificar o alias do remetente em relação ao usuário autenticado, SEM reescrever o campo De? Por exemplo, dado um arquivo de alias (muito simplificado) como:

[email protected]:       [email protected]
[email protected]: [email protected]
[email protected]: [email protected]
[email protected]:       [email protected]

[email protected]:       [email protected]

Eu quero que um usuário autenticado1 possa enviar como a1, a2, a3 ou [email protected], mas NÃO [email protected], e quero apenas que um usuário autenticado2 possa enviar como a5 @ example .com AND Eu quero que eles possam usar os aliases no campo De: dos e-mails que eles enviam (ou seja, eu não quero que o Exim reescreva os campos De / Remetente como "control = submissão ").

Funcionalmente, isso exigiria que o Exim reduzisse o alias do remetente para o endereço roteável final e, em seguida, permitisse acesso a esse valor em uma acl para compará-lo com o usuário autenticado. Eu pensei que o verify = remetente faria isso, mas o teste não mostra que seja o caso.

No meu acl_check_rcpt eu tentei o seguinte sem efeito, como qualquer usuário autenticado ainda pode enviar como qualquer alias válido ou outro usuário local, e o $ sender_address é o alias e não a conta real subjacente:

  accept
    authenticated = *
    verify = sender
    logwrite = authenticated user '$authenticated_id' sending as '$sender_address' which \
        is '$sender_address_data' or '$address_data', if error: '$sender_verify_failure'

De acordo com a documentação do Exim (seção 26) , $ sender_address_data deve conter o resultado da pesquisa do remetente após um verify = sender, mas os logs mostram essa variável como sempre vazia:

authenticated user 'user1' sending as '[email protected]' which is '' or '', if error: ''

(Observe que controle = envio tem pouco efeito sobre isso, exceto para reescrever os cabeçalhos De / Remetente.)

Estou apenas fazendo algo errado? Existe uma maneira de verificar se o usuário autenticado pode enviar valiosamente o alias do qual está enviando?

    
por simpleuser 23.10.2015 / 16:21

1 resposta

1

Eu tenho esse trabalho, e aqui está o que eu fiz.

Primeiro, em TODOS os roteadores que lidam com usuários locais, defina a variável exim address_data como $ {local_part}:

real_local:
  driver              = accept
  domains             = +local_domains
  local_part_prefix   = real-
  check_local_user
  transport           = LOCAL_DELIVERY
  # Set this so acl can use it
  address_data        = ${local_part}

Em seguida, configure uma acl para verificar o remetente em relação ao usuário autenticado:

acl_smtp_mail = acl_check_sender_vs_auth

E faça com que esse novo acl compare o usuário autenticado com o valor da variável address_data e garanta que seja o mesmo:

# Ensure that the MAIL FROM: address matches what the authenticated
# user is, if authentiation is used
acl_check_sender_vs_auth:
    accept
       authenticated = *
       # verify MUST be above condition to resolve $sender_address_data
       verify = sender
       condition = ${if eqi{$authenticated_id}{$sender_address_data}{yes}{no}}
       endpass
       logwrite = AUTH OK - authenticated user '$authenticated_id' sending email from '$sender_address', which belongs to '$sender_address_data'

    deny
       authenticated = *
       # verify MUST be above condition to resolve $sender_address_data
       verify = sender
       !condition = ${if eqi{$authenticated_id}{$sender_address_data}{yes}{no}}
       message = User '$authenticated_id' tried to send mail from '$sender_address', but that email address belongs to someone else
       logwrite = AUTH ERROR - authenticated user '$authenticated_id' tried sending from '$sender_address', but that address belongs to '$sender_address_data'

    accept
    
por 23.12.2015 / 05:58

Tags