Meu exim retransmite todos os e-mails recebidos para retransmissões SMTP de terceiros. Eles usam autenticação smtp (nome de usuário/senha).
Parece que só posso definir UM nome de usuário/senha na begin authenticators
seção de configuração do Exim. Quero rotear determinados e-mails por meio de um retransmissor (com seu próprio nome de usuário/senha de autenticação) e outro e-mail por meio de um segundo retransmissor (seu nome de usuário/senha de autenticação é diferente do primeiro).
Aqui está grande parte da minha configuração. Os begin routers
domínios de retransmissão na +local_domains
lista para smtp-relay-1
e os demais retransmitem para smtp-relay-2
.
begin routers
my_domains_relay:
debug_print = "R: my_domains_relay for $local_part@$domain"
driver = manualroute
domains = +local_domains
transport = remote_smtp_smarthost
route_list = * "<+ smtp-relay-1.example.com:465"
host_find_failed = defer
no_more
smart_host_relay:
debug_print = "R: smart_host_relay for $local_part@$domain"
driver = manualroute
transport = remote_smtp_smarthost
route_list = * "<+ smtp-relay-2.example.net:465"
host_find_failed = defer
no_more
begin transports
remote_smtp_smarthost:
debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
driver = smtp
port = 465
hosts_require_tls = *
hosts_require_auth = *
protocol = smtps
begin authenticators
login:
driver = plaintext
public_name = PLAIN
client_send = ^my-username^top-secret-password
O que eu quero é definir autenticação de nome de usuário/senha separada na begin authenticators
seção e atribuir cada um a um único roteador/transporte. No momento, o nome de usuário/senha de autenticação é global e usado para todos os relés.
A documentação do exim diz que corresponde ao public_name com uma autenticação anunciada pelo servidor. Portanto, se ambos os meus relés SMTP anunciam como AUTH PLAIN
, ambos usam o nome de usuário/senha do autenticador na configuração. Espero que haja uma configuração que me permita vincular uma instância de autenticadores a um roteador/transporte específico, mas não vejo como.
Responder1
Você pode usar a client_condition
opção autenticador (cf.Seção Autenticação SMTPdo manual).
O Exim aceita no máximo dois autenticadores para um determinado nome público: como autenticador do lado do cliente e um autenticador do lado do servidor.
Porém a funcionalidade que você procura já está na configuração padrão do Debian: baixe oexim4-configempacote e extraia os arquivos (é um ar
arquivo contendo dois tar
arquivos).
O arquivo /etc/exim4/conf.d/auth/30_exim4-config_examples
contém autenticadores de cliente que:
- leia a senha do
/etc/exim4/passwd.client
arquivo, então a senha não está na configuração do Exim. O formato do arquivo é uma linha por servidor no<servername>:<username>:<password>
formato, - escolha a senha de acordo com o host,
- são bem testados, então você não precisa testar as expansões de strings do Exim.
A configuração do Debian resume-se ao seguinte autenticador de cliente:
# this returns the matching line from passwd.client and doubles all ^
PASSWDLINE=${sg{\
${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$value}fail}\
}\
{\\N[\\^]\\N}\
{^^}\
}
plain:
driver = plaintext
public_name = PLAIN
.ifndef AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS
client_send = "<; ${if !eq{$tls_out_cipher}{}\
{^${extract{1}{:}{PASSWDLINE}}\
^${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}\
}fail}"
.else
client_send = "<; ^${extract{1}{:}{PASSWDLINE}}\
^${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}"
.endif
Responder2
No mesmo autenticador, você pode usar if-condition para selecionar o conjunto de nome de usuário: senha para autenticar. Mas você precisa da “condição” para escolher qual relé será usado primeiro.
Por exemplo, para enviar correio para[e-mail protegido]usará smtp-relay-1.example.com autenticado por meu nome de usuário: senha secreta e[e-mail protegido]usará smtp-relay-2.example.com autenticado por my-username2:top-secret-password2
Os roteadores e transportes serão os mesmos
begin routers
my_domains_relay:
debug_print = "R: my_domains_relay for $local_part@$domain"
driver = manualroute
domains = +local_domains
transport = remote_smtp_smarthost
route_list = * "<+ smtp-relay-1.example.com:465"
host_find_failed = defer
no_more
smart_host_relay:
debug_print = "R: smart_host_relay for $local_part@$domain"
driver = manualroute
transport = remote_smtp_smarthost
route_list = * "<+ smtp-relay-2.example.net:465"
host_find_failed = defer
no_more
begin transports
remote_smtp_smarthost:
debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
driver = smtp
port = 465
hosts_require_tls = *
hosts_require_auth = *
Os autenticadores precisam mudar para algo assim
begin authenticators
login:
driver = plaintext
public_name = PLAIN
client_send = ^${if eq{$domain}{domain1.com}\
{my-username}\
{my-username2}}\
^${if eq{$domain}{domain1.com}\
{top-secret-password}\
{top-secret-password2}}