Eu tenho uma instância postfix configurada para reescrita de endereço que permite a canonização do cabeçalho.
Configurações atuais (obrigatórias?)
Estas são as configurações relevantes:
# Basic conf
myhostname = hostname.example.test
mydomain = example.test
mynetworks = 127.0.0.0/8,1.2.3.4/32
myorigin = $mydomain
mydestination =
# Rewrite options
append_at_myorigin = yes
local_header_rewrite_clients = permit_mynetworks
sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps = hash:/etc/postfix/sender_canonical
recipient_canonical_classes = envelope_recipient, header_recipient
recipient_canonical_maps = hash:/etc/postfix/recipient_canonical
# restrictions (redacted for readability)
smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender, permit
Resultado desejado
Eu quero conseguir isso:
- quando um e-mail é recebido de 127.0.0.1,
From: root
é reescrito como (ou seja, root@$hostname)From: [email protected]
- quando um e-mail é recebido da versão 1.2.3.4,
From: root
é reescrito como (ou seja, root@$meudominio)From: [email protected]
- quando um e-mail é recebido de qualquer outra pessoa, o e-mail
From: root
é rejeitado (uma vez que a restriçãoreject_non_fqdn_sender
está em vigor)
O problema
A variável $myorigin
deve ser diferente com base no endereço de recebimento, mas não consigo encontrar uma maneira de fazer isso. Até agora tentei muitas soluções, mas falhei.
Tentativa sem sucesso...
Eu tentei criar dois serviços mestre SMTP - 127.0.0.1:smtp
com myorigin = $myhostname
e 192.168.1.2:smtp
com myorigin = $mydomain
- mas como a opção myorigin está relacionada ao processo de reescritas triviais, ela é ignorada.
O mapeamento para canonical
/ virtual
parece ser inutilizável, pois ocorre após a execução de reescritas triviais.
O mapeamento para aliases
parece ser inutilizável, pois eles são usados depois que a mensagem é determinada para ser enviada para $mydestination
, mas essas mensagens são enviadas para outro lugar.
Responder1
Graças aanxfeedback encontrei a solução.
O esquema de solução
De acordo comDocumentos oficiais do Postfixsobre reescrita, a árvore do processo mestre é semelhante a esta:
smtp --+--> cleanup --> rewrite --> [queue]
pickup --/
Então acabei criando um pipeline específico para localhost, como o seguinte:
192.168.1.2:smtp --+--> cleanup --> rewrite ------------+--> [queue]
127.0.0.1:smtp --+--> cleanup_local --> rewrite_local --/
pickup -----------/
A configuração
Esta é a main.cf
configuração, que representa configurações de IP externas:
# configure the global desiderata
# Basic conf (for display purpose, use your own configuration)
# myhostname = hostname.example.test
# mydomain = example.test
# mydestination =
# mynetworks = 127.0.0.0/8,1.2.3.4/32
# Rewrite options
myorigin = $mydomain
append_at_myorigin = yes
local_header_rewrite_clients = permit_mynetworks
sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps = hash:/etc/postfix/sender_canonical
recipient_canonical_classes = envelope_recipient, header_recipient
recipient_canonical_maps = hash:/etc/postfix/recipient_canonical
# restrictions (redacted for readability)
smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender, permit
Esta é a master.cf
configuração, com o pipeline customizado:
# add this for local smtp service
127.0.0.1:smtp inet n - n - - smtpd
-o myorigin=$myhostname
-o cleanup_service_name=cleanup_local
-o inet_interfaces=loopback-only
-o local_header_rewrite_clients=permit_inet_interfaces
# edit pickup sevice with this two options
pickup unix n - n 60 1 pickup
-o myorigin=$myhostname
-o cleanup_service_name=cleanup_local
# add this for local email cleanup
cleanup_local unix n - n - 0 cleanup
-o myorigin=$myhostname
-o rewrite_service_name=rewrite_local
# add this for local email basic rewrite
rewrite_local unix - - n - - trivial-rewrite
-o myorigin=$myhostname
-o local_header_rewrite_clients=permit_inet_interfaces
# Then for each public IP assigned to the machine, add smtp service like this
192.168.3.85:smtp inet n - n - - smtpd
# and remove default service smtp inet [..cut..] smtpd