Eu tenho uma instância Postfix como parte de uma configuração modoboa que verifica se os usuários autenticados só podem enviar a partir de endereços de e-mail próprios usando as seguintes regras ( main.cf
):
…
smtpd_sender_login_maps =
${db_driver}:/shared/modoboa/postfix/sql-sender-login-mailboxes.cf
${db_driver}:/shared/modoboa/postfix/sql-sender-login-aliases.cf
${db_driver}:/shared/modoboa/postfix/sql-sender-login-mailboxes-extra.cf
smtpd_sender_restrictions =
permit_mynetworks
reject_sender_login_mismatch
permit
…
recipient_delimiter = -
Com os seguintes arquivos de pesquisa de mapa de login (gerados por modoboa na inicialização, incluídos apenas para conclusão !):
/shared/modoboa/postfix/sql-sender-login-mailboxes.cf
:
# This file was generated on Jan. 7, 2018, 5:55 p.m. by running:
# manage.py generate_postfix_maps --destdir /shared/modoboa/postfix
# DO NOT EDIT!
user = modoboa
password = IMNOTTHATDUMB
dbname = modoboa
hosts = postgresql
query = SELECT email FROM core_user WHERE email='%s' AND is_active
/shared/modoboa/postfix/sql-sender-login-aliases.cf
:
# This file was generated on Jan. 7, 2018, 5:55 p.m. by running:
# manage.py generate_postfix_maps --destdir /shared/modoboa/postfix
# DO NOT EDIT!
user = modoboa
password = IMNOTTHATDUMB
dbname = modoboa
hosts = postgresql
query = SELECT mb.address || '@' || dom.name FROM admin_mailbox mb INNER JOIN modoboa_admin_aliasrecipient alr ON alr.r_mailbox_id=mb.id INNER JOIN admin_domain dom ON dom.id=mb.domain_id INNER JOIN admin_alias al ON alr.alias_id=al.id WHERE al.enabled AND al.address='%s'
/shared/modoboa/postfix/sql-sender-login-mailboxes-extra.cf
:
# This file was generated on Jan. 7, 2018, 5:55 p.m. by running:
# manage.py generate_postfix_maps --destdir /shared/modoboa/postfix
# DO NOT EDIT!
user = modoboa
password = IMNOTTHATDUMB
dbname = modoboa
hosts = postgresql
query = SELECT mb.address || '@' || dom.name FROM admin_mailbox mb INNER JOIN admin_senderaddress sad ON sad.mailbox_id=mb.id INNER JOIN admin_domain dom ON dom.id=mb.domain_id WHERE sad.address='%s'
TL; DR : Esses arquivos de mapa geram uma lista de todos os possíveis endereços de e-mail que o usuário possui no sistema.
Agora para o meu problema : Quando eu tenho um usuário [email protected] registrado no sistema, essas regras garantem que ele será capaz de enviar e-mails de sua principal endereço, bem como todos os aliases registrados, mas não do tipo [email protected] porque esse endereço pertence a um usuário diferente (ou não). Meu problema agora, porém, é que se [email protected] tentar enviar um e-mail de [email protected] (para o qual ele também receberá e-mail devido à recipient_delimiter ) ele receberá um erro:
5.7.1 <[email protected]>: Sender address rejected: not owned by user [email protected].
Isso porque o Postfix irá procurar o nome de login [email protected] usando o smtpd_sender_login_maps e receba uma lista de possíveis aliases (incluindo [email protected] ) em resposta. Ele tentará comparar o endereço do remetente [email protected] com essa lista e descobrirá que não faz parte dessa lista e desistirá.
A minha pergunta é a seguinte: : Existe uma maneira de forçar o postfix a aplicar o recipient_delimiter ao pesquisar / validar endereços de remetentes? Se não, este é possivelmente um bug que deve ser reportado? (Eu estou não tentando reescrever o endereço do remetente, eu só quero que ele seja normalizado durante a validação!)
Obrigado por qualquer ajuda / ponteiros!
Tags postfix