Книга: Сетевые средства Linux
Передача данных с помощью протокола SMTP
Передача данных с помощью протокола SMTP
Для того чтобы понять материал данной главы, надо хотя бы в общих чертах представлять себе принцип передачи почтовых сообщений с помощью протокола SMTP. В частности, необходимо знать различия между заголовками конверта (envelope header), заголовками сообщения (message header) и телом сообщения (message data). Заголовком конверта считаются поля From
и То
и содержащиеся в них адреса, которые указываются передающим компьютером при установлении SMTP-соединения. В особенности важен заголовок конверта То
, так как именно его анализирует принимающая система, определяя, кому адресовано данное сообщение.
В отличие от заголовка конверта, заголовок сообщения входит в состав письма. Нередко этот заголовок составляет значительную часть сообщения, доставляемого адресату. Среди них также присутствуют поля From:
и To:
, но полагаться на их значения нельзя, так как они могут быть фальсифицированы. К заголовку сообщения относятся также поле Received:
, которое отражает путь, проделанный письмом, и поле Subject:
, отображаемое большинством программ просмотра писем.
На заметку
В заголовке сообщения значение поля отделяется от его имени двоеточием. В заголовке конверта двоеточие обычно не используется. Если сервер SMTP использует формат maildir
, данные, содержащиеся в заголовке конверта, хотя и используются при выполнении SMTP-транзакции, но не сохраняются в сообщении. Некоторые серверы могут быть сконфигурированы так, чтобы адреса, указанные в полях From
и То
заголовка конверта, сохранялись в составе поля Received:
заголовка сообщения. Это помогает в тех случаях, когда надо выяснить причину возникновения проблем при передаче писем.
Чтобы понять, как действует протокол SMTP, надо проследить ход SMTP-транзакции. В листинге 19.1 показан процесс передачи сообщения, осуществляемый вручную с помощью программы telnet
. (Как нетрудно догадаться, в обычной SMTP-транзакции программа telnet
не участвует).
Листинг 19.1. Пример SMTP-сеанса
$ telnet louiswu.rodsbooks.com
25 Trying 192.168.1.5...
Connected to louiswu.rodsbooks.com.
Escape character is '^]'.
220 louiswu ESMTP Exim 3.12 #1 Wed, 30 Oct 2002 12:01:29 -0500
HELO nessus.rodsbooks.com
250 louiswu Hello nessus.rodsbooks.com [192.168.1.3]
MAIL FROM:<[email protected]>
250 <rodsmith@nessus,rodbooks.com> is syntactically correct
RCPT TO:<[email protected]>
250 <[email protected]> is syntactically correct
DATA
354 Enter message, ending with "." on a line by itself
From: <[email protected]>
To: <[email protected]>
Subject: A Sample SMTP Session
This is the text of the message.
.
250 OK>
QUIT
221 louiswu closing connection
Connection closed by foreign host.
В большинстве случаев SMTP-соединение начинается по инициативе клиентской программы, в роли которой выступает программа подготовки писем или другой сервер SMTP (в сеансе, представленном в листинге 19.1, действия клиентской программы имитирует пользователь с помощью программы telnet
). Клиент объявляет о своем намерении начать взаимодействие, передавая серверу команду HELO
или EHLO
. Затем с помощью команд MAIL FROM:
и RCPT ТО:
клиент задает заголовки конверта From
и То
. В ответ на каждую из этих команд сервер SMTP передает числовой код, посредством которого он сообщает результаты обработки очередной команды. Текст, следующий за числовым кодом, предназначен для пользователя, который следит за ходом взаимодействия. Команда DATA
указывает на то, что передающий компьютер готов пересылать тело сообщения. Получив ответ от сервера, клиент начинает передачу заголовков и данных сообщения. (Заголовки сообщения передавать не обязательно. Если исключить их из листинга 19.1, письмо все равно будет доставлено.) Заголовки отделяются от тела сообщения пустой строкой. Строка, содержащая только точку, является признаком окончания сообщения.
Ниже описаны некоторые характерные особенности SMTP-транзакции и передаваемых сообщений, которые должны учитываться при настройке сервера.
• Идентификация отправителя. Передающая система передает свой адрес принимающему компьютеру различными способами, в частности, адрес содержится в составе команд HELO
и MAIL FROM
, а также поля заголовка From:
. Следует заметить, что если передающая система работает в режиме ретранслятора, в команде MAIL FROM
и в поле заголовка будет содержаться адрес другого компьютера. Так или иначе, IP-адрес отправителя становится известен принимающей системе; в листинге 19.1 этот адрес указывается в ответе на команду HELO
.
• Заголовки конверта и сообщения. В листинге 19.1 заголовки конверта и сообщения соответствуют друг другу, но в других случаях ситуация может быть иной. Если вы получите сообщение, адресованное не вам, причина этого может состоять в том, что в поле То
заголовка конверта был указан ваш адрес, а в поле To:
заголовка сообщения — адрес другого пользователя. Поскольку действия по доставке письма определяются значением поля То
заголовка конверта, то такое письмо будет передано вам. Почтовая программа, сохраняющая все данные о заголовках, помогла бы вам выяснить причины происходящего.
• Возможность отказаться от сообщения. Принимающий сервер SMTP может прекратить работу по доставке письма на любом этапе, начиная с установки соединения и заканчивая обработки сообщения после его получения. Чаще всего управление доставкой сообщения осуществляется после ответа на команду RCPT TO:
, но существует также возможность контроля на более ранних этапах взаимодействия. Если получатель прерывает соединение перед получением команды RCPT
некоторые отправители предпринимают повторную попытку передачи письма, что увеличивают нагрузку на сеть. Отказ от обработки после передачи содержимого письма имеет свой недостаток — если объем сообщения велик, такой подход также приведет к неоправданному увеличению трафика в сети.
• Предоставление информации о сервере. При проведении сеанса, приведенного в листинге 19.1, отправитель получает лишь частичную информацию о сервере и никаких других данных. В данном примере сервер объявляет себя как Exim 3.12. Некоторые программы позволяют скрыть номер версии; если в средствах защиты сервера имеются недостатки, такая мера повышает безопасность системы. Сохраняя в секрете номер реализации сервера, вы лишаете хакера информации о возможных путях незаконного проникновения в систему. В листинге 19.1 в ответ на команды MAIL FROM:
и RCPT TO:
принимающий сервер возвращает код 250 и сообщение is syntactically correct
. Некоторые серверы могут быть сконфигурированы так, что в случае, если в системе отсутствует учетная запись пользователя, которому адресовано письмо, взаимодействие с передающим компьютером прекратится после обработки команды RCPT TO:
. Такая конфигурация предоставляет информацию, полезную для злоумышленника: посредством команд почтового сервера он может подобрать корректное имя пользователя. В этом примере сервер Exim не предоставляет подобных данных, однако это порождает другую проблему. Если в письме указан несуществующий пользователь, сервер должен обработать, а затем проигнорировать письмо.
- Глава 19 Передача почты: протокол SMTP
- Передача данных
- Резервное копирование базы данных InterBase
- Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
- Резервное копирование многофайловых баз данных
- Восстановление из резервных копий многофайловых баз данных
- Владелец базы данных
- ЧАСТЬ IV. База данных и ее объекты.
- Перевод базы данных InterBase 6.x на 3-й диалект
- Типы данных для работы с датой и временем
- Практическая работа 53. Запуск Access. Работа с объектами базы данных
- Обзор основных причин повреждения базы данных