Я пытаюсь скрыть IP-адрес клиента от писем, отправленных с postfix.
вот пример того, что я имею в виду:
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-адреса из заголовка?
В 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
Пришло время настроить уборка услуга для аподтвержденный sотказ. Я выбираю имя 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
Теперь перезапустите postfix. Скажем, на CentOS:
service postfix restart
использовать это:
/^Received: from .*127.0.0.1**/ IGNORE
использовать только один *
в обоих концах