Como fazer com que o endereço do remetente seja “log-in-user@example.org” no Postfix?


15

Eu configurei um servidor Postfix com SMTP AUTH (STARTTLS na porta 587). Todos os meus usuários estão no domínio "example.org". Desejo fazer com que o endereço do remetente seja "log-in-user@example.org".

Aprendi que isso pode ser alcançado com as opções main.cf

smtpd_sender_restrictions = reject_sender_login_mismatch, ...
smtpd_sender_login_maps = hash:/etc/postfix/smtpd_sender_login_maps

com um arquivo login_maps como:

a@example.org a
b@example.org b
c@example.org c
...

(consulte também Bloquear endereço do remetente falsificando com SMPT AUTH ), mas isso significa que terei que editar o arquivo login_maps toda vez que tiver um novo usuário. Não preciso de um mapeamento tão flexível: ele sempre deve ser "log-in-user@example.org". Existe uma opção mais fácil?

Respostas:


14

Primeiro, verifique se a instalação do Postfix suporta o pcre digitando o comando postconf -me procurando uma linha pcrenele. Depois de verificar se possui suporte para o PCRE, você pode fazer o seguinte:

/etc/postfix/login_maps.pcre:

/^(.*)@example\.org$/   ${1}

Em main.cf:

smtpd_sender_login_maps = pcre:/etc/postfix/login_maps.pcre

Isso deve funcionar bem.


Isto é perfeito. Exatamente o que eu estava procurando!
quer

3
Para usuários do Ubuntu, você pode obter o postfix pcre com sudo apt-get install postfix-pcre. Talvez isso fosse óbvio para a maioria.
NeilMonday

Não há como omitir o domínio na regex ou na $myhostnamevariável de referência ?. Aqui você pode ver que Postfix é capaz de pesquisar a tabela de referência por parte do usuário do e-mail ...
Jaime Hablutzel

Acredito que você deseje escapar da barra invertida do '.' caractere no nome de domínio por isso é interpretado como uma correspondência literal: /^(.*)@example\.org$/
Arnon

Caso contrário, isso corresponde a "test @ exampleXorg" e "test@example.org", que pode não ser exatamente o comportamento pretendido.
Arnon #

6

A regex mencionada na outra resposta corresponde à parte do usuário do endereço de email ( usuário logado no @ example.org). Aqui estão algumas informações adicionais.

Para usar o endereço de email completo como nome de usuário, use o seguinte regex (por exemplo, em /etc/postfix/login_map):

/^(.*)$/   ${1}

Isso significa que seu nome de usuário é sempre o seu endereço de e-mail completo ( log-in-user@example.org ) - nenhum outro nome de usuário existente pode enviar a partir desse endereço - e você não precisa atualizar um arquivo de configuração Postfix adicional toda vez que adicione um usuário.

Isso pode ser usado em um servidor que possui vários domínios configurados. O usuário john.doe@example.com só pode enviar a partir desse endereço, mas não a partir de john.doe@example.org (usuário e email diferentes, pessoa diferente). O nome de usuário john.doe seria ambíguo nesse caso.

Além disso, dependendo da sua configuração, a configuração smtpd_sender_login_maps, que deve apontar para esse arquivo, pode estar no master.cf (em vez de main.cf). A documentação oficial do Dovecot possui o seguinte exemplo (se você estiver usando SASL / envio):

submission inet n - n - - smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_local_domain=$myhostname
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_sender_login_maps=hash:/etc/postfix/virtual
  -o smtpd_sender_restrictions=reject_sender_login_mismatch
  -o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject

Neste exemplo, a configuração deve ser ajustada para apontar para o arquivo correto e usar regex ou (melhor) pcre como tipo. Especialmente se um arquivo chamado "virtual" já for usado para outra finalidade (por exemplo, para virtual_alias_maps, como mostrado em um exemplo oficial do Postfix ), outro arquivo deve ser usado para o mapeamento de login.

A partir de:

smtpd_sender_login_maps=hash:/etc/postfix/virtual

Para:

smtpd_sender_login_maps=pcre:/etc/postfix/login_map

0

Você pode usar a combinação de regexp no cabeçalho, como mostrado aqui: http://www.akadia.com/services/postfix_uce.html ? Em seguida, você pode combinar com o regexp como [*@example.org] para garantir apenas o remetente de example.org.


Vamos supor que eu possa usar "regexp:" aqui (?) Como posso especificar a regexp como tal, que o usuário "a" possa enviar como "a@example.org", mas não como "b@example.org"?
Chris Lercher

@sonstabo seria bom se você incluir a amostra de configuração
Jaime Hablutzel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.