Eu encontrei dois métodos possíveis, mas talvez haja uma maneira melhor.
1º método:
smtpd_sender_restrictions =
reject_sender_login_mismatch,
permit_sasl_authenticated,
permit
Agora modifiquei meu smtpd_sender_login_maps
para retornar uma entrada de admin
se o domínio existir na tabela de domínios. Dessa forma, um registro é retornado, mesmo quando o emailadress não existe como maibox / alias, mas não quando um domínio externo é o endereço de saída.
table = domain
query = SELECT username AS allowedUser FROM mailbox WHERE username="%s" AND deleted_at IS NULL \
UNION SELECT goto FROM alias WHERE address="%s" AND active = 1 \
UNION select 'admin' from domain where domain = '%d'
2º método:
Essa abordagem usa uma pesquisa check_sender_access
que retorna uma ação de rejeição se o domínio for virtual e o usuário não for sasl_authenticated
.
smtpd_sender_restrictions =
reject_sender_login_mismatch,
permit_sasl_authenticated,
check_sender_access proxy:mysql:$config_directory/mysql_reject_virtual_domains.cf,
permit
mysql_reject_virtual_domains.cf
:
table = domain
query = select 'Reject 530 SMTP authentication is required' from domain where domain = '%d'
3º método (graças a masegaloeh ):
smtpd_sender_restrictions =
reject_sender_login_mismatch,
permit_sasl_authenticated
reject_unlisted_sender,
permit
Não sei quantas consultas de carga de código / SQL reject_unlisted_sender geram, pois verifica muitas coisas:
Solicite que o servidor SMTP Postfix rejeite e-mails de endereços de remetentes desconhecidos, mesmo quando nenhuma restrição explícita de reject_unlisted_sender
for especificada. Isso pode retardar uma explosão de e-mails forjados de worms ou vírus.
Um endereço é sempre considerado "conhecido" quando corresponde a um alias virtual (5) ou a um mapeamento canônico (5).
- O domínio do remetente corresponde a $ mydestination, $ inet_interfaces ou $ proxy_interfaces, mas o remetente não está listado em $ local_recipient_maps e $ local_recipient_maps não é nulo.
- O domínio do remetente corresponde a $ virtual_alias_domains, mas o remetente não está listado em $ virtual_alias_maps.
- O domínio do remetente corresponde a $ virtual_mailbox_domains, mas o remetente não está listado em $ virtual_mailbox_maps e $ virtual_mailbox_maps não é nulo.
- O domínio do remetente corresponde a $ relay_domains, mas o remetente não está listado em $ relay_recipient_maps e $ relay_recipient_maps não é nulo.