У меня есть экземпляр Postfix, настроенный на перезапись адресов, что позволяет канонизировать заголовок from.
Текущие (требуемые?) конфигурации
Вот соответствующие конфигурации:
# 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
Желаемый результат
Я хочу добиться этого:
- при получении электронного письма с адреса 127.0.0.1
From: root
оно перезаписывается как (т.е. root@$hostname)From: [email protected]
- при получении электронного письма от 1.2.3.4,
From: root
оно переписывается как (т.е. root@$mydomain)From: [email protected]
- при получении электронного письма от кого-либо другого, электронное письмо
From: root
отклоняется (посколькуreject_non_fqdn_sender
установлено ограничение)
Проблема
Переменная $myorigin
должна быть разной в зависимости от адреса получения, но я не могу найти способ сделать это. До сих пор я пробовал много решений, но безуспешно.
Неудачная попытка...
Я пробовал создать две главные службы smtp — 127.0.0.1:smtp
с myorigin = $myhostname
и 192.168.1.2:smtp
с myorigin = $mydomain
— но поскольку опция myorigin связана с процессом trivial-rewrites, она игнорируется.
Отображение для canonical
/, virtual
по-видимому, непригодно, поскольку оно происходит после выполнения тривиальных перезаписей.
Сопоставление для aliases
кажется бесполезным, поскольку они используются после того, как сообщение определено для отправки в $mydestination
, но это сообщения в другом месте.
решение1
Благодарябеспокойствообратная связь Я нашел решение.
Схема решения
В соответствии сОфициальные документы PostfixЧто касается переписывания, то основное дерево процесса выглядит следующим образом:
smtp --+--> cleanup --> rewrite --> [queue]
pickup --/
Поэтому я в итоге создал конвейер, предназначенный специально для localhost, например, такой:
192.168.1.2:smtp --+--> cleanup --> rewrite ------------+--> [queue]
127.0.0.1:smtp --+--> cleanup_local --> rewrite_local --/
pickup -----------/
Конфигурация
Это main.cf
конфигурация, которая представляет внешние IP-конфигурации:
# 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
Это master.cf
конфигурация с настроенным конвейером:
# 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