Como definir o exim4 para enviar e-mails em qualquer lugar, mas somente de usuários autorizados?

4

Lutando para entender meus vários controles de relay na configuração do exim4.

Eu posso enviar e-mails do meu servidor, posso enviar e-mails de casa e trabalho (porque eu adicionei explicitamente netblocks adequados para isso), mas não consigo um programa que eu escrevi para enviar e-mail para um endereço do googlemail um relé 550 não é permitido.

O meu objetivo é poder enviar e-mails para qualquer endereço de e-mail (válido) de qualquer servidor, desde que eu forneça um nome de usuário e senha adequados. Eu suspeito que o SASL entra em jogo aqui, mas atualmente estou confuso entre os domínios pelos quais posso passar e as máquinas pelas quais posso passar.

Alguém capaz de desvendar isso?

[NOTA: Caixa do Ubuntu, então configure o estilo Debian para o exim4]

    
por Rob Cowell 28.11.2011 / 15:39

1 resposta

5

Isso é semelhante à minha configuração exim. De dentro da minha rede eu posso enviar email para qualquer domínio, mas de fora da rede o único email que o exim entregará é o meu domínio local, a menos que o usuário autentique para exim primeiro. Dessa forma, posso enviar e-mails através do meu servidor de e-mail de qualquer lugar do mundo, desde que eu autentique primeiro.

As seções críticas da minha configuração são:

domainlist local_domains = @ : example.com
domainlist relay_to_domains =
hostlist   relay_from_hosts = 127.0.0.1 : 192.168.0.0/24 : 2001:111:1111::/64

Isso basicamente define meu domínio local para o qual o exim sabe que é 'home' para example.com . Ele também define os intervalos de sub-rede para os quais o exim tem permissão para retransmitir qualquer email. relay_to_domains está em branco, porque não há outros domínios para os quais eu vou retransmitir, além de example.com .

tls_advertise_hosts = *

Anuncio a disponibilidade de TLS para que qualquer cliente possa autenticar por TLS.

acl_check_rcpt:
    [...]
    accept  hosts         = +relay_from_hosts
    accept  authenticated = *
    require message = relay not permitted
        domains = +local_domains : +relay_to_domains

Esse acl faz algumas verificações de onde o e-mail está indo e quem o enviou antes de decidir se deve retransmitir ou não. A primeira linha retransmite mensagens de hosts dentro da rede interna definida anteriormente. A segunda linha retransmite mensagens de qualquer usuário autenticado. O terceiro e o quarto exigem que, se alguma condição anterior não tiver sido atendida, apenas retransmita para meus domínios locais.

A seção final é os autenticadores, para que o exim saiba como é um usuário autenticado. O meu parece assim:

plain_saslauthd_server:
  driver = plaintext
  public_name = PLAIN
  server_condition = ${if saslauthd{{$auth2}{$auth3}}{1}{0}}
  server_set_id = $auth2
  server_prompts = :

login_saslauthd_server:
  driver = plaintext
  public_name = LOGIN
  server_prompts = "Username:: : Password::"
  # don't send system passwords over unencrypted connections
  server_condition = ${if saslauthd{{$auth1}{$auth2}}{1}{0}}
  server_set_id = $auth1

Obviamente, isso requer uma compilação exim que tenha o recurso sasl compilado, junto com um daemon SASL em funcionamento no sistema. Eu uso Cyrus SASLD e da memória, é bastante simples de instalar e esquecer.

Na verdade, estou executando isso no OpenBSD, então não tenho certeza de como essas etapas seriam exatamente traduzidas para uma caixa Ubuntu de split-config. No entanto, deve ser suficiente para você ir:)

    
por 28.11.2011 / 16:11

Tags