У некоторых писем есть заголовок типа «Получено: от [172.16.1.2] (some.public.ip.address)». Почему это так? почему клиент отправителя кого-то за NAT раскрывает частный адрес?
Потому что так устроен SMTP и как настроена отправляющая система электронной почты.
Есть способы скрыть эту информацию, но система отправки почты должна быть явно настроена для этого.
Received: from [172.16.1.2] (some.public.ip.address)"
Как вы упомянули в комментариях, частный IP-адрес в этом конкретном месте вызван тем, что он был отправлен как имя хоста клиента в HELO
команда.
Для правильных почтовых серверов HELO
команда должна включать их полное имя хоста, которое также должно совпадать с DNS. Для входящей почты многие серверы фактически проверяют имя хоста HELO, чтобы убедиться, что оно действительно и соответствует DNS. Для отправки электронной почты серверы обычно принимают все, что угодно, пока вы аутентифицированы (вы не можете ожидать, что у всех конечных пользователей будут реальные действительные имена хостов, настроенные на их машинах).
Для клиентов SMTP, таких как Outlook, они могут отправлять имя вашего компьютера, но оно не полностью определено и может быть нежелательным в зависимости от того, как вызывается машина. Например, вы часто видите такие заголовки:
Received: from DESKTOP9U6J0BC (unknown)
Использование IP-адреса, вероятно, обеспечивает немного больше конфиденциальности, поскольку некоторые люди могут поспорить, видя 172.1.2.3
в заголовках лучше, чем MIKES-MACBOOK
или CEO-WORKSTATION
.
В конце концов, клиенту просто нужно предоставить что-то разумное в команде HELO, и некоторые клиенты выбирают IP-адрес.
Это немного отличается от того, что обсуждали другие ответы, которые связаны с фактическими SMTP-серверами, использующими частные адреса для передачи электронной почты внутри организации.
Не почтовый клиент добавляет Received
заголовок, но каждый почтовый сервер SMTP на пути сообщения SMTP следует от первого сервера исходящей почты (почтового ретранслятора), используемого отправителем, до конечного пункта назначения почтового ящика получателя.
Если первый почтовый сервер находится во внутренней сети отправителя, он может (и, если не настроено иное, будет) записывать внутренний IP-адрес отправителя в первый Received
заголовок.
Когда SMTP-клиент отправляет письмо на SMTP-сервер, он запускается с помощью команды «helo» или «ehlo». В этой команде есть поле для имени хоста отправителя.
Почему клиент отправляет имя хоста на сервер? потому что SMTP был разработан для работы со многими транспортными протоколами, некоторые из которых могут не предоставлять серверу способы идентификации клиента. В то время мир также был гораздо более доверчивым, никто не ожидал, что люди намеренно лгут о своей личности.
«Персональные компьютеры» в том виде, в каком мы их знаем сегодня, еще не существовали, когда был создан SMTP. Сетевая электронная почта зародилась как способ соединения локальных почтовых систем, используемых на больших многопользовательских компьютерах. У этих больших многопользовательских компьютеров должно быть четко определенное имя хоста.
Принимающий почтовый сервер добавляет заголовок «Получено:» для документирования пути, по которому прошла почта. Обычно на современных почтовых серверах он записывает в поле «hostname» заголовка как «hostname», сообщаемое клиентом, так и фактический IP-адрес и / или обратное имя хоста DNS, видимое сервером.
Двигаясь вперед в современный мир, мы теперь используем настольные почтовые клиенты. Клиент должен использовать что-то в качестве имени хоста, поскольку протокол требует его отправки, но настольная система может не иметь значимого имени хоста. Некоторые клиенты используют имя хоста, сообщаемое ОС (которое может иметь или не иметь никакого сходства с именем хоста, имеющим какое-либо значение в любой сети), некоторые используют свой локальный IP-адрес.