Перейти к содержанию

16.3 Управление почтовым агентом (MTA) (Managing a Mail Transfer Agent)

В большинстве современных организаций электронная почта стала основой коммуникаций. Достаточно зайти в любую организацию в момент, когда почтовый сервер не работает, — вся продуктивная деятельность немедленно встаёт.

Поскольку электронная почта превратилась в неотъемлемый компонент большинства сетей, необходимо уметь управлять почтовым сервером. Помимо этого, многие службы Linux, например cron, опираются на локальный почтовый сервер для отправки сообщений локальным пользователям. Соответственно, для сдачи экзамена Linux+/LPIC-1 необходимо уметь управлять почтовым агентом (Mail Transfer Agent, MTA) в Linux-системах. В этой части главы рассматриваются следующие темы:

  • Как работает электронная почта
  • Управление MTA из командной строки Linux

Начнём с обсуждения того, как работает электронная почта.

Как работает электронная почта

Чтобы понять принцип работы MTA и уметь его развернуть, необходимо сначала разобраться в самом процессе передачи электронной почты.

Рис. 16-13. Процесс доставки электронной почты.

Рис. 16-13. Процесс доставки электронной почты.

Прежде всего следует понять, что система электронной почты состоит из нескольких модульных компонентов, каждый из которых выполняет свою роль в доставке сообщений от отправителя получателю. При отправке сообщения происходит следующее (см. рис. 16-13).

  1. Пользователь составляет сообщение с помощью почтового клиента. Клиентское программное обеспечение электронной почты называется агентом пользователя (Mail User Agent, MUA). К распространённым MUA относятся Evolution, Mozilla Thunderbird и Mutt. Главное помнить: MUA не знает, как доставить сообщение конечному получателю. Вместо этого он настроен на отправку исходящих сообщений на почтовый сервер.

  2. Когда пользователь нажимает «Отправить», MUA передаёт исходящие сообщения на настроенный почтовый сервер по протоколу SMTP (Simple Mail Transfer Protocol — простой протокол передачи почты). SMTP — это протокол верхнего уровня на основе IP, работающий на порту 25. Единственная задача SMTP — передача сообщений между почтовыми агентами.

  3. Сообщение передаётся от MUA к агенту передачи почты (Mail Transfer Agent, MTA) на почтовом сервере. MTA решает, что делать с сообщением. Если оно предназначено другому пользователю той же организации, сообщение удерживается локальным MTA для доставки MUA получателя. Если же получатель находится в другом домене, MTA пересылает сообщение по SMTP через Интернет к MTA, обслуживающему почту получателя.

  4. Целевой MTA передаёт сообщение агенту доставки почты (Message Delivery Agent, MDA, также называемому хранилищем сообщений) системы получателя. Задача MDA — хранить сообщение до тех пор, пока MUA получателя его не запросит.

  5. Получатель использует почтовый клиент (другой MUA), чтобы подключиться к хранилищу сообщений и загрузить сообщение. Для этого применяется либо протокол POP (Post Office Protocol) версии 3, либо протокол IMAP (Internet Message Access Protocol). Оба протокола поддерживаются большинством MDA и MUA. POP3 загружает сообщение через порт 110 и удаляет его из хранилища. IMAP выполняет то же самое через порт 143. При этом IMAP имеет ряд преимуществ перед POP3: он позволяет загружать сообщение целиком или только заголовки, сохранять копии сообщений в хранилище, а также создавать в нём собственные папки для организации сообщений.

Примечание

Большинство MTA для Linux не включают функциональность POP3 или IMAP. Чтобы пользователи могли читать почту через MUA, необходимо установить и настроить POP3/IMAP-демон, который будет забирать сообщения из MTA и доставлять их по соответствующему протоколу в MUA.

Все дистрибутивы Linux включают MTA, работающий по умолчанию. На Linux широко применяются несколько MTA:

  • sendmail Демон sendmail — старейший MTA в Linux, но по-прежнему используемый по умолчанию во многих дистрибутивах. Он активно применялся многие годы. Главная особенность sendmail — отсутствие модульности: это единственный исполняемый файл. По сравнению с другими MTA sendmail бывает сложно настраивать.

  • postfix Демон postfix — популярный MTA, заменивший sendmail во многих дистрибутивах. Одним из ключевых преимуществ postfix над sendmail является его модульность: он состоит из нескольких программ вместо одного исполняемого файла. Каждая программа отвечает за свои задачи. postfix использует главный демон совместно с несколькими рабочими демонами, которые запускаются только по необходимости и автоматически останавливаются главным демоном по завершении работы. В совокупности главный и рабочие демоны образуют единую систему обработки почты. Этот процесс показан на рис. 16-14.

Рис. 16-14. Обработка сообщений в postfix.

Рис. 16-14. Обработка сообщений в postfix.

  1. Если сообщение поступает в MTA Postfix от удалённого MTA или MUA, его принимает рабочий демон smtpd, который передаёт его демону cleanup.
  2. Если сообщение отправлено пользователем локально с командной строки:
    • а. Его принимает демон postdrop — ещё один рабочий демон Postfix.
    • б. Демон postdrop помещает сообщение в каталог maildrop в /var/spool/postfix.
    • в. Демон pickup перемещает сообщение из каталога maildrop и передаёт его демону cleanup.
  3. Сообщение, независимо от того, поступило ли оно удалённо или локально, обрабатывается демоном cleanup.
  4. Демон cleanup помещает сообщение во входящую очередь (incoming), находящуюся также в /var/spool/postfix.
  5. Демон cleanup уведомляет диспетчер очередей (qmgr) о новом сообщении.
  6. Демон qmgr перемещает сообщение в одну из пяти очередей в /var/spool/postfix:
    • incoming — входящие сообщения, обработанные демоном cleanup.
    • active — сообщения, принятые без ошибок и готовые к пересылке на следующий MTA или MDA.
    • hold — сообщения, доставка которых по какой-либо причине приостановлена.
    • deferred — сообщения, которые не удалось доставить с первой попытки. Демон qmgr подождёт и предпримет несколько новых попыток.
    • corrupt — сообщения, повреждённые при передаче и ставшие нечитаемыми.
  7. Демон qmgr вызывает демон trivial-rewrite, который определяет следующий MTA или MDA для отправки сообщения.
  8. Затем qmgr передаёт сообщение соответствующему агенту доставки. Если сообщение предназначено локальному пользователю, используется локальный агент; если оно предназначено другому MTA или MDA — агент smtp.
  9. Выбранный агент передаёт сообщение в соответствующую систему:
    • qmail MTA qmail — ещё один модульный демон MTA, часто используемый как замена sendmail. Его особенность — изначальная ориентация на безопасность: модульная архитектура основана на взаимном недоверии компонентов. Каждый модуль (например, SMTP-прослушиватель) использует уникальные учётные данные, не совпадающие с учётными данными других модулей. Многие администраторы, как и в случае с postfix, считают qmail проще в управлении, чем sendmail. Тем не менее qmail не является MTA по умолчанию ни в одном дистрибутиве — из-за наличия компонентов, охраняемых проприетарным лицензионным соглашением. Несмотря на это, у qmail немало поклонников. Следует знать о двух дополнительных почтовых протоколах, реализованных в qmail:
      • QMQP (Quick Mail Queuing Protocol) — позволяет совместно использовать очереди сообщений разными MTA.
      • QMTP (Quick Mail Transport Protocol) — протокол передачи, аналогичный SMTP, но более быстрый.
    • Exim Для экзамена LPIC-1/Linux+ необходимо знать о MTA Exim. Exim — немодульный MTA, состоящий из единственной программы (как и sendmail). При этом он считается значительно проще в настройке и управлении, чем sendmail. Небольшое число дистрибутивов Linux используют Exim как MTA по умолчанию.

Как упоминалось ранее, перечисленные MTA могут принимать сообщения от MUA по SMTP. Однако они не умеют доставлять сообщения почтовым клиентам по POP3 или IMAP. Для этого необходимо установить пакет imap с помощью предпочитаемой утилиты управления пакетами. Этот пакет устанавливает IMAP- и POP3-демоны для передачи сообщений из MTA в почтовый клиент.

Оба демона управляются через демон xinetd. Активировать их можно в файле /etc/xinetd.d/imap, после чего необходимо перезапустить xinetd.

Примечание

xinetd будет подробнее рассмотрен в следующей главе.

Если ваш дистрибутив использует init, управление демоном MTA осуществляется через соответствующий сценарий init. Например, сценарий init для postfix называется postfix, а для sendmailsendmail. Если ваш дистрибутив использует systemd, для запуска, остановки и перезагрузки соответствующего файла службы применяется команда systemctl.

Теперь, когда мы разобрались в принципах работы электронной почты и роли MTA, рассмотрим команды для управления MTA в Linux.

Управление MTA из командной строки Linux

Рассмотрим сначала чтение сообщений, хранящихся в локальном MTA. При входе в сеанс оболочки вы будете уведомлены о наличии ожидающих почтовых сообщений. Читать сообщения локальных пользователей из локального MTA напрямую из командной строки позволяет команда mail. При её запуске отображается список сообщений, как показано на рис. 16-15.

Примечание

Некоторые службы Linux настроены на отправку уведомлений пользователю root.

Рис. 16-15. Чтение почты из командной строки.

Рис. 16-15. Чтение почты из командной строки.

Сообщения хранятся в пользовательской очереди почты, расположенной в каталоге /var/spool/mail/. Утилита mail читает сообщения непосредственно из файла очереди пользователя. Поскольку утилита запускается на той же системе, где находится очередь, поддержка POP3 или IMAP не требуется. В подсказке ? можно вводить команды mail, перечисленные в таблице 16-4.

Команда mail Описание
t Для чтения сообщения введите t номер_сообщения в строке ?.
d Для удаления сообщения введите d номер_сообщения в строке ?.
u Для отмены удаления сообщения введите u номер_сообщения в строке ?.
n Введите n для отображения следующего сообщения в очереди.
e Введите e номер_сообщения для редактирования сообщения.
R Для ответа отправителю введите R номер_сообщения в строке ?.
r Для ответа всем получателям введите r номер_сообщения в строке ?.
m Для отправки нового сообщения введите m получатель в строке ?.
q Введите q для выхода из mail.

Таблица 16-4. Команды mail.

Пример просмотра полученного сообщения с помощью команды t показан на рис. 16-16.

Для отправки сообщения введите mail адрес_получателя в командной строке. Затем введите тему и текст сообщения. Нажмите Ctrl+D по завершении, чтобы отправить сообщение — оно будет помещено в очередь другого пользователя локальным MTA.

Для просмотра списка непрочитанных сообщений в очереди введите mailq в командной строке.

Рис. 16-16. Просмотр сообщения в очереди почты.

Рис. 16-16. Просмотр сообщения в очереди почты.

Помимо mail, существует множество других пакетов для чтения почты из командной строки. Главное помнить: пользователь должен запускать команду mail непосредственно на локальной системе. Если пользователь работает на другом компьютере, ему потребуется подключиться по SSH для чтения почты.

Примечание

SSH (Secure Shell) будет рассмотрен в главе 18.

Для MTA, работающего в Linux-системе, можно также настраивать псевдонимы. Псевдонимы почты (Mail aliases) перенаправляют почту, адресованную одному пользователю, в учётную запись другого пользователя. Для настройки псевдонимов используется файл /etc/aliases. Каждая строка файла определяет один псевдоним, который должен указывать на существующий адрес электронной почты. Синтаксис:

псевдоним:    список_реальных_адресов (через запятую)

Например, в большинстве дистрибутивов Linux в этом файле должны присутствовать следующие псевдонимы:

postmaster: root
mailer-daemon:          postmaster

Они обеспечивают автоматическую переадресацию всей почты, отправленной на адрес postmaster, пользователю root. Аналогично, почта, отправленная на адрес mailer-daemon, перенаправляется на postmaster (а затем — на root). В зависимости от дистрибутива многие псевдонимы уже настроены по умолчанию. Пример:

# General redirections for pseudo accounts in /etc/passwd.
administrator:     root
daemon:            root
lp:          root
news:        root
uucp:        root
games:       root
man:         root
at:          root
postgres:    root
mdom:        root
amanda:      root
ftp:         root
wwwrun:      root
squid:       root
msql:        root
gnats:       root
nobody:      root
# "bin" used to be in /etc/passwd
bin:         root

При необходимости можно добавить собственные псевдонимы: откройте файл псевдонимов в текстовом редакторе и добавьте нужные псевдонимы по одному в строке. После настройки псевдонимов необходимо выполнить команду newaliases от имени root для их активации.

Для настройки переадресации также можно использовать файл ~/.forward в домашнем каталоге пользователя. Большинство Linux-MTA проверяют наличие этого файла для настройки переадресации сообщений. Создайте файл в текстовом редакторе и введите адрес, на который необходимо пересылать почту. Для переадресации к локальному пользователю достаточно указать его имя. При переадресации на удалённый адрес укажите имя@домен.com. Несколько получателей разделяются запятой.

Примечание

MTA воспринимает адреса в этом файле как псевдоним. Это означает, что вся почта будет пересылаться по указанному адресу. В исходный почтовый ящик пользователя сообщения доставляться не будут.

Теперь, когда вы познакомились с управлением электронной почтой в Linux, завершим главу обсуждением управления данными SQL-сервера.