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


В данной инструкции мы разберемся с возможностью замены почтовых заголовков в MTA Postfix с использованием header_checks.
Как будем настраивать правила
Подготовка системы
Примеры настройки header_checks
Скрываем адрес IP в Recived
Меняем тему письма
Читайте также
Как работает
В настройках Postfix мы можем задать две опции:
- header_checks — путь до файла с правилами обработки входящих писем.
- 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
Пробуем отправить письмо на наш сервер и посмотреть на результат.
Читайте также
Данные статьи могут оказаться полезными: