Удаляем в postfix лишние заголовки

Postfix — отличное типовое решение для корпоративного почтового сервера. Относительно легко ставится, хорошо интегрируется, доступно много всяких фич … что ещё нужно?

Безопасность. Если не конфигурировать явно, то postfix пропускает все заголовки, добавленные до него. Это могут быть:

  1. IP-адрес пользователя во внутренней сети, если он посылает сообщение с помощью клиента. Тогда в полученном письме увидим что-то вроде:

    Received: from [192.168.0.116] (broadband-xxx-xxx-xxx-xx.example.com [xxx.xxx.xxx.xxx])
    by srv.example.com (Postfix) with ESMTPSA id 7AE4D122165
    for ; Sun, 8 Jan 2017 19:13:57 +0000 (UTC)

    Таким образом раскрывается внутренняя структура сети, а если есть ещё и внутренний релей и он добавляет свои заголовки — то и он тоже попадает в заголовки. Ясно дело, что это нежелательно.
    Хорошее решение: срезать все заголовки Received из письма на конечном отправляющем сервере.
    Отдельно замечу, что некоторые из публичных почтовых сервисов тоже светят адрес отославшего письмо, что не всегда хорошо для его безопасности. Вообще, это отдельная тема, что лучше выбрать.

  2. Сообщения, раскрывающию внутреннюю стуктуру почтовика, если в связки используются антивирус/антиспам и подобные решения. Тогда появляется localhost:

    Received: from localhost (localhost [127.0.0.1])
    by srv.example.com (Postfix) with ESMTP id 6466E12216D
    for ; Sun, 8 Jan 2017 19:47:46 +0000 (UTC)

  3. Полезной информации это не несёт, а значит лучше это и не дописывать в каждое сообщение.

  4. User-Agent (почтовый клиент) пользователя:

    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101
    Thunderbird/45.6.0

    Эта информация вполне безопасна, однако и её лишний раз лучше не светить — по письмам от разных пользователей одного домена можно узнать, например, какие операционные системы предпочитают в компании. Или здесь может светиться веб-почта

    User-Agent: Roundcube Webmail/1.2.3

    и сразу открывается ещё одна потенциально опасная точка входа.

  5. Разного рода автоматически добавляемые скриптами заголовки, например

    Received: by srv.example.com (Postfix, from userid 33)
    id 51C4212216F; Sun, 8 Jan 2017 20:07:31 +0000 (UTC)
    X-PHP-Originating-Script: 0:rcube.php

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

  6. Другие заголовки, которые я здесь не перечислил, но такие точно есть.

Как отфильтровать «лишние» заголовки? Документация постфикса подсказывает, что неугодные хедеры можно удалить с помощью header_checks. Заголовки будем указывать в regex-виде, для этого доставим пакет postfix-pcre и создадим файл /etc/postfix/header_checks.pcre с заголовками для удаления:

/^Received:/         IGNORE
/^User-Agent:/       IGNORE
/^X-Mailer:/         IGNORE
/^X-Originating-IP:/    IGNORE
/^X-PHP-Originating-Script/	IGNORE

Теперь корректно укажем использование файла с регексами. Простым добавлением в основной конфиг main.cf:

header_checks=pcre:/etc/postfix/header_checks.pcre

команда действует глобально как на входящую, так и на исходящую почту. При этом будет правиться входящая почта и ломаться проверка DKIM, поэтому нам такой способ явно не подходит.

Альтернативный вариант — вставить этот фильтр в master.cf после прохождения других демонов почтовика, но до подписи DKIM. Для этого подходит цепочка cleanup, находим её и дописываем:

cleanup   unix  n       -       -       -       0       cleanup
    -o header_checks=pcre:/etc/postfix/header_checks.pcre

Рестартуем, проверяем и … всё работает как надо!

PS: После изменений проверяем корректность подписи DKIM на получателе (строчка dkim=pass). Если какой-то из заголовков вырезали после её формирования на отправителе, она может не пройти проверку и почта будет уходить в спам.

4 Replies to “Удаляем в postfix лишние заголовки”

  1. unix

    Надо использовать smtp_header_checks. Просто header_checks действует на входящую почту и в cleanup.

    Reply
    • vasily

      Подтверждаю, что header_cheks влияет также и на входящую почту.
      smtp_header_checks отрабатывает, но у меня не работало в цепочке cleanup. Только если прописывать в main.cf

      Reply
      • usr

        На текущий момент это работает 3.4.13? Мне так и не удалось завезти конфиг с header_checks. smtp_header_checks работает, но подмена заголовков происходит уже после того как сервер подписал письмо сертификатом, соответственно имеем измененное письмо, как победить — не нарыл 🙁

        Reply
  2. pashkenciy

    Подскажите, пожалуйста, в какой момент милтеры добавляют свои заголовки и как их отслеживать постфиксом?

    Стоит rspamd, явный спам отбрасывает, к подозрительным письмам добавляет X-Spam: Yes. Задача направлять такие письма на отдельный мейл. Указанные в статье проверки почему то эти заголовки не отслеживают…

    Reply

Добавить комментарий

Ваш адрес email не будет опубликован.