Correspondência de domínio virtual de postfix com expressão regular

2

Usando o Postfix (2.11.3), quero redirecionar todas as mensagens para um endereço externo.

/etc/postfix/main.cf :

virtual_alias_maps = regexp:/etc/postfix/rewrite

/etc/postfix/rewrite :

/^.+$/ [email protected]

Enviando e-mail para [email protected] , ocorre o seguinte erro:

[...] to=<[email protected]>, orig_to=<[email protected]> [...] status=bounced (User unknown in virtual alias table)

Documentação diz:

Valid recipient addresses are listed with the virtual_alias_maps parameter. The Postfix SMTP server rejects invalid recipients with "User unknown in virtual alias table".

Acontece que o erro tem que fazer alguma coisa com a validação de domínios alias virtuais: virtual_alias_domains , por padrão, é $virtual_alias_maps , defini-lo para qualquer outra coisa (para um domínio não correspondente ou mesmo deixá-lo vazio) resolve o problema .

Outra solução que encontrei em uma resposta está dando a expressão regular de outra forma:

/^.+@.+$/ [email protected]

Então, minha pergunta é: como a validação de domínios alias funciona ao usar tabelas de expressões regulares para o aliasing virtual? Por que definir virtual_alias_domains para qualquer outra coisa resolve o problema? Como os dois padrões equivalentes de mapeamento de endereço são diferentes?

A saída de postconf -n é:

config_directory = /etc/postfix
inet_interfaces = loopback-only
inet_protocols = ipv4
mydestination =
myhostname = example.org
myorigin = $myhostname
virtual_alias_domains =
virtual_alias_maps = regexp:/etc/postfix/rewrite
    
por Joó Ádám 25.07.2015 / 17:29

1 resposta

1

Suponha que você tenha um e-mail para [email protected] a ser entregue.

Os mapas especificados em virtual_alias_domains são pesquisados usando a parte do domínio ( example.net ) como uma chave, esperados para retornar qualquer coisa, se for um domínio de alias virtual; caso contrário, nada, ou seja, essa chave deve ser indefinida. Os mapas em virtual_alias_maps são pesquisados usando o endereço completo ( [email protected] ) como chave, devendo retornar um endereço reconfigurado.

Isso significa que você pode compartilhar um único arquivo de mapa para ambas as pesquisas, assim como o simples mapa de hash /etc/postfix/virtual explicado em virtual (5) . A configuração padrão do Postfix ( virtual_alias_domains = $virtual_alias_maps ) está assumindo um mapa desse estilo misto.

example.net OK
[email protected] [email protected]
[email protected] [email protected]

As regras importantes dessas pesquisas são:

  • virtual_alias_maps são pesquisados recursivamente. Se ele retornar o mesmo endereço da chave, esse endereço será usado.
  • Se o endereço reescrito final retornado por virtual_alias_maps ainda estiver em virtual_alias_domains , a consulta será considerada uma falha ( User unknown in virtual alias table ). Isso não parece explicitamente documentado. Aprendi por este tópico .

Portanto, seu primeiro mapa regexp ( /^.+$/ [email protected] ) e configuração é problemático, porque o mapa corresponde a tudo, então [email protected] ainda está em virtual_alias_domains e é devolvido.

Você pode evitá-lo especificando nada em virtual_alias_domains ou usar outro mapa regexp que não corresponda a uma única cadeia de domínio ( /^.+@.+$/ [email protected] ).

Mas qualquer um deles não me parece a configuração correta, mas um tipo de solução não intuitiva. Haveria uma solução mais adequada para o seu propósito, eu acho.

    
por 27.07.2015 / 13:56

Tags