Интернет-почта
Электронная почта и принципы ее работы
SendMail (http://www.sendmail.org)
PostFix (http://www.postfix.org)
QMail (http://www.ru.qmail.org:8101/inform.html)
Сейчас вряд ли кто задумывается, как работает электронная почта. Представить же себе работу или просто общение без электронной почты иногда просто невозможно. Электронная почта упрощает массу вещей, связанных просто с общением, деловым партнерством или рассылкой интересующей информации знакомым. И хотя уже существует много других Интернет-сервисов, таких как голосовая почта, Интернет-телефония или им подобные, но тем не менее стандартная старая добрая и хорошо всем известная электронная почта живет. Это вполне естественно, поскольку речь здесь идет просто о передаче порции информации, в подавляющем большинстве случаев текстовой. Это дешевле, чем звонить в другую страну по телефону или использовать голосовую почту, где объем передаваемой информации на несколько порядков выше. На самом деле доказывать, что почта хороша и удобна, нет смысла, так как это всем понятно и все и так ею пользуются. Цель же этой статьи — дать более глубокое представление о том, как работает система электронной почты в Интернете, и описать несколько конкретных программ, которые, собственно, ее и реализуют. Вначале речь пойдет об электронной почте вообще и о том, как она работает. Затем мы рассмотрим несколько программ, работающих с протоколом SMTP (Send Mail Transfer Protocol). В заключение расскажем о протоколах POP и IMAP и их предназначении.
Электронная почта и принципы ее работы
Электронная почта является одним из самых первых сервисов, которые были созданы в Интернете. Как и другие сервисы, он использует в качестве базы IP — протокол для передачи информации. Сам же протокол передачи почты называется SMTP, и почтовые программы работают уже непосредственно с ним. То есть это протокол более высокого уровня и, следовательно, более сложный. Важным различием является то, что почта работает непосредственно с пользователями в системе, что накладывает дополнительные требования на защиту почтовых систем. Но об этом чуть позже, а сейчас скажем лишь, что поскольку у нас UNIX-практикум, то обсуждать мы будем почтовые системы для Linux как самого распространенного и почти бесплатного UNIX.
Здесь приведена типичная схема работы Интернет-почты. Первый пользователь пишет письмо, причем чаще всего это происходит внутри программы User Agent, которая позволяет сформировать письмо полностью, то есть написать его текст, присоединить файлы, написать тему письма и все адреса. Иными словами, User Agent формирует письмо. Пример такой программы — Netscape, или Pine, или многие другие. Затем это письмо передается Transer Agent. Собственно, это и есть наиболее сложная и важная часть почтовой системы. Этот блок отвечает за предачу письма до компьютера второго пользователя. Точнее, на пути следования письма таких модулей много: на каждом компьютере письмо на всем пути его следования передается при помощи Transfer Agent, установленного на этой машине. Дойдя до машины второго пользователя, письмо при помощи Transfer Agent этой машины передается Delivery Agent, который отвечает за формирование MailBox пользователя. Чаще всего MailBox — это файл, где последовательно хранятся все приходящие письма. На этом работа почтовой системы заканчивается. Из MailBox почта читается почтовыми клиентами, например тем же Netscape, но к работе самой системы это уже отношения не имеет.
Само письмо состоит из двух частей: заголовка и тела письма. Для системы основное — это заголовок, для пользователей — тело письма. Заголовок содержит сведения об авторе письма, о получателях, времени создания. Заголовок также пополняется по мере прохождения письма по сети, и туда заносится информация о том, в какое время письмо проходило и через какие компьютеры. За заголовком следует пустая линия, отделяющая тело письма. В теле прописываются такие важные параметры, как кодировка текста письма, тип присоединенных файлов и некоторые другие. В отличие от многих иных сервисов, письма передаются по сети целиком, но не в том смысле, что одним большим IP-пакетом, а в том, что все пакеты, содержащие письмо, собираются на каждом передающем компьютере. Это нужно для того, чтобы в случае проблем письмо целиком отразилось от определенного компьютера. Система передачи полностью аналогична обычному роутингу сетевых пакетов. Для нее применяются записи так называемого Mail eXchanger (MX), которые содержат информацию о том, куда в зависимости от адреса получателя требуется направлять письмо. Так в целом происходит работа почтовых систем. Давайте рассмотрим теперь несколько конкретных почтовых серверов.
SendMail (http://www.sendmail.org)
Это самая первая программа, которая появилась для работы с почтой. Она существует изначально для всех разновидностей UNIX и соответственно для Linux. Несмотря на то что программа довольно старая, она является наиболее уязвимой с точки зрения защиты. На это существуют как минимум две причины. Во-первых, эта программа не имеет модульной структуры и потому ее исходный код весьма громоздкий. Во-вторых, хотя программа и старая и не всегда надежная, ею пользуются примерно на 79% систем. То есть если какая-то дыра обнаруживается, это делает уязвимым огромное число машин. Поскольку программа одномодульная, то ничего нового к приведенной выше схеме не добавляется. Поэтому мы сразу перейдем к описанию принципиальных моментов установки и настройки программы.
Сама программа бесплатная и поставляется в виде исходного кода, поэтому перед установкой ее необходимо скомпилировать. Для этого подойдет любой ANSI-компилятор, нужно только внимательно изучить инструкцию по установке. Это еще один минус данного сервера. Многие привычные вещи приходится забыть. Например, вместо простого и обычного make нужно запускать прилагаемый скрипт build. Это только первый из неочевидных моментов. Вообще их довольно много, но я не ставлю целью их перечислять, а лишь еще раз отмечу, что перед компиляцией нужно внимательно прочитать инструкцию. Затем, после компиляции и установки программы, следует сконфигурировать ее работу. Это занятие крайне утомительное, по крайней мере при использовании версии ниже 8.9, поскольку в этом случае вы имеете один файл /etc/sendmail.cf размером иногда за сотню килобайт. Правда, есть макропроцессор m4, который используется для создания этого файла, но это не слишком упрощает работу. Начиная с версии 8.9 часть настроек ушла в другие файлы, которые теперь помещаются в каталог /etc/mail. Это несколько снижает громоздкость и увеличивает читаемость этих файлов. Однако, несмотря на значительные продвижения вперед, SendMail, по мнению многих администраторов сетей, отживает свое и на смену ему приходят другие, изначально более продуманные программы.
PostFix (http://www.postfix.org)
Эта программа разрабатывалась как альтернатива SendMail. Как очевидное следствие, эта программа также бесплатна, что повышает ее используемость. Более того, она совместима с SendMail, а именно — поддерживает использование директорий и файлов, которые стандартны для SendMail (/var/spool/mail, /etc/aliases, ~/.forward), но не использует snedmail.cf. Вот как схематически выглядит работа PostFix: .
На этой схеме желтые эллипсы — это отдельные программные модули, желтые прямоугольники — это файлы или каталоги, а голубые прямоугольники — это таблицы, которые использует PostFix. То, что обведено в рамку, — это часть, управляемая главной программой. Тем самым мы видим первое и очень важное различие: эта программа имеет модульную структуру, каждый модуль запускается независимо от главного, что позволяет не исполнять все части от имени root. Более того, для выполнения какой-то незначительной операции нет необходимости запускать весь процесс целиком, достаточно запустить ту часть, которая за это отвечает. Использование модулей уменьшает затраты памяти и сокращает время работы. Для обработки писем существуют четыре очереди: maildrop, incoming, active и deferred. В очередь maildrop попадают письма, уходящие с самой этой машины. Оттуда они передаются в очередь incoming. В нее же попадают все письма с внешних машин. Основная обработка происходит в очередях active и deferred. Active представляет собой письма, обрабатываемые в данный момент. В случае проблем письма не удаляются, а передаются в очередь deferred. Под обработкой подразумевается определение дальнейшего пути следования письма. Важным свойством этой системы является контроль за соединением с соседними машинами, чтобы гарантировать отсутствие перегрузок системы, скажем, из-за слишком большого числа соединений. Еще один вопрос, который проработан в PostFix гораздо лучше, чем в SendMail, — это защита. Лучшая защита обеспечивается за счет модульности, исполнения критических кусков кода в среде, отделенной командой chroot, и многих других приемов, которые либо просто не применяются, либо по структуре принципиально не подходят программе Sendmail.
Конфигурация системы, хотя и является сложной, но все же весьма упрощена благодаря программе postconf, позволяющей более-менее наглядно производить установку новых значений параметров. Существует возможность изменять не все настройки подряд, а только какую-то группу, например параметры, относящиеся к пересылке писем. Основным является файл main.cf. Конечно, его можно редактировать и вручную, но в этом нет особого смысла при наличии программы.
QMail (http://www.ru.qmail.org:8101/inform.html)
Система QMail также является альтернативой Sendmail и конкурентом PostFix. Основные проблемы, которые эта система позволяет решать (в отличие от Sendmail), — те же, что и PostFix, то есть модульность, безопасность, удобство настройки. В какой-то мере QMail и PostFix похожи. QMail также является бесплатной программой и поставляется в виде исходного кода. Вот схема работы программы QMail: .
На схеме приведены модули программы, их взаимодействие и краткие комментарии к разным ее частям. Даже без пояснений видно сходство с PostFix и очевидные отличия от SendMail. Я сознательно не описывал конкретные настройки системы PostFix и не хочу делать этого в отношении QMail. В лучшем случае это будет пересказ технического описания, в худшем — закрадутся ошибки из-за опечаток. Поскольку сходство наглядно видно из схем, описывать новую систему тоже нет особого смысла. Давайте укажем различия.
Первые из них связаны с расположением файлов в системе, с параметрами программ, с количеством модулей. Кроме того, имеются особенности в алгоритмах обработки писем и очередей. Но главное, и это не видно на схемах, QMail предлагает новый формат почтовых ящиков, называемый MailDir. Данный формат позволяет решать некоторые проблемы, которые возникали при работе со старым форматом mbox в критических ситуациях, таких как падение системы, сбой программы, сбой системного времени или некорректная работа почтовых клиентов, читающих почту.
Резюме
Итак, из всего вышесказанного можно сделать следующие выводы: Sendmail устарел, а на смену ему постепенно приходят новые программы, наиболее популярными из которых являются PostFix и QMail. Какую из них выбрать — дело конкретного администратора. И та и другая позволяет выполнять все обычные операции с почтой, в том числе поддержку списков рассылки. Различие QMail — в формате почтового ящика, что вряд ли будет заметно конечному пользователю, поскольку он имеет дело с почтовым клиентом, который сам разбирается с почтовым ящиком. Важным для администраторов является то, что обе эти программы имеют гораздо более простую конфигурацию, чем стандартный SendMail, и гораздо более продуманную и надежную защиту. Так что выбор за вами.
В следующем номере мы поговорим об удаленном доступе к почте, а именно — о протоколах POP, IMAP, а также расскажем об организации WWW-почты типа mail.ru.
В статье использованы материалы и иллюстрации сайтов программ Sendmail (www.sendmail.org), PostFix (www.postfix.org) и QMail (www.qmail.org).
КомпьютерПресс 6'2001