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:)