exim
é poderoso e flexível o suficiente para atuar em qualquer função que você queira. Mas, para operações normais de SMTP, o único cenário necessário para a autenticação é "alguém quer enviar ou retransmitir a mensagem por mim". A submissão e a retransmissão devem ser strongmente restritas para evitar a excomunhão por DNSBLs. Se exim
serve para alguma sub-rede, s & r é normalmente restrito a essa sub-rede. Mas se os hosts do cliente estiverem vagando pela Internet com IPs alterados dinamicamente de várias sub-redes, a única possibilidade de restringir clientes é a autenticação.
Primeiro de tudo você tem que habilitar a criptografia SMTP com SSL / TLS
daemon_smtp_ports = 25 : 465 : 587
tls_on_connect_ports = 465
tls_certificate = /path/exim.crt
tls_privatekey = /path/exim.key
O par autoassinado gerado por openssl
é suficiente. A criptografia é uma opção para o SMTP simples na porta 25 ou MSA em 587 e obrigatória para SMTPS em 465.
A autenticação só será possível para clientes criptografados para evitar a aprovação da passagem de login pela conexão não criptografada:
auth_advertise_hosts = ${if eq{$tls_cipher}{}{}{*}}
Qualquer não-emtpy $tls_cipher
gerado quando o TLS é estabelecido é um bom sinal para iniciar a autenticação.
Agora podemos usar a ACL:
acl_smtp_connect = acl_conn
acl_smtp_rcpt = acl_rcpt
acl_smtp_data = acl_data
begin acl
.....
acl_rcpt:
accept authenticated = *
accept hosts = : +relay_from_hosts
require domains = +relay_to_domains : +local_domains
deny
Aqui aceitamos a mensagem para s & r em três casos:
- se o cliente for autenticado
- se o cliente estiver na lista de hosts / sub-redes conhecidos
- se a mensagem estiver sendo recebida para um de nossos domínios.
- o último
deny
não é necessário, já que a terceira regra fazdeny
implicitamente, mas para melhor compreensão eu gosto de colocar a aceitação / negação final explícita em todos os casos.
Os outros MTAs são geralmente passados por terceira regra, não importando se são autenticados ou não. Não podemos exigir autenticação de outros MTAs, pois isso não é obrigatório por RFCs. Mas nós restringimos strongmente todos os MTAs externos às mensagens apenas para nossos domínios. Nós não retransmitimos suas mensagens para os outros domínios sob nenhuma circunstância.