![Как добавить один заголовок для любого входящего письма с помощью Postfix?](https://rvso.com/image/776284/%D0%9A%D0%B0%D0%BA%20%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D0%BE%D0%B4%D0%B8%D0%BD%20%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D0%BA%20%D0%B4%D0%BB%D1%8F%20%D0%BB%D1%8E%D0%B1%D0%BE%D0%B3%D0%BE%20%D0%B2%D1%85%D0%BE%D0%B4%D1%8F%D1%89%D0%B5%D0%B3%D0%BE%20%D0%BF%D0%B8%D1%81%D1%8C%D0%BC%D0%B0%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Postfix%3F.png)
У меня запущен Postfix с несколькими процессами smtpd, настроенными в master.cf следующим образом:
# Internet facing one
1.2.3.4:25 inet n - y - - smtpd
-o ... # internet-only overrides
# Internal facing one
10.0.0.1:10026 inet n - y - - smtpd
-o ... # internal-only overrides
Теперь я хотел бы добавить один заголовок со статическим именем и значением,входящийпочты в зависимости от того, на какой smtpd она была получена.
Пример:
X-Gert-Postfix-Received-From: the evil internet
Рассматриваемые мной варианты:
Добавить
header_checks
опцию и используйтеPREPEND
действие в файле.Почти получилось, но:
- Для этого требуется сопоставить существующий заголовок, а затем при последующих совпадениях будет добавлен еще один.
- У меня не всегда есть определенный заголовок, возможно, его даже
From
не хватает, например. - Если у вас уже есть , то, я думаю,
header_checks
простого способа объединить два файла не существует .header_check
Создайте собственное приложение, которое используетпротокол Милтераи подключить его к Postfix с помощью
smtpd_milters
.Конечно, это сработает. Я могу проверить почту в своем собственном приложении, а затем внедрить туда заголовок. Кажется, это слишком сложно для такой простой задачи, как добавление заголовка. Кроме того, это требует дополнительного обслуживания с необходимостью запускать еще одно демон-приложение, довольно много шаблонного кода и т. д.
Как предложено в комментарии, используйте
check_recipient_access
(связанный вопрос).Те же недостатки, что и
header_checks
(см. 1).
Мне кажется, что я упускаю что-то простое. У кого-нибудь есть идея получше?
решение1
Если у вас уже есть файлы header_checks, то, по-моему, нет простого способа объединить два файла header_check.
На самом деле существует способ иметь несколько независимых файлов header_checks для каждого демона.
каждый-оопция в вашем master.cf переопределяет значение по умолчанию или любой параметр конфигурации postfix в main.cf. Чтобы иметь разные header_checks для каждого демона (например,/etc/postfix/header_checks1и/etc/postfix/header_checks2), вам придется переопределить каждыйheader_checksпараметр:
# Internet facing one
1.2.3.4:25 inet n - y - - smtpd
-o header_checks = regexp:/etc/postfix/header_checks1
# Internal facing one
10.0.0.1:10026 inet n - y - - smtpd
-o header_checks = regexp:/etc/postfix/header_checks2
Таким образом, у вас будет полностью независимыйheader_checksфайлов на демон smtpd. Оттуда вы можете добавлять правила, которые добавляют тег, о котором вы говорили.
решение2
Чтобы обойти ограничения smtpd_*_restrictions
:
Сообщение — даже с отправителем «null» — имеет ровно одного отправителя конверта. Поэтому используйте check_sender_access
вместо check_recipient_access
. Используемый тип поиска может быть , static:
поскольку нам не важны особенности обратного пути. Добавьте его в свой список smtpd_sender_restrictions до того, как какие-либо проверки дадут ACCEPT
результаты (postfix не будет запрашивать дополнительные поиски за пределами).
# in main.cf
common_sender_restrictions =
reject_non_fqdn_sender
reject_unknown_sender_domain
..
internet_sender_restrictions =
$common_sender_restrictions
check_sender_access static:{PREPEND X-Gert-Postfix-Received-From: the evil internet}
# in master.cf
192.0.2.0:25 inet n - y - - smtpd
-o smtpd_sender_restrictions=$internet_sender_restrictions
10.0.0.1:10026 inet n - y - - smtpd
-o smtpd_sender_restrictions=$common_sender_restrictions