Exim: força a autenticação de e-mail para usuários de domínios locais

1

Estou configurando o exim4 para usuários virtuais com o dovecot e o postgresql e tenho um problema que não consigo resolver, a situação é esta:

Eu preciso disso quando um usuário 'localdomain' tenta enviar um email para outro usuário 'localdomain' ou usuário estrangeiro, precisa se autenticar, caso contrário, recusar a operação.

Praticamente estou tentando evitar qualquer tipo de retransmissão aberta SMTP.

Na verdade, o smtp funciona bem, só precisa definir esse requisito, e não consigo encontrar a maneira correta de configurar o exim corretamente para obter esse comportamento (uma regra de acl ou rota ou transporte?)

Como eu poderia definir essa configuração?

Exemplo 1

220 my-server ESMTP Exim 4.84 Thu, 31 Mar 2016 22:26:28 +0000
ehlo localhost
250-my-server Hello localhost [192.168.1.X]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250-AUTH PLAIN LOGIN
250 HELP
mail from: [email protected]
250 OK
rcpt to: [email protected]
250 Accepted
data 
354 Enter message, ending with "." on a line by itself
this must not happen, the user '[email protected]' is not authenticated,
he must not be able to send any message yet until of use 
of 'auth login' or 'auth plain' because is a user of local domains.
.
250 OK id=1all3Q-0004l2-V4

Exemplo 2

220 my-server ESMTP Exim 4.84 Thu, 31 Mar 2016 22:58:56 +0000
ehlo localhost
250-my-server Hello localhost [192.168.1.X]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250-AUTH PLAIN LOGIN
250 HELP
mail from: [email protected]
250 OK
rcpt to: [email protected]
250 Accepted
data
354 Enter message, ending with "." on a line by itself
this is already valid.
.
250 OK id=1allZR-00050E-Sq

Arquivo de configuração da ACL RCPT-TO

acl_check_rcpt:
  accept
    hosts = :
    control = dkim_disable_verify

  .ifdef CHECK_RCPT_LOCAL_LOCALPARTS
  deny
    domains = +local_domains
    local_parts = CHECK_RCPT_LOCAL_LOCALPARTS
    message = restricted characters in address
  .endif

  deny
    domains = !+local_domains
    local_parts = CHECK_RCPT_REMOTE_LOCALPARTS
    message = restricted characters in address
  .endif

  accept
    .ifndef CHECK_RCPT_POSTMASTER
    local_parts = postmaster
    .else
    local_parts = CHECK_RCPT_POSTMASTER
    .endif
    domains = +local_domains : +relay_to_domains

  .ifdef CHECK_RCPT_VERIFY_SENDER
  deny
    message = Failed!
    !acl = acl_local_deny_exceptions
    !verify = sender
  .endif

  deny
    !acl = acl_local_deny_exceptions
    senders = ${if exists{CONFDIR/local_sender_callout}\
                         {CONFDIR/local_sender_callout}\
                   {}}
    !verify = sender/callout

  accept
    hosts = +relay_from_hosts
    control = submission/sender_retain
    control = dkim_disable_verify

  accept
    authenticated = *
    control = submission/sender_retain
    control = dkim_disable_verify

  require
    message = Relay denied!
    domains = +local_domains : +relay_to_domains

  require
    verify = recipient

  deny
    !acl = acl_local_deny_exceptions
    recipients = ${if exists{CONFDIR/local_rcpt_callout}\
                            {CONFDIR/local_rcpt_callout}\
                      {}}
    !verify = recipient/callout

  deny
    message = sender envelope address $sender_address is locally blacklisted here. If you think this is wrong, get in touch with postmaster
    !acl = acl_local_deny_exceptions
    senders = ${if exists{CONFDIR/local_sender_blacklist}\
                   {CONFDIR/local_sender_blacklist}\
                   {}}

  deny
    message = sender IP address $sender_host_address is locally blacklisted here. If you think this is wrong, get in touch with postmaster
    !acl = acl_local_deny_exceptions
    hosts = ${if exists{CONFDIR/local_host_blacklist}\
                 {CONFDIR/local_host_blacklist}\
                 {}}

  accept
    domains = +relay_to_domains
    endpass
    verify = recipient

  accept
    
por travatuh 01.04.2016 / 02:11

2 respostas

0

Por fim, resolvi o problema sozinho, só preciso adicionar a próxima instrução ao meu arquivo de configuração da ACL:

accept
   message = must auth
   domains = +local_domains : +relay_to_domains
   senders = : regex-expresion

Isso também pode ser resolvido com a condição statemen e perl script's.

Obrigado pela ajuda.

    
por 06.04.2016 / 01:23
0

Apenas assegure que local_domains não inclui nenhum host do qual você deseja exigir autenticação. Isso impedirá uma situação de retransmissão aberta para esses servidores.

No entanto, é comum que os servidores enviem e-mails pelo MX para a Internet. Geralmente, você não deseja exigir autenticação nesse caso.

Assegure-se de que relay_to_domains esteja vazio ou contenha apenas domínios para os quais você deseja permitir a retransmissão. (Você é um retransmissor aberto para qualquer domínio nessa lista.)

Certifique-se de solicitar STARTTLS antes de aceitar solicitações de AUTH. Caso contrário, suas senhas serão facilmente detectadas.

    
por 01.04.2016 / 05:22