Postfix
— отличное типовое решение для корпоративного почтового сервера. Относительно легко ставится, хорошо интегрируется, доступно много всяких фич … что ещё нужно?
Безопасность. Если не конфигурировать явно, то postfix
пропускает все заголовки, добавленные до него. Это могут быть:
- 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
из письма на конечном отправляющем сервере.
Отдельно замечу, что некоторые из публичных почтовых сервисов тоже светят адрес отославшего письмо, что не всегда хорошо для его безопасности. Вообще, это отдельная тема, что лучше выбрать. -
Сообщения, раскрывающию внутреннюю стуктуру почтовика, если в связки используются антивирус/антиспам и подобные решения. Тогда появляется
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) -
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
и сразу открывается ещё одна потенциально опасная точка входа.
- Разного рода автоматически добавляемые скриптами заголовки, например
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которые раскрывают используемый софт и учётки, от которых он запускается. Обычному получателю такая информация точно не нужна, а недоброжелателю может пригодиться.
- Другие заголовки, которые я здесь не перечислил, но такие точно есть.
Полезной информации это не несёт, а значит лучше это и не дописывать в каждое сообщение.
Как отфильтровать «лишние» заголовки? Документация постфикса подсказывает, что неугодные хедеры можно удалить с помощью 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
). Если какой-то из заголовков вырезали после её формирования на отправителе, она может не пройти проверку и почта будет уходить в спам.
Надо использовать smtp_header_checks. Просто header_checks действует на входящую почту и в cleanup.
Подтверждаю, что header_cheks влияет также и на входящую почту.
smtp_header_checks отрабатывает, но у меня не работало в цепочке cleanup. Только если прописывать в main.cf
На текущий момент это работает 3.4.13? Мне так и не удалось завезти конфиг с header_checks. smtp_header_checks работает, но подмена заголовков происходит уже после того как сервер подписал письмо сертификатом, соответственно имеем измененное письмо, как победить — не нарыл 🙁
Подскажите, пожалуйста, в какой момент милтеры добавляют свои заголовки и как их отслеживать постфиксом?
Стоит rspamd, явный спам отбрасывает, к подозрительным письмам добавляет X-Spam: Yes. Задача направлять такие письма на отдельный мейл. Указанные в статье проверки почему то эти заголовки не отслеживают…