Как добавить один заголовок для любого входящего письма с помощью Postfix?

Как добавить один заголовок для любого входящего письма с помощью Postfix?

У меня запущен 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

Рассматриваемые мной варианты:

  1. Добавитьheader_checksопцию и используйте PREPENDдействие в файле.

    Почти получилось, но:

    • Для этого требуется сопоставить существующий заголовок, а затем при последующих совпадениях будет добавлен еще один.
    • У меня не всегда есть определенный заголовок, возможно, его даже Fromне хватает, например.
    • Если у вас уже есть , то, я думаю, header_checksпростого способа объединить два файла не существует .header_check
  2. Создайте собственное приложение, которое используетпротокол Милтераи подключить его к Postfix с помощью smtpd_milters.

    Конечно, это сработает. Я могу проверить почту в своем собственном приложении, а затем внедрить туда заголовок. Кажется, это слишком сложно для такой простой задачи, как добавление заголовка. Кроме того, это требует дополнительного обслуживания с необходимостью запускать еще одно демон-приложение, довольно много шаблонного кода и т. д.

  3. Как предложено в комментарии, используйте 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

Связанный контент