Com a preciosa ajuda do @tarleb (que me apontou na direção certa), consegui chegar a essa solução:
- Adicione
reject_sender_login_mismatch
ao final da seçãosmtpd_sender_restrictions
; - Como eu tenho
virtual_mailbox_domains
evirtual_alias_maps
com base nas consultas do MySQL, adicionesmtpd_sender_login_maps = mysql:/etc/postfix/mysql-virtual_sender-login-maps.cf
. Estes são os mapas usados pelo postfix para garantir que o email de login do remetente e o campofrom
correspondam; -
Crie
/etc/postfix/mysql-virtual_sender-login-maps.cf
com o seguinte conteúdo:user = emailserveruser password = sdfjn1234ns hosts = 127.0.0.1 dbname = mailstack query = SELECT * FROM (SELECT email FROM 'virtual_users' WHERE email = '%s' UNION SELECT destination FROM 'virtual_alias' WHERE source = '%s' ) a
Como funciona?
O postfix lhe dará o e-mail From
como %s
e excetuará receber como resultado de uma consulta um endereço que corresponda ao usado na autenticação SMTP.
Nesse caso, primeiro consultamos a tabela virtual_users
e, se nada for retornado dela (ou seja, não existe um usuário real com esse email), consultamos virtual_alias
para obter o endereço destination
(uma caixa de correio de usuário real ) que corresponde a um possível alias de email (nosso campo source
).
Se não houver correspondência, a consulta não retorna nada, isso significa que: 1) não há esse usuário com esse e-mail 2) não há esse alias para nenhum usuário com esse e-mail - o Postfix fornece ao cliente de e-mail Sender address rejected: not owned by user
erro.
Espero que isso ajude alguém no futuro com uma configuração semelhante!