Замена заголовков в Postfix с помощью header_checks

Обновлено Обновлено: Опубликовано Опубликовано:

В данной инструкции мы разберемся с возможностью замены почтовых заголовков в MTA Postfix с использованием header_checks.

Как работает

В настройках Postfix мы можем задать две опции:

  1. header_checks — путь до файла с правилами обработки входящих писем.
  2. smtp_header_checks — путь до файла с правилами обработки исходящих писем.

Поиск строк в правилах может быть написан с помощью регулярных выражений в формате POSIX или PCRE (в стиле PERL). Последние считаются более продвинутыми и имеют больше возможностей. Если нужная строка будет найдена, с письмом могут быть выполнены определенные действия:

  • OK — пропустить сообщение. Данное правило может быть частью более сложной группы правил, по результатом которых должно получиться либо OK, либо сообщение отклоняется.
  • REJECT — не принимать письмо.
  • IGNORE — удаление строки.
  • REPLACE — замена строки или ее части.
  • REDIRECT — перенаправить письмо на другой адрес.

Перейдем к практике.

Подготовка

Прежде чем начать настройку правил, выполним действия по подготовке сервера.

1. Подразумевается, что на нашем сервере уже установлен MTA Postfix. В противном случае можно воспользоваться одной из инструкций.

2. В наших примерах мы будем пользоваться регулярными выражениями PCRE. Для этого необходимо установить пакет postfix-pcre.

а) на системы DEB:

apt install postfix-pcre

б) на системы RPM:

yum install postfix-pcre

3. Для проверок мы можем использовать подключенный к MTA почтовый клиент или делать отправку из командной строки.

4. Настройка Postfix. Для исходящих и/или входящих правил нужно прописать соответствующие строки.

Для этого откроем файл:

vi /etc/postfix/main.cf

Добавим правила:

header_checks = pcre:/etc/postfix/header_checks
smtp_header_checks = pcre:/etc/postfix/smtp_header_checks

* не обязательно добавлять обе строки. Если нас интересуют только правила для входящих сообщений, оставим header_checks, а smtp_header_checks удалим.

Создаем пустые файлы:

touch /etc/postfix/header_checks

touch /etc/postfix/smtp_header_checks

Перезапускаем postfix:

systemctl restart postfix

Мы готовы.

Примеры

Чтобы научиться использовать header_checks, рассмотрим несколько практических примеров.

1. Скрываем IP

Рассмотрим пример использования smtp_header_checks для удаления заголовков с используемыми IP-адресами.

Создаем файл с правилами:

vi /etc/postfix/smtp_header_checks

/^X-Mailer:/            IGNORE
/^Received:/            IGNORE
/^User-Agent:/          IGNORE
/^X-Original-IP:/       IGNORE
/^X-Mailer-Type:/       IGNORE

Командой postmap можно проверить отработку нашего правила. Синтаксис следующий:

postmap -q <какую строку хотим проверить> <формат регулярного выражения>:<путь до файла с правилами>

Например:

postmap -q "X-Original-IP: 192.168.1.1" pcre:/etc/postfix/smtp_header_checks

* в данном примере мы проверяем, что будет, если в сообщении будет заголовок X-Originating-IP: 192.168.1.1.

Мы должны увидеть:

IGNORE

Это означает, что отработало правило IGNORE, то есть, проверочная строка попала под одно из правил header_checks.

Перечитаем конфигурацию MTA: 

systemctl reload postfix

Пробуем отправить тестовое сообщение, например, из командной строки:

echo "Test header_checks" | mail -s "Testing header_checks" -a "From: postmaster@dmosk.ru" master@dmosk.ru

Проверяем почту и смотрим заголовки — мы не увидим заголовки идентификации сервера, которые добавляются нашим MTA.

Однако, важно понять, что принимающая сторона видит, с какого адреса приходит письмо, поэтому, как минимум один подобный заголовок мы увидим:

Received: from [1.1.1.1] (helo=smtp.dmosk.ru)
    by mx1.recived-server.ru with esmtps  (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
    (envelope-from <postmaster@dmosk.ru>)
    id 1o46Am-0067MP-5t
    for master@dmosk.ru; Wed, 22 Jun 2022 22:37:56 +0300

Данный заголовок добавляется на стороне сервера, который принял письмо.

2. Замена темы сообщения

Рассмотрим простой пример работы с заголовком subject. Мы будем менять тему входящего письма.

Открываем файл:

vi /etc/postfix/header_checks

Добавляем:

/^Subject:(.*)/       REPLACE     Subject: *** $1 ***

* в данном примере мы просто добавим звездочки по сторонам от темы сообщения.

Выполним проверку:

postmap -q "Subject: Моя тема сообщения" pcre:/etc/postfix/header_checks

Мы должны увидеть:

REPLACE     Subject: ***  Моя тема сообщения ***

Перечитаем конфигурацию postfix: 

systemctl reload postfix

Пробуем отправить письмо на наш сервер и посмотреть на результат.

Читайте также

Данные статьи могут оказаться полезными:

1. Большой почтовый сервер на Ubuntu Server.

2. Почтовый сервер Postfix на CentOS 7 с виртуальными доменами, системой управления, веб-доступом и многим другим.

3. Фильтрация содержимого входящих сообщений в Postfix средствами Spamassassin с отправкой администратору копии письма.

# Linux # Почта # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет