Опубликован: 21.11.2006 | Доступ: свободный | Студентов: 1811 / 140 | Оценка: 4.09 / 4.00 | Длительность: 38:34:00
Лекция 7:

Протокол IMAP

Аннотация: В данной лекции: описывается протокол IMAP; показывается реализация протокола IMAP в ОС Linux, использование IMAP.

В этой лекции

  • Описание протокола IMAP
  • Реализация протокола IMAP в ОС Linux
  • Использование IMAP

В предыдущей лекции обсуждался протокол POP3, который является одним из наиболее популярных протоколов для получения почтовых сообщений с сервера электронной почты. Хотя протокол POP3 легко реализуется практически в любой операционной системе, он имеет ряд недостатков. Наиболее серьезный из них — отсутствие возможностей по управлению перемещением и хранением сообщений на сервере. Сообщения, как правило, загружаются с почтового сервера все сразу, после чего они с сервера удаляются, т.е. отсутствует возможность выбирать сообщения для получения. Такая схема хороша лишь для провайдера Internet, обслуживающего почтовый сервер вашей организации, так как при этом экономится дисковое пространство на сервере. Однако пользователей такая ситуация не удовлетворяет, поскольку при приеме почты они ограничены лишь одним ПК, на который загружаются сообщения. Когда пользователи получают почту по локальной сети и только на определенный ПК, то проблема не возникает. Если же они пожелают получать почту и на работе, и дома, то сразу появляется много проблем. В этом случае сообщения распределяются после получения между двумя рабочими станциями, которые к тому же расположены в различных местах!

Для решения подобных проблем был разработан новый протокол. Протокол Internet Mail Access Protocol (IMAP), разработанный в Вашингтонском университете, предполагает возможность получения пользователями электронной почты из одного почтового ящика из различных мест, при этом сообщения не распределяются между точками получения. Пользователю предоставляется возможность управлять сообщениями в его почтовом ящике и дополнительными функциями по обслуживанию почтовых ящиков на сервере. Конечно, есть и обратная сторона этой медали — почтовый сервер под управлением ОС Linux должен обслуживать всю почту, которая находится на его жестком диске. Это может создать опасную ситуацию на жестком диске, что не может не беспокоить администратора почтового сервера. При администрировании почтового сервера на базе протокола IMAP следует быть особенно осторожным с определением лимитов дискового пространства, чтобы система вовремя перестала принимать новые сообщения, не допуская переполнения диска и останова сервера.

В этой лекции мы расскажем о работе протокола IMAP и способах его реализации в операционной системе Linux. Текущая версия IMAP — 4 с номером реализации 1 или сокращенно IMAP4rev1. Этот протокол полностью описан в документе RFC 2060.

Описание протокола IMAP

Как и POP3, протокол IMAP использует концепцию клиент-сервер с набором команд. С помощью команд осуществляется передача сообщений электронной почты от сервера клиенту. Клиент устанавливает для этой цели TCP-соединение с портом 143 на сервере. Далее сервер должен ответить специальным сообщением-приглашением. В листинге 7.1 приведен пример сеанса по протоколу IMAP.

1 [jessica@shadrach jessical$ telnet localhost 143
2 Trying 127.0.0.1 ...
3 Connected to localhost.
4 Escape character is '^]'.
5 * OK shadrach.smallorg.org IMAP4revl V12.250 server ready
6 a001 LOGOUT
7 * BYE shadrach.smallorg.org IMAP4rev1 server terminating connection
8 a001 OK LOGOUT completed
9 Connection closed by foreign host.
10 [jessica@snadrach jessica]$
Листинг 7.1. Пример сеанса по протоколу IMAP

В строке 1 показана команда на открытие сеанса с помощью telnet с портом 143 (порт IMAP по умолчанию). Строка 5 отображает приглашение, выданное сервером IMAP. В строке 6 клиентом задана команда закончить сеанс с сервером. Затем сервер посылает сообщение об окончании сеанса (строка 7) и закрывает соединение с клиентом.

Каждая команда, выдаваемая клиентом, предваряется уникальным идентификатором. Сервер может затем использовать этот идентификатор в своих ответах, что позволяет клиенту определить, к какой команде относится ответ сервера. Это особенно важно при выполнении сервером нескольких команд за сеанс. Идентификатор обычно представляет собой короткую строку алфавитно-цифровых символов, которая генерируется клиентом. Так, в строке 6 листинга 7.1 клиентом был выбран идентификатор a001. Если бы клиенту потребовалось задавать и другие команды, то следующим идентификатором был бы a002 и т.д. Часто для упрощения идентификаторы команд в течение сеанса IMAP просто последовательно увеличивают один из своих разрядов.

После установления соединения клиент находится в состоянии ожидания проверки подлинности, так как для выполнения каких-либо операций со своим почтовым ящиком на сервере он должен идентифицировать себя. После идентификации на сервере клиент может использовать команды IMAP для управления сообщениями на сервере. Протоколом IMAP предусмотрена возможность поддержки пользователем нескольких почтовых ящиков на одном сервере. При этом клиент может читать, отправлять и удалять сообщения в любом из принадлежащих ему почтовых ящиков. Это серьезный шаг вперед, по сравнению с протоколом POP3.

Методы проверки подлинности пользователя в IMAP

Так же как и в протоколе POP3, в IMAP имеется несколько методов проверки подлинности клиента. Некоторые из них обеспечивают больший уровень безопасности, по сравнению с другими. В отличие от клиентов POP3, клиенты IMAP часто проводят довольно длительные сеансы с сервером при обработке сообщений. Таким образом, идентификатор пользователя и пароль не передаются по сети несколько раз в час, как это обычно происходит при работе по протоколу POP3. Несомненно, что передача идентификатора пользователя и пароля в зашифрованном виде остается актуальной и применяется по мере возможности.

Команда LOGIN

Команда LOGIN позволяет клиенту при регистрации на сервере IMAP использовать идентификатор пользователя и пароль в обычном текстовом виде. Хотя это и не наилучший метод, все же иногда это единственная возможность подключиться к серверу. В листинге 7.2 представлен сеанс IMAP с использованием команды LOGIN.

1 [katie@shadrach katie]$ telnet localhost 143
2 Trying 127.0.0.1...
3 Connected to localhost.
4 Escape character is '^]'.
5 * OK localhost IMAP4rev1 v12.250 server ready
6 a001 LOGIN katie boxcar
7 a001 OK LOGIN completed
8 a002 LOGOUT
9 * BYE shadrach.smallorg.org IMAP4rev1 server terminating connection
10 a002 OK LOGOUT completed
11 Connection closed by foreign host.
12 [katie@shadrach katie]$
Листинг 7.2. Пример сеанса IMAP с использованием команды LOGIN

В строке 6 вы видите, как пользователь katie регистрируется на сервере IMAP с помощью команды LOGIN. В строке 7 показан ответ сервера. Обратите внимание, что сервер в ответе указал идентификатор команды клиента ( a001 ).

Команда AUTHENTICATE

С помощью команды AUTHENTICATE клиент может использовать при регистрации на сервере IMAP альтернативные методы проверки подлинности. Индивидуальная проверка подлинности пользователей не является обязательной и поддерживается не всеми серверами IMAP. К тому же реализации такой проверки могут различаться в зависимости от сервера. Когда клиент выдает команду AUTHENTICATE, сервер отвечает на нее строкой вызова в кодировке base64. Далее в обязанности клиента входит ответ на вызов сервера о проверке подлинности, также закодированный base64. Если на сервере не поддерживается метод проверки подлинности, предложенный клиентом, он включает в свой ответ отрицательное слово NO. После этого клиент должен продолжить переговоры по согласованию метода проверки подлинности. Если все попытки определить метод проверки подлинности потерпели неудачу, то клиент предпринимает попытку зарегистрироваться на сервере посредством команды LOGIN. Пример сеанса с применением AUTHENTICATE представлен в листинге 7.3.

1 [riley@shadrach riley]$ telnet localhost 143
2 Trying 127.0.0.1...
3 Connected to localhost.
4 Escape character is '^]'.
5 * OK localhost IMAP4rev1 v12.250 server ready
6 a1 AUTHENTICATE KERBEROS_V4
7 a1 NO AUTHENTICATE KERBEROS_V4 failed
8 a2 AUTHENTICATE GSSAPI
9 a2 NO AUTHENTICATE GSSAPI failed
10 a3 AUTHENTICATE LOGIN
11 + VXNlciBOYU1lAA==
12 *
13 a3 NO AUTHENTICATE LOGIN failed
14 a4 LOGIN riley firetruck
15 a4 OK LOGIN completed
16 a5 LOGOUT
17 * BYE shadrach.smallorg.org IMAP4rev1 server terminating connection
18 a5 OK LOGOUT completed
19 connection closed by foreign host.
20 [riley@shadrach riley]$
Листинг 7.3. Пример сеанса IMAP с использованием команды AUTHENTICATE

В строках 6–9 показаны попытки клиента согласовать с сервером IMAP метод проверки подлинности. Как видите, все они не увенчались успехом. А в строке 10 показано, что метод проверки, приемлемый и для клиента, и для сервера, найден. Отвечая, сервер в строке 11 выдает кодированную строку с вызовом в кодировке base64. Однако в строке 12 клиент отвергает попытку регистрации и возобновляет ее лишь в строке 14 с помощью команды LOGIN.