Сейчас вряд ли кто задумывается, как работает электронная почта. Представить же себе работу или просто общение без электронной почты иногда просто невозможно. Электронная почта упрощает массу вещей, связанных просто с общением, деловым партнерством или рассылкой интересующей информации знакомым. И хотя уже существует много других интернет-сервисов, таких как голосовая почта, интернет-телефония или им подобные, но, тем не менее, стандартная старая добрая и хорошо всем известная электронная почта живет.
Это вполне естественно, поскольку речь здесь идет просто о передаче порции информации, в подавляющем большинстве случаев текстовой. Это дешевле, чем звонить в другую страну по телефону или использовать голосовую почту, где объем передаваемой информации на несколько порядков выше. На самом деле доказывать, что почта хороша и удобна, нет смысла, так как это всем понятно и все и так ею пользуются. В этой статье мы рассмотрим, как работает система электронной почты в Интернете, и опишем несколько конкретных программ, которые ее и реализуют.
Электронная почта и принципы ее работы Электронная почта является одним из самых первых сервисов, которые были созданы в Интернете. Как и другие сервисы, он использует в качестве базы 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. Очень важное отличие: эта программа имеет модульную структуру, каждый модуль запускается независимо от главного, что позволяет не исполнять все части от имени 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 предлагает новый формат почтовых ящиков, называемый MailDir. Данный формат позволяет решать некоторые проблемы, которые возникали при работе со старым форматом mbox в критических ситуациях, таких как падение системы, сбой программы, сбой системного времени или некорректная работа почтовых клиентов, читающих почту. На этом обзор почтовых серверов для Linux мы и закончим.