Удалить / скрыть IP-адрес отправителя клиента из postfix?
Я пытаюсь скрыть IP-адрес клиента от писем, отправленных с постфикса.
Вот пример того, что я имею в виду:
Received: from mail.[removed].com (adsl-75-37-61-254.dsl.frs2ca.sbcglobal.net [75.37.61.254])
(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
(No client certificate requested)
by mail.[removed].com (Postfix) with ESMTP id D50C7BF185DD
for <[removed]@gmail.com>; Thu, 2 Aug 2012 16:14:21 +0900 (JST)
Date: Thu, 02 Aug 2012 07:14:08 +0000
Обратите внимание на эту строку (adsl-75-37-61-254.dsl.frs2ca.sbcglobal.net [75.37.61.254])
Я хочу удалить эту строку из письма.
Я пытался сделать это:
/etc/postfix/main.cf:
smtp_header_checks = regexp:/etc/postfix/smtp_header_checks
smtp_header_checks:
/^((.*) [(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])])/ IGNORE
Но мой IP-адрес все еще находится внутри полученной части письма. Если я отправляю почту с сервера smtp локально, IP-адрес становится localhost.localdomain [127.0.0.1]
Как я могу удалить клиентские IP-адреса из заголовка?
5 ответов
В main.cf
:
smtp_header_checks = pcre:/etc/postfix/smtp_header_checks
В dynamicmaps.cf
:
# Use your real path to dict_pcre.so, below
pcre /usr/lib/postfix/dict_pcre.so dict_pcre_open
Вы должны положить это в свой /etc/postfix/smtp_header_checks
:
/^Received: .*/ IGNORE
/^X-Originating-IP:/ IGNORE
Тогда беги
# /etc/init.d/postfix reload
Чтобы удалить IP-адрес отправителя из заголовка Received для отправки новой почты, используйте
header_checks
ключ вместо
smtp_header_checks
вариант:
header_checks = regexp:/etc/postfix/header_checks_submission
В
smtp_header_checks
опция применяется только к почте, которая отправляется из Postfix на внешние серверы, тогда как
header_checks
Опция применяется к входящей почте, отправляемой вашим клиентом в Postfix.
См. Также Как Postfix получает почту на http://www.postfix.org/OVERVIEW.html для обзора компонентов, почта идет из smtpd -> очистка -> входящая очередь. В
smtpd
процесс получает почту и вводит
Received
заголовок с IP-адресом отправителя. В header_checks(5)
вариант обрабатывается cleanup(8)
компонент, который очищает заголовки писем.
Он не рекомендуется устанавливать такие
header_checks
глобально в вашем main.cf, так как это изменит заголовок Received во всех электронных письмах, даже полученных с внешних серверов. Вместо этого вы должны настроить свой клиент для отправки электронной почты через специальную службу отправки на порт 587 и настроить Postfix на перезапись заголовков только для этих проверенных отправлений.
В
/etc/postfix/master.cf
добавьте следующее
-o
строки после
submission
линия:
submission inet n - y - - smtpd
# Require SASL authentication
-o smtpd_sasl_auth_enable=yes
# Require TLS transport security, do not leak your credentials in plaintext.
-o smtpd_tls_security_level=encrypt`
# Disallow unauthenticated users from sending mail through this port.
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# Use a different cleanup service (see below)
-o cleanup_service_name=ascleanup
Время для настройки очистки сервис для через uthenticated s ubmissions. Я выбираю имя
ascleanup
чтобы он был коротким и выровненным, но любое имя работает. Для этого продублируйте служебную строку очистки в том же
master.cf
файл, но переименуйте первое поле и добавьте новую опцию для выбора файла фильтра:
cleanup unix n - y - 0 cleanup
ascleanup unix n - y - 0 cleanup
-o header_checks=pcre:/etc/postfix/header_checks_submission
(Использование
pcre
стол требует установки
postfix-pcre
в Debian это автоматически позаботится об обновлении файла dynamicmaps.cf. Никаких дополнительных изменений для этого не требуется.)
Последняя часть - это фактическая конфигурация фильтра в
/etc/postfix/header_checks_submission
. Вы можете использовать что-то вроде:
/^Received: .*/ IGNORE
который удалит полную строку заголовка Received, но вместо этого вы также можете просто удалить
from helo.host (reverse.host.name [192.0.2.1])
часть с сохранением другой информации:
/^Received: from [^ ]+ \([^ ]+ \[[IPv0-9a-f:.]+\]\)\s+(.* \(Postfix\) with .+)$/ REPLACE Received: $1
Если вы изменили mail_name
вариант, измените
Postfix
слово в соответствии с вашей конфигурацией. (Этот шаблон точен на основе исходного кода Postfix, smtpd / smtpd.c.)
Я тестировал это с postfix 3.4.7-0+deb10u1 на Debian buster. Еще одно отличное описание того же подхода см. В разделе При отправке электронной почты с помощью Postfix, как я могу скрыть IP-адрес отправителя и имя пользователя в заголовке Received?
С вышеуказанной модификацией следующее превращается в
Received: by ...
:
Received: from debian (unknown [IPv6:fe80::b036:2ff:fe6e:73f4])
by mail.example.nl (Postfix) with ESMTPSA id 1571B910B
for <some@example.com>; Sun, 12 Jan 2020 02:23:15 +0000 (UTC)
Откройте /etc/postfix/master.cf и найдите:
cleanup unix n - n - 0 cleanup
Добавьте ниже этих строк и станьте:
cleanup unix n - n - 0 cleanup
-o header_checks=pcre:/etc/postfix/header_checks
Отредактируйте /etc/postfix/header_checks и добавьте следующие коды:
/^Received:/ IGNORE
Теперь перезапустите постфикс. Позвольте сказать на CentOS:
service postfix restart
С использованиемIGNORE
вызывает проблемы с фильтрами подписи почты, такими как OpenDKIM. Итак, документация Postfix предлагает нам вместо этого использовать предложение.См. документацию для
REPLACE
использование предложения.
Шаг 1:
Создайте файл регулярных выражений в/etc/postfix/header_checks
и добавьте следующую информацию.
/^Received:.*with ESMTPSA/ REPLACE Received: You can't see me ;-)
/^X-Originating-IP:/ IGNORE
/^X-Mailer:/ IGNORE
/^Mime-Version:/ IGNORE
Поскольку я отправлял электронные письма только через порт 465 (и не разрешаю SASL через порт 25), я сопоставляюESMTPSA
- что мне подходит.
Шаг 2:
Добавьте эти две строки в/etc/postfix/main.cf
mime_header_checks = regexp:/etc/postfix/header_checks
header_checks = regexp:/etc/postfix/header_checks
Шаг 3:
Перестройте хеш-таблицу для постфикса.
$ postmap /etc/postfix/header_checks
$ postfix reload
Теперь попробуйте отправить тестовое письмо, вы увидитеReceived: You can't see me ;-)
какReceived
заголовок. Ваше здоровье.
Использовать этот:
/^Received: from .*127.0.0.1**/ IGNORE
использовать только один *
в обоих концах