Photo by Álvaro Serrano
Фильтрация заголовков

Фильтрация заголовков при отправке писем

9.04.23
22.06.24

Postfix добавляет заголовки при отправке писем по умолчанию. Там есть много информации, которую не следует раскрывать. Подразумеваем, что сам почтовый сервер уже установлен и настроен, если нет то инструкция по установке и настройке почтового сервера. В Postfix есть механизм фильтрации заголовков (и не только), который хорошо подойдёт для этой цели. Надо установить пакет postfix-pcre:

apt install postfix-pcre

Далее, в файл /etc/postfix/main.cf добавить строку:

smtp_header_checks = pcre:/etc/postfix/smtp_header_checks

Механизм фильтрации довольно обширен. Всего есть целый ряд подобных директив:

header_checks = pcre:/etc/postfix/header_checks
mime_header_checks = pcre:/etc/postfix/mime_header_checks
nested_header_checks = pcre:/etc/postfix/nested_header_checks
body_checks = pcre:/etc/postfix/body_checks
milter_header_checks = pcre:/etc/postfix/milter_header_checks
smtp_header_checks = pcre:/etc/postfix/smtp_header_checks
smtp_mime_header_checks = pcre:/etc/postfix/smtp_mime_header_checks
smtp_nested_header_checks = pcre:/etc/postfix/smtp_nested_header_checks
smtp_body_checks = pcre:/etc/postfix/smtp_body_checks
  • header_checks — проверка заголовков во входящих письмах
  • smtp_header_checks — проверка заголовков в исходящих письмах
  • mime_header_checks — проверка MIME-заголовков вложенных вайлов во входящих письмах
  • nested_header_checks — проверка заголовков вложенных сообщений
  • body_checks — проверка всего остального контента письма
  • milter_header_checks — проверка заголовков добавляемых Milter-ом
  • smtp_* — проверка всего того же самого, но в исходящих сообщениях.

Нам удобнее использовать именно smtp_header_checks.

Добавляем фильтры заголовков

После того как добавили строку с указанием на файл с правами фильтрации в main.cf можем переходить к созданию правил фильтрации. Для этого открываем файл: /etc/postfix/smtp_header_checks на редактирование.

Принцип такой:

/Заголовок/  действие  аргумент_если_есть

Действия (Actions) могут быть следующие (имена действий не чувствительны к регистру):

BCC user@domain 

добавляет указанный адрес в качестве получателя BCC

DISCARD необязательный текст 

Подтверждает об успешной доставке и молча отбрасывает сообщение. Не проверяет оставшуюся часть входного сообщения. Записывает в журнал необязательный текст, если он указан.

IGNORE 

Удаляет текущую строку из данных и переходит к следующей

INFO optional text... 

Делает запись в логах

PREPEND text... 

Добавляет к текущей строке указанный текст и переходит к следующей строке ввода.

REPLACE text... 

Меняет текущую строку указанным текстом

REJECT optional text... 

Отклоняет всё сообщение целиком. Не просматривает оставшуюся часть входного сообщения.

WARN optional text... 

Логирует сообщение.

Мы будем использовать IGNORE и REPLACE

Для того чтобы избавиться от ip-адреса локальной сети, вставляемого в исходящее письмо, а также тип почтового агента и его версию добавьте в файл /etc/postfix/smtp_header_checks следующие строки:

/^X-Originating-IP:/ IGNORE
/^X-Mailer:/ IGNORE
/^Mime-Version:/ IGNORE

Если вы знакомы с регулярными выражениями regexp или regex (от Regular Expressions) то вам будет просто разобраться как использовать детективу REPLACE , если нет, то добавьте следующую строку в файл /etc/postfix/smtp_header_checks

/^Received: from .*/ REPLACE Received: from your-mail-domain.ru (using ESMTPS) 

Можно конечно полностью убрать заголовок директивой

/^Received: from .*/ IGNORE

Но в этом случае некоторые спам-фильтры будут занижать оценку вашей почте. Лучше не удалять этот заголовок совсем.
После редактирования надо перезагрузить postfix для вступления всех изменений в силу:

systemctl restart postfix.service

Далее нужно протестировать работу