Настройка служб E-mail во FreeBSD

Конфигурирование Sendmail, приложения SMTP-сервера, представляющего собой основу электронной почты в Internet, является одной из самых сложных задач администрирования. Тем не менее данная глава озна-комит читателя с системой Sendmail на уровне, достаточном для настройки защиты и высокой производительности системы.

Кроме того, здесь рассказано и о другом элементе электронной почты: протоколах POP и IMAP, служащих для получения сообщений клиентами. Впрочем, они гораздо проще, чем система Sendmail. Мы, начнем с наиболее сложного протокола.

Общие сведения об SMTP

SMTP - Simple Mail Transfer Protocol (простой протокол передачи почты) - один из самых ранних протоколов Internet. Он ровестник самой электронной почты, которая была создана в 1971 году (прошло всего два года с того момента, как была создана первая сеть ARPA). Ее автор - Рэй Томлинсон (Ray Tomlinson). Задачей SMTP была пересылка текстовых сообщений с одного хоста на другой. Схема пересылки почты отличается от работы сети Internet, где посылка отдельных пакетов осуществляется от одного маршрутизатора другому. SMTP-сервер отправителя взаимодействует непосредственно с SMTP-сервером получателя.

Протокол SMTP достаточно прост. Соединение устанавливается на 25-ом порту сервера. Затем следует автоматический код приветствия, несколько необязательных команд аутентификации и команд, устанавливающих тип операции, выполняемой сервером. Затем сервер запрашивает сообщение и получает его. И наконец, команда завершения закрывает соединение. SMTP используется именно для таких операций и большими возможностями не обладает. Для работы по SMTP не требуется даже специального программного обеспечения. Фактически, любую SMTP-операцию можно выполнить прямо из командной строки. Пример посылки сообщения приведен в листинге 25.1. Полужирным шрифтом выделен пользовательский ввод, производимый во время сеанса работы.

Листинг 25.1 Выполнение операции по SMTP

# telnet destination.com 25

Trying 64.41.134.166...

Connected to destination.com.

Escape character is `^] ' .

220 destination.com ESMTP Sendmail 8.11.1/8.11.1; Wed, 16 May 2001

22:55:37

-0700 (PDT)

HELO stripes.sender.com

250 destination.com Hello w012.z064002043.sjc-ca.dsl.cnc.net [64.2.43.12],

pleased to meet you

MAIL From: frank@sender.com

Глава 25. Настройка служб E-mail 465

250 2.1.0 franlc@sender.com... Sender ok

RCPT To: bob@destination.com

250 2.1.5 bob@destination.com... Recipient ok

DATA

354 Enter mail, end with "." on a line by itself

From: frank@ sender.com

To: bob@destination.com

Subject: Testing, 123...

This is a test message.

250 2.0.0 ?4H5uCu53501 Message accepted for delivery

QUIT

221 2.0.0 destination.com closing connection Connection closed by foreign host.

Как легко заметить, взаимодействие между двумя серверами осуществляется по-средством четырехсимвольных команд. По соглашению в командах применяются только буквы верхнего регистра. Аргументы команд включаются в заголовки сообщения. Сообщение, полученное пользователем по адресу bob@destination.com, в клиентской почтовой программе будет иметь следующие заголовки:

From: frank@sender.com To: bob@destination.com Subject: Testing, 123...

Заголовки отделяются от тела сообщения одной пустой строкой. Строка, содержащая только точку, обозначает конец тела сообщения. Когда SMTP-программа, получающая сообщение, считывает этот признак, она добавляет сообщение в почтовый файл получателя (/var/mail/bob, если он находится на FreeBSD-машине). Это, собственно, и все. Полнофункциональная SMTP-программа (типа Sendmail) пересылает сообщения с помощью нескольких дополнительных команд, повышающих производительность и эффективность.

Клиент взаимодействует с SMTP-сервером своего Internet-провайдера, а не прямо с сервером получателя. Это сделано для того, чтобы воспользоваться преимуществами постановки сообщений в очередь. Такое поведение SMTP-серверов на уровне приложений расширяет функциональность SMTP точно так же, как DNS, не являясь частью стека TCP/IP, делает это для приложений Internet. Постановка сообщений в очередь приводит к тому, что сообщения ожидают момента, когда станет доступным соединение с почтовым сервером получателя. Такая методика освобождает клиента (подключающегося, например, по коммутируемой линии) от необходимости следить за SMTP-сервером получателя, размещать сообщения в очереди и проверять соединение через определенные промежутки времени. Вместо этого клиент устанавливает одно соединение, пересылает все сообщения очереди SMTP-сервера и завершает сеанс. Отправкой сообщений занимается уже SMTP-сервер.

Агенты пересылки почты (МТА) и пользовательские почтовые агенты (MUA)

Путь сообщения от отправителя к адресату схематически показан на рис. 25.1. Независимо от того, подключен ли пользователь по коммутируемой линии или работает непосредственно на консоли почтового сервера, путь сообщения одинаков: вве-денные данные поступают к пользовательскому почтовому агенту (Mail User Agent) (он же почтовый клиент), затем сообщение размещается в очереди SMTP-сервера. Как только устанавливается соединение с SMTP-сервером адресата, агент пересылки почты (Mail Transfer Agent, MTA) (например, Sendmail) извлекает сообщение из очереди и пересылает его. Поскольку данный процесс пересылает сообщение, ни источником, ни адресатом которого сам SMTP-сервер не является, этот этап называется relaying (пересылка). На удаленной системе МТА помещает это сообщение в почтовый ящик адресата. Его можно прочесть с помощью почтового клиента (MUA) при работе на консоли или загрузить по протоколу РОРЗ (при подключении, например, по коммутируемой линии).

Как же Sendmail работает в роли отправителя и получателя?

Вот несколько программ МТА, используемых в Internet:

o Sendmail. На сегодняшний день, самый распространенный МТА. Программа разработана Эриком Олманом (Eric Allman) в 1983 году и стала стандартом де-факто для различных платформ. Имеет и коммерческие и свободно распрост-раняемые компоненты. Компания Sendmail, Inc. (http://www.sendmail.com) -полноценная корпорация, которая занимается поддержкой Sendmail для ком-мерческих версий UNIX и Linux. Проект Sendmail (http://www.sendmail.org) распространяет бесплатную версию этой программы, поддержка которой осу-ществляется на добровольной основе. Ресурсы доступны в открытом коде, традиционном для таких систем, как FreeBSD (Sendmail включен в нее по умолчанию)

o Microsoft Exchange. Эквивалент Sendmail для системы Windows, поддерживаю-щий несколько типов пересылки сообщений (РОРЗ, NNTP, LDAP), Exchange разработан на коммерческой основе и по традиции Microsoft распространяет-ся в закрытом коде.

o Postfix. Эта программа, написанная Вьетсом Венемой (Wietse Venema) как альтернатива Sendmail, разработана с тем, чтобы стать более быстрой, более защищенной и более простой в работе, чем Sendmail.

o Qmail. Программа Qmail, еще одна альтернатива Sendmail, была написана Дэ-ном Бернстайном (Dan Bernstein). Она быстро становится популярной, благо-даря преимуществам в вопросах защиты и скорости. В отличие от агента Postfix (который имитирует взаимодействие Sendmail с системой, например, в разме-щении спула и конфигурационных файлов), Qmail использует собственную структуру и не пытается облегчить переход к ней Sendmail - пользователям.

МТА, которые портированы во FreeBSD, можно найти в каталоге /usr/ports/ mail.

Распространенные пользовательские почтовые агенты (MUA)

Пользовательских почтовых агентов (Mail User Agents) значительно больше, чем МТА (например, Microsoft Outlook/Outlook Express, Eudora, Apple Mail, Netscape Mail и т.д.). Ниже приведен список наиболее популярных MUA, включенных в состав FreeBSD.

o Pine. Официальный акроним от "Program for Internet News and E-mail". Про-грамма разработана в Вашингтонском университете. Pine довольно широко используется, обеспечивая интуитивный интерфейс, множество современных функций обработки сообщений, составитель сообщений (message composer) на базе редактора pico (поставляемый в пакете с Pine).

o Elm. Программа, послужившая основой для Pine. Elm эволюционировала от древних почтовых программ mail и mailx, которые применялись для работы с электронной почтой в университетских и правительственных сетях, предше-ствовавших Internet. Примитивный по стандартам сегодняшнего дня клиент Elm все еще достаточно распространен.

o Mutt. Представляет собой гибрид различных MUA и включает свойства Elm, Pine и других программ. Mutt считается лучшим среди них. Он имеет функции, отсутствующие у многих клиентов, включая и те, что требуют графических MUA на клиентской стороне.

Обратите внимание, что перечисленные здесь почтовые агенты ориентированы на работу с командным интерпретатором, их можно запустить во время сеанса Telnet или SSH. Это значит, что эти клиенты являются текстовыми и не поддерживают изоб-ражения или HTML-форматирование (хотя их можно настроить таким образом, что-бы открывать подобные вложения во вспомогательных приложениях). Но главное достоинство состоит в том, что с помощью этих программ пользователь может проверить почту независимо от того, где он находится, - достаточно открыть сеанс Telnet или SSH. И еще! Ваша система никогда не пострадает от заполонивших Internet вирусов, предназначенных для Windows/Outlook.

Настройка основных служб Sendmail

В состав FreeBSD включена программа Sendmail, причем она уже сконфигурирована и готова к работе. Достаточно лишь активировать Sendmail (чтобы агент запускался во время загрузки), добавив в файл /etc/rc.conf следующую строку:

Sendmail_enable="YES"

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

Схема размещения файлов Sendmail

С работой Sendmail связаны три точки файловой системы:

o /etc/mail: Конфигурационные файлы Sendmail.

o /var/mail: Почтовые ящики пользователей.

o /var/spool/mqueue: Файлы очереди сообщений.

Выполняемый файл Sendmail расположен в /usr/sbin/sendmail, a log-файлы хранятся в /var/log/maillog (их обновление происходит ежедневно, автоматизированный запуск заданий обсуждается в главе 14).

ПРИМЕЧАНИЕ

В некоторых системах по историческим причинам выполняемый файл Sendmail размещен в /usr/lib/sendmail. Если вам приходится запускать программы, которым требуется именно такой путь, можно несколько нарушить структуру каталогов FreeBSD и создать символическую ссылку:

# In -s /usr/sbin/sendmail /usr/lib/sendmail

Файлы почтовых ящиков (т.е. почтовый спул) в каталоге /var/mail представляют собой обычные текстовые файлы. Имя каждого из них совпадает с именем пользователя-владельца, а права доступа установлены как 600 (доступен для чтения и записи только владельцу). Новые сообщения добавляется к файлу почтового спула адресата. Кроме того, существуют специальные lock-файлы POP, имеющие нулевую длину и имя .username.pop. Они получают содержимое соответствующего файла почтового спула, пока открыто РОРЗ-соединение. О работе РОРЗ-сервера рассказано далее в этой главе.

Конфигурационные файлы

Ниже перечислены файлы из каталога /etc/mail, необходимые при работе Sendmail.

/etc/mail/sendmail.cf

Это основной конфигурационный файл Sendmail. Однако, в отличие от подобных файлов других программ, он не предназначен для редактирования. Изменения вносятся в основной конфигурационный файл - Master Config (.mc), из которого после компиляции получается sendmail.cf.

Файл sendmail.cf содержит опции, наборы правил и свойства. Его формат сложен и неудобен для чтения. Поэтому пытаться изменять что-то в sendmail.cf можно лишь в случае крайней необходимости.

/etc/mail/freebsd.mc

Это вышеупомянутый файл Master Config. Он содержит список свойств и опций, которые отменяют действие настроек по умолчанию в стандартном конфигурационном файле точно так, как /etc/rc.conf отменяет действие /etc/defaults/rc.conf. В данном случае формат опций гораздо сложнее. Команды заданы в формате макроязыка m4 (за пределами конфигураций Sendmail используется редко). Файл .mс компили-руется вместе с файлом cf.m4, размещенным в каталоге с исходным кодом Sendmail (в /usr/share/sendmail или /usr/src/contrib/sendmail). В результате компиляции создается конфигурационный файл .cf, который можно затем установить как новый файл sendmail.cf.

Раньше, чтобы создать файл sendmail.cf, необходимо было перейти в каталог ис-ходного кода, определить, какой .mс лучше всего подходит для данной системы, внести изменения согласно документации, затем, пользуясь сложными командами компиляции языка m4, создать требуемый файл и лишь потом вручную установить его. На сегодняшний день ситуация заметно улучшилась, но интерфейс конфигурирования все еще нельзя назвать дружественным.

Каждая строка в языке m4 содержит в некоторой позиции подстроку dnl. Последняя означает "delete through newline" - "удалить до конца строки", dnl отмечает конец строки (поэтому эта команда должна присутствовать в каждой строке). Чтобы закомментировать строку, следует расположить dnl в ее начале, а чтобы раскомментировать - в конце.

В каталоге /etc/mail имеется Makefile, который позволяет создать новый .cf-файл из freebsd.mc с помощью команды make cf. Чтобы установить выходной файл (freebsd.cf) как новый вариант sendmail.cf, достаточно воспользоваться командой make install.

# make cf

/usr/bin/m4 -D_CF_DIR_= /usr/share/sendmail/cf/ /usr/share/sendmail/cf/m4/ cf.m4 freebsd.mc > freebsd.cf

# make install

install -c -m 444 freebsd.cf /etc/mail/sendmail.cf

Файл /etc/mail/Makefile предназначен еще для нескольких целей, о которых рас-сказано далее.

/etc/ mail/aliases

В каталоге /var/mail существует почтовый ящик каждого пользователя системы. Кроме того, можно воспользоваться псевдонимами, перенаправляющими входящую электронную почту на другие адреса (на локальной машине или где-либо в Internet) или в файлы или программы (с помощью конвейера). Примеры таких настроек по умолчанию содержатся в файле /etc/mail/aliases. Строка с псевдонимом содержит имя, двоеточие, пробел или символ табуляции и адрес назначения или конвейер:

tiger: ЬоЬ@ в tripes.com fsmith: frank

pager: "|/usr/local/bin/pageme" dump:

""/home/frank/dump2me"

mylist:include:/home/frank/list.txt

Это пример подключения внешнего файла псевдонимов. Список адресов читается из обычного текстового файла. Это простой способ поддержки списка рассылки: достаточно внести изменения в файл, и таблица псевдонимов всегда будет актуальна.

После внесения изменений в файл /etc/mail/aliases, необходимо заново собрать файл aliases.db, в котором хранится ассоциативная таблица псевдонимов для быстрого поиска (это похоже на файл /etc/master.passwd, о котором говорилось в главе 10). Для создания этого файла можно воспользоваться традиционной командой newaliases или командой make aliases:

o make aliases

/usr/sbin/sendmail -bi

/etc/mail/aliases: 22 aliases, longest 10 bytes, 213 bytes total

ПРИМЕЧАНИЕ

Глобальные псевдонимы - не единственный способ перенаправить почту с локального адреса на другой локальный или внешний адрес. Например, если пользователю требуется, чтобы вся вхо-дящая почта автоматически пересылалась на какие-либо внешние адреса, можно воспользо-ваться настройками в файле /etc/mail/aliases, однако это требует прав доступа root. Суще-ствует более удобный способ, если пользователь имеет полноценную учетную запись в системе.

Чтобы пересылать почту на другой адрес, достаточно создать в home-каталоге пользователя файл .forward, содержащий требуемый адрес. Выполнить это можно с помощью любого текстового редактора или просто команды echo:

# echo "frank@somewhereelse.com" > .forward

Чтобы остановить пересылку почты, следует удалить этот файл.

/etc/mail/access

База данных доступа access позволяет указать правила, применяемые к отдельным хостам, подсетям или группам адресов. Это отличная предосторожность против нежелательной рекламы. Допустимые правила включают OK, REJECT, RELAY, DISCARD или 550 <message>. Содержимое файла /etc/mail/access по умолчанию показывает, как форматируется поле адреса/имени хоста:

cyberspammer.com 550 Ие don't accept mail from spammers

FREE.STEALTH.MAILERS 550 We don't accept mail from spammers

another.source.of.spam REJECT

okay.cyberspammer.com OK

128.32 RELAY

64.2.43 RELAY

RELAY

o Правило OK принимает сообщения от заданного хоста даже тогда, когда он не удовлетворяет другим проверкам, о которых рассказано далее.

o Правило REJECT отвергает соединения, устанавливаемые с указанного хоста.

o Правило DISCARD отбрасывает сообщения после их принятия, что позволяет отправителю думать, что все сообщения были успешно доставлены адресату.

o Правило RELAY включает пересылку сообщений указанному хосту, отменяя другие проверки (подобно правилу ОК).

?Правило 550 <message> задает сообщение "отказа", которое отображается от-

правителю, принадлежащему заданному хосту. Оно появляется во время SMTP- сеанса и включается в почтовое сообщение об ошибке, отсылаемое пользователю.

Когда в файл /etc/mail/access внесены изменения, необходимо заново сгенери-ровать access.db. Для этого используется команда make maps, которая обновляет файлы карт, измененные с момента предыдущего запуска make maps. Чтобы пере-запустить главный процесс Sendmail с новой версией файла access.db, воспользуйтесь командой make restart:

# make maps /usr/sbin/makemap hash access.db < access

# make restart /bin/kill -HOP 'head -1 /var/run/sendmail.pid'

/etc/mail/local-host-names

В этом файле (в прошлом он назывался sendmail.cw) указаны имена хостов, при-надлежащих данному серверу. Это особенно важно, когда на одной машине разме-щено несколько доменов, для каждого из которых обеспечивается почтовая служба (виртуальный хостинг). Если не добавить доменное имя в файл local-host-names file, входящее сообщение вернется к отправителю с устрашающим сообщением: MX list for <domain> loops back to myself; local configuration error message (Список MX для домена <domain> замкнут на себя; ошибка локальной конфигурации).

В инсталляции по умолчанию этот файл отсутствует. Его нужно создать, если машина имеет несколько доменных или хостовых имен в DNS. Добавив имена хос-тов в этот файл, необходимо перезапустить сервер командой make restart.

# make restart

/bin/kill -НИР 'head -1 /var/run/sendmail.pid'

/etc/mail/virtusertable

Файл /etc/mail/virtusertable также используется при виртуальном хостинге. Он позволяет поставить в соответствие почтовым адресам локальные учетные записи, другие адреса или сообщения об ошибках. Данный файл представляет собой гибрид базы данных доступа и файла псевдонимов.

Предположим, что на машине размещен второй домен, mycave.org. Требуется, чтобы письма на адрес webmaster@mycave.org пересылались локальному пользовате-лю bill, на info@mycave.org - на удаленный адрес anne@elsewhere.com, а письма на все остальные адреса @mycave.org отвергались. Для решения этой задачи служит сле-дующий набор правил (символом-разделителем служит табуляция):

webmaster@mycave.org bill

info@mycave.огд anne@elsewhere.com

@mycave.org errorinouser User unknown

Порядок, в котором определены правила, не имеет значения. При создании ассо-циативной таблицы virtusertable.db каждое правило имеет собственное значение для поиска. Как и для базы данных доступа, файл virtusertable.db необходимо обновить, а затем перезапустить сервер:

# make maps /usr/sbin/makemap hash virtusertable.db < virtusertable

# make restart /bin/kill -HUP 'head -1 /var/run/sendmail.pid'

Подробное обсуждение виртуального хостинга и использования файла virtusertable можно найти на Web-сайте консорциума Sendmail по адресу http://www.sendmail.org/ virtual-hosting.html.

ПРИМЕЧАНИЕ

Файл /etc/mail/Makefile, необходимый для сборки различных конфигурационных баз данных, добавлен во FreeBSD. Он не включен в версию, распространяемую разработчиками Sendmail. Поэтому другие операционные системы не обладают подобными удобствами. Чтобы поддержи-вать Sendmail в Linux или на другой платформе, необходимо знать все команды, содержащиеся в Makefile и выполнять их вручную.

Вопросы разрешения DNS-адресов

Для корректной работы сервера Sendmail необходимо, чтобы в таблицах DNS содержалась точная информация о машине, на которой он запущен. Если вы устано-вили FreeBSD, присвоили машине произвольный IP-адрес и пытаетесь отправить сообщение, оно может вернуться назад с ошибкой: сервер не может правильно вы-полнить разрешение имени хоста. Многие SMTP-серверы, включая и Sendmail, скон-фигурированные по умолчанию, не принимают сообщения от адресатов, не имеющих корректных доменных имен. Прежде чем запускать Sendmail, необходимо убедиться, что для данной машины правильно настроено обратное DNS-преобразо-вание имен. Для этого следует запустить команду nslookup с IP-адресом в аргументе:

# nslookup stripes.somewhere.com

Server: lion.somewhere.com

Address: 64.41.131.132

Name: stripes.somewhere.com Address: 64.41.131.102

Здесь приведен пример корректной настройки обратного DNS-преобразования. В этом случае система Sendmail сможет работать. Если же вывод гласит следующее:

# nslookup stripes.somewhere.com

Server: lion.somewhere.com

Address: 64.41.131.132

*** lion.somewhere.com can't find stripes.somewhere.com: Non-existent host/ domain

это значит, что с доставкой почты (и отправлением, и получением) возможны про-блемы, пока не будет настроено корректно обратное преобразование имен. Отметьте, что проверку необходимо осуществлять на удаленном DNS-сервере, поскольку локальный DNS-сервер иногда выводит информацию, известную только ему и не распространяющуюся на остальную часть Internet. Вопросы настройки DNS обсужда-ются в главе 30.

Управление системой Sendmail

Сервер Sendmail работает следующим образом: запускается "главный" процесс, который прослушивает порт 25, ожидая входящих соединений, а также дополнительные процессы для обработки очередей, посылки сообщений удаленным адресатам и т.д. Главный процесс запускается при загрузке из /etc/re. Его запуск и останов достаточно просты благодаря файлу Makefile и конфигурационным файлам ресурсов в каталоге /etc. Чтобы начать выполнение процесса, достаточно воспользоваться командой make start:

# make start

(. /etc/defaults/rc.conf; source_rc_confs; if [ "${ sendmail_enable} " = "YES" -a -r /etc/mail/sendmail.cf ] ; then /usr/sbin/sendmail ${ sendmail_flags} ; fi )

Поскольку команда отображает на экране информацию о своих действиях, видно, что она читает часть сведений из конфигурационных файлов ресурсов системного уровня, где указаны такие флажки, как -q30m (производить запуск очереди каждые тридцать минут) и -bd (запуск демона в фоновом режиме). Sendmail не запустится, если переменная sendmail_enable в файле rc.conf установлена значением NO.

Перезапуск и останов главного процесса также не вызывают сложностей:

# make restart /bin/kill -HOP 'head -1 /var/run/sendmail.picT

# make stop /bin/kill -ТЕРМ 'head -1 /var/run/sendmail.pid'

Просмотреть состояние каждого процесса Sendmail можно с помощью команд ps и grep. Каждый процесс сообщает свое положение в очереди как аргумент напротив имени в таблице процессов. В следующем примере приведен главный процесс (51248) и процесс в середине очереди (54150):

51248 ?? Ss 0:00.17 sendmail: accepting connections (sendmail) 54150 ?? I 0:00.02 sendmail: ./f4GKwVW16827 mail.backstreetboys.com.: user open (sendmail)

Очередь сообщений

Сообщения, ожидающие отправки, находятся в каталоге /var/spool/mqueue. В конфигурации по умолчанию каждые 30 минут запускается новый процесс sendmail -q, который пытается доставить каждое сообщение из очереди. Так продолжается в течение пяти дней, после чего те сообщения, которые не удалось отправить адреса-там, возвращаются отправителю с сообщением об ошибке.

Если в очереди имеются сообщения, их можно при желании просмотреть. В отли-чие от таких закрытых систем, как Microsoft Exchange, где файлы очередей хранятся в базе данных, не позволяющей просмотреть простыми средствами, какие файлы ожидают отправки, Sendmail имеет прозрачный интерфейс для доступа к ним. Все поставленные в очередь сообщения представляют собой обычные текстовые файлы, которые можно читать или редактировать с помощью стандартных текстовых редакторов. Это не только дает администратору полный контроль над работой почтовой системы, но и предоставляет ему некоторую возможность для злоупотребления своими полномочиями, поскольку root имеет возможность прочесть содержимое сообщений, ждущих отправки.

Одна из команд, включенных в Sendmail, mailq, выводит список сообщений, на-ходящихся в очереди на текущий момент.

# mailq

/var/spool/mqueue (2 requests)

---- Q-ID --- -Size- Q-Time ---- Sender/Recipient

f4H!Ahu36976 6246 Wed May 16 18:10 MAILER-DAEMON

(Deferred: Operation timed out with mlists.acmecity.com.)

<fredgacmecity.com> f4GKwVW16827 706 Wed May 16 13:58 www

(host map: lookup (hotamil.com): deferred)

Bob bobghotamil.com

Применяя mailq, можно следить за тем, какие виды ошибок чаще всего происхо-дят при доставке почты. Короче говоря, это очень удобное средство диагностики. Кроме того, очередь позволяет исправить ошибки в сообщениях, готовящихся к отправке. Предположим, например, что в очереди присутствует сообщение, приведенное в примере вывода mailq ранее. В имени домена содержится опечатка. Можно подождать пять дней, пока Sendmail не оставит попытки отправить сообщение по адресу на хосте hotamil.com и не возвратит его, или исправить ошибку прямо в очереди.

Для этого перейдите в каталог /var/spool/mqueue и найдите файлы, идентификаторы которых совпадают с записями в выводе mailq. Это будут файлы dff4GKwVW16827 и qff4GKwVW16827. Первый содержит тело сообщения, а второй - его заголовки в промежуточном формате. Откройте файл заголовков (qfF4GKwVW16827) в текством редакторе, замените все вхождения строки hotamil.com на hotmail.com, сохраните его и дождитесь следующего запуска очереди. Сообщение уйдет. Кстати, сообщения удаляются из очереди только после успешной доставки.

Запустите команду sendmail -q -v. Такой формат команды позволяет просмотреть, как Sendmail производит все операции по SMTP с удаленными системами. При обработке каждого сообщения Sendmail выводит на экран все сведения об операции, как это было показано в начале этой главы. Здесь можно увидеть все приветственные сообщения, которые администраторы программируют в МТА (их видят только почтовые агенты). Завершить работу программы можно по Ctrl+C в любой момент.

Mail Relay

Одно из последних усовершенствований Sendmail - это защита от спама (т.е. сообщений рекламного характера) посредством специальных правил против пере-сылки. Эти правила были доступны уже давно, но лишь в недавней версии Sendmail 8.9 пересылка сообщений от одного сервера к другому (relaying) была запрещена в конфигурации по умолчанию.

Для пользователя, подключающегося, например, по коммутируемой линии, SMTP-сервер пересылает сообщение удаленному адресату даже в том случае, когда сообще-ние не принадлежит и не предназначается никому на данной машине. Как видно из рис. 25.2, именно наличие такой функциональности и используется спаммерами для посылки сообщений тем же адресатам через тот же SMTP-сервер: он передает почтовое сообщение, как эстафетную палочку.

Пересылка (relaying) обычно разрешатся с помощью записи MX (MX record) -строки SMTP-сервера в базе данных DNS (находящейся или на одной машине с SMTP-сервером или на другом сервере в той же сети), которая говорит всем маши-

нам в сети, что SMTP-сервер (S1) является легальной системой обмена почтой (Mail eXchanger). Sendmail в конфигурации по умолчанию принимает почту только от тех адресатов, которые принадлежат локальному домену. Таким образом, пользователи за пределами сети не могут использовать S1 для пересылки. При попытке такого доступа, все сообщения возвращаются отправителям с ошибкой Relaying denied error (Эстафетная пересылка запрещена).

ПРИМЕЧАНИЕ

Определить, какой хост зарегистрирован в качестве Relay-сервера для определенного домена

позволяет команда host:

# host somecompany.com

somecontpany.com has address 164.199.3.78

somecompany.com mail is handled (pri=30) by mail-l.somecompany.com

После этого можно соединиться прямо с этим хостом и выполнить набор команд SMTP

Однако есть проблема. Описанная методика подходит для Internet-провайдеровиликорпоративных сетей, где записи DNS определены для всех хостов, а соответствующие записи MX указывают на SMTP Relay-серверы. Но как быть с отдельными хостами Internet, пользователи которых пытаются переслать почту? Каждый из таких пользователей при попытке послать сообщение через S1 столкнется с ошибкой Relaying denied error, если только SI не настроен специальным образом для эстафетной пересылки. Существует несколько способов, однако использовать их не рекомендуется.

o Добавьте домены "доверенных" отправителей в файл /etc/mail/relay-domains, который отсутствует в конфигурации по умолчанию. Всем хостам в пределах указанного домена будет разрешено использовать ваш сервер для пересылки почты. После изменения файла необходимо перезапустить Sendmail. Такая методика проста и эффективна, но, если вы добавите достаточно большой домен, где, кроме легальных пользователей, обитают и спаммеры, все ее достоинства утратятся.

o Используйте базу данных доступа (/etc/mail/access). В ней можно указать правило ОК или RELAY для каждого известного хоста или домена, с которогобудет приниматься почта. Это хорошо работает для небольших сетей или не-

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

o Включите несколько из пяти или шести свойств пересылки, поддерживаемых Sendmail, в файле /etc/mail/freebsd.mc, а затем заново сгенерируйте sendmail.cf (как было показано ранее). Одно из свойств позволяет включить пересылку на основе того, указан ли в заголовке From: адрес вашего домена (relay_local_from). Однако спаммеры легко обходят это свойство. Другое дополнительное свой-ство осуществляет проверку в Черном списке (Realtime Blackhole List, RBL). Пос-ледний представляет собой централизованную базу данных с информацией обо всех известных спаммерах. Это свойство по умолчанию включено в файл freebsd.mc, но закомментировано. Для его разрешения необходимо перемес-тить дескриптор dnl в конец строки и заново собрать конфигурационный файл.

o В самом крайнем случае отключите проверку пересылки с помощью свойства promiscuous_relay. Это позволит любому пользователю посылать сообщения через ваш сервер Sendmail. Но то же самое сможет сделать и любой спаммер. В Internet существуют независимо поддерживаемые базы данных с записями о таких "от-крытых" серверах, и некоторые поставщики услуг Internet используют их как собственные "черные списки". Естественно, вам совсем не нужно, чтобы в них включили и ваш сервер! Если это произойдет, легальная исходящая почта так-же может оказаться блокированной.

Можно рекомендовать следующее общее правило: желательно, чтобы все ваши пользователи применяли SMTP-серверы, поддерживаемые их собственными ISP-провайдерами. Последние всегда имеют службы SMTP, открытые для клиентов. По-скольку заголовки (как, например, From:) находятся в теле сообщения и полностью контролируются почтовой программой-клиентом, ваш SMTP-сервер пользователям больше не потребуется.

Правила пересылки сообщений и доступные опции конфигурации можно найти по адресу http://www.sendmail.org/tips/relaying.html.

Протокол РОРЗ

Мы изучили протокол SMTP и систему Sendmail, а также средства, необходимые для ее конфигурирования. Но SMTP - это лишь половина задачи. Чтобы сообщения могли быть доставлены от одного пользователя другому, необходим еще один про-цесс: загрузка почты с сервера по протоколу POP.

Необходимость в почтовом протоколе (Post Office Protocol) стала очевидной то-да, когда стало ясно, что в Internet будет работать множество пользователей, приме-няющих на своих компьютерах клиентские почтовые программы с графическим интерфейсом, а не текстовые клиенты, такие как Pine и Mutt, которые читают сооб-щения прямо из файла почтового ящика пользователя. Для использования таких MUA, как Microsoft Outlook или Eudora компании Qualcomm, клиенту необходимо подклю-читься к почтовому серверу, где хранится файл с его сообщениями (см. рис. 25.1),

определить, есть ли в нем новые сообщения и, если да, загрузить их. После этого программаклиент отображает новые сообщения и удаляет их из файла на сервере.

В отличие от SMTP, POP3 (текущая версия POP, стандарт) требует аутентифика-ции. Хотя защита не так важна при отправке почты, она становится весьма актуаль-ной при ее получении. Действительно, кто угодно может бросить письмо в почтовый ящик, но только авторизованный адресат может получить его. РОРЗ почти не требует конфигурирования. Здесь мало элементов, которые могут быть настроены некор-ректно. Однако РОРЗ-сервер, qpopper, не включен в основную инсталляцию системы FreeBSD. Для использования служб РОРЗ необходимо установить qpopper из набора портов (/usr/ports/mail/qpopper). Эта программа происходит от Berkeley РОР-серве-ра. но на данный момент разрабатывается на коммерческой основе (однако свобод-но распространяется и в открытом коде) компанией Qualcomm, производящей поч-товый клиент Eudora.

РОРЗ-сервер запускается из суперсервера inetd. Последний прослушивает соеди-нения по TCP и UDP и при открытии TCP-соединения на порту 110 ищет название службы в файле /etc/services, определяя, как обработать запрос. Затем он запускает процесс qpopper из /usr/local/libexec/qpopper. (Местоположение выполняемого фай-ла в каталоге libexec показывает, что эта программа предназначена не для выполне-ния из командной строки, а для запуска другими программами.) Процесс qpopper обрабатывает операцию, аутентифицирует пользователя, открывает его почтовый ящик, определяет, какие сообщения нужно загрузить, и обслуживает их. Такая методика пригодна для большинства систем. Хотя qpopper, в действительности, имеет большой набор конфигурационных опций, большинство из них предназначено для повышения производительности сервера. Во многих случаях достаточно лишь инсталлировать порт и разрешить службу.

Важно отметить, что все операции в протоколе РОРЗ по умолчанию осуществля-ются в обычном тексте, а это приводит к потенциально возможному перехвату паро-лей и дырам в защите. В версии 4.0 qpopper позволяет производить зашифрованные соединения с помощью библиотек SSL (Secure Sockets Layer), которые являются ча-стью FreeBSD и используются в таких протоколах, как SSH (Secure Shell) и secure HTTP. Далее мы покажем, как можно воспользоваться этим достоинством qpopper для улучшения защиты системы.

Настройка РОРЗ-сервера qpopper

Существует несколько уровней конфигурации РОРЗ-сервера. Можно просто ин-сталлировать сервер и позволить всем использовать его; или запустить его в самосто-ятельном режиме, когда не требуется запуск демона inetd; или запустить его в "сер-верном режиме", улучшающем производительность; можно использовать зашифро-ванные сеансы посредством TLS/SSL. Эти опции не являются взаимоисключающими. Каждую из них мы рассмотрим далее.

Инсталляция и конфигурирование qpopper

Запустить службу РОРЗ, не заботясь о производительности или защите, достаточно просто. Перейдите в каталог qpopper набора портов (/usr/ports/qpopper), соберите приложение и установите его (см. главу 15). Можно установить пакет qpopper с по-мощью программы sysinstall или средств для работы с пакетами. После этого вклю-чите службу РОРЗ в суперсервере inetd. Для это добавьте строку в файл /etc/inetd.conf. Откройте файл inetd.conf и найдите приведенные ниже строки, связанные с РОРЗ. Добавьте строку или уберите комментарий с рорЗ, применив следующий синтаксис:

# пример записи для сервера рорЗ

#

#рорЗ stream tcp nowait root /usr/local/libexec/popper popper

рорЗ stream tcp nowait root /usr/local/libexec/qpopper qpopper -s

Перезапустите демон inetd, воспользовавшись командой killall: #

killall -HUP inetd

Чтобы проверить, доступна ли служба РОРЗ, необходимо подключиться к порту 110 по Telnet. Для окончания сеанса используется команда QUIT.

# telnet localhost 110

Trying 127.0.0.1...

Connected to localhost.

Escape character is '*]'.

+OK Qpopper (version 4.0.2) at stripes.somewhere.com starting.

<4763.990313780@stripes.somewhere.com>

QUIT

+OK Fop server at stripes.somewhere.com signing off.

Connection closed by foreign host.

Если вы получили от сервера подобный ответ, значит, РОРЗ-сервер работает пра-вильно.

Запуск в автономном режиме (Standalone Mode)

При определенных настройках защиты суперсервер inetd не используется. Напри-мер, если при инсталляции системы выбирается уровень защиты Medium или High, в файле /etc/rc.conf добавляется строка, препятствующая запуску inetd:

inetd_enable="NO"

В защищенной таким образом системе включать inetd ради использования служб РОРЗ не следует - для этого существует режим standalone. Он недоступен по умол-чанию, но его легко включить, внеся изменения в файл Makefile.

В каталоге /usr/ports/mail/qpopper, отредактируйте файл Makefile, добавив опцию -enable-standalone в строке CONFIGURE_ARGS:

CONFIGURE_ARGS= -enable-apop=${PREFIX}/etc/qpopper/pop.auth - enable-nonauth-file=/etc/ftpusers -with-apopuid=pop -without-gdbm -enable-keep-temp-drop -enable-s tandalone

Затем выполните команды make и make install для сборки версии qpopper, способ-ной запускаться в самостоятельном режиме. Она также устанавливается в каталог /usr/local/libexec. Перемещать ее не рекомендуется, поскольку это затрудняет даль-нейшую деинсталляцию.

Отдельный процесс qpopper необходимо запустить из сценария при загрузке сис-темы. Для этого создайте в каталоге /usr/local/etc/rc.d сценарий под названием qpopper.sh (см. главу 11). Убедитесь при этом, что служба qpopper отключена в inetd

Запуск в режиме сервера (Server Mode)

Если пользователи системы обращаются к своим почтовым ящикам только по РОРЗ и не имеют доступа к командной строке или почтовым программам сервера, qpopper можно запустить в серверном режиме. Этот режим позволяет работать с почтовым ящком напрямую. Такая методика более опасна, особенно, если пользователи могут обращаться к почтовому ящику и другими методами. Поэтому такой режим предназ-начен для систем, где, во-первых, доступ к почте возможен только по РОРЗ и, во-вторых, важную роль играет производительность.

Запустить qpopper в режиме сервера можно несколькими способами. Наиболее простой - воспользоваться опцией -S в файле inetd.conf или в командной строке, если сервер работает в самостоятельном режиме:

рорЗ stream tсp nowait root /usr/local/libexec/qpopper qpopper -s -S

В результате qpopper будет выполняться в режиме сервера для всех пользователей. Если требуется, такие настройки можно произвести для отдельного пользователя или группы. Управление группами лучше всего осуществлять посредством конфигураци-онного файла. Чтобы qpopper использовал такой файл, его необходимо создать в каталоге /usr/local/etc/qpopper (например, qpopper.conf), а затем указать в команд-ной строке в inetd.conf с помощью опции -f:

рорЗ stream tcp nowait root /usr/local/libexec/qpopper qpopper -s -S -f /usr/local/etc/qpopper/qpopper.conf

В файле qpopper.conf нужно задать имя группы, для которой включен или отклю-чен режим сервера, воспользовавшись ключевым словом group-server-mode или group-no-server-mode. Вот пример включения режима сервера для групп group 1 и group2 и отключения для группы group3:

set group-server-mode=groupl set group-server-mode=group2 set group-no-server-mode=group3

Эта настройки можно произвести и для отдельных пользователей. Для этого в командной строке следует применить опцию -и (которая разрешает чтение конфигу-рационных файлов отдельных пользователей). После этого каждый пользователь, для которого устанавливается режим сервера, должен иметь в своем каталоге файл .qpopper.options, содержащий строку set server-mode. Если вы не хотите, чтобы пользо-ватели могли изменять свои файлы .qpopper.options, воспользуйтесь опцией -U вме-сто -и и поместите соответствующие файлы в каталог /var/mail под именем ,<имя_пользователя>^роррег.ориоп8. Таким способом режим сервера можно приме-нять индивидуально. Использовать опцию -S, задающую глобальный режим сервера, в этом случае не следует!

Включение шифрования по SSL

Поддержка TLS/SSL встроена в qpopper по умолчанию. Чтобы воспользоваться ей, необходимо создать и установить сертификаты защиты (security certificates). Вначале нужно создать каталог для них:

# mkdir -p -m665 /etc/mail/certs

# chown root:mail /etc/mail/certs

# chmod 660 /etc/mail/certs

Затем для генерирования запроса сертификата следует воспользоваться программой openssl. При этом нужно ввести корректную информацию о своей организации. Затем нужно установить право на чтение файла с личным ключом (cert.pem) только для пользователя root.

# openssl req -new -nodes -out req.pem -keyout /etc/mail/certs/cert.pern

# chmod 600 /etc/mail/certs/cert.pern

# chown root:0 /etc/mail/certs/cert.pern

После этого сертификат нужно зарегистрировать у уполномоченных представителей сертификации (Certifying Authority, СА), например, в VeriSign. Отправьте СА запрос на сертификацию в файле eq.pem, и вы получите подписанный сертификат (signed certificate). Конкатенируйте его к файлу cert.pem:

# cat signed_req.pem " /etc/mail/certs/cert.pern

Теперь добавьте поддержку TLS/SSL в конфигурационном файле /usr/local/etc/ qpopper/qpopper.conf и перезапустите сервер (если он работает в автономном режиме). После этого шифрование SSL будет поддерживаться. Любой клиент, поддерживающий SSL, сможет установить защищенное соединение.

set tls-support = stls

set tls-server-cert-file = /etc/mail/certs/cert.pern

При желании можно имитировать уполномоченных представителей сертификации (СА) самостоятельно, создав автосертификат (self-signed certificate), с которым система сможет работать. Однако клиенты с поддержкой SSL не доверяют таким сертификатам и при установлении соединения требуют подтверждения от пользователя.

Вначале необходимо создать тестовый личный ключ СА (не забудьте введенный пароль!), а затем - сертификат СА:

# openssl genrsa -des3 -out ca.key 1024

# openssl req -new -x509 -days 365 -key ca.key -out ca.crt

Теперь можно самостоятельно подписать сертификат по созданному ранее запросу (req.pem):

# openssl x509 -req -CA ca.crt -CAkey ca.key -days 365 -in req.pem -out

signed-req.pern -Cacreateserial

Это позволит запустить сервер qpopper с поддержкой SSL для проверки его функциональности. Для реальной работы потребуется сертификат, подписанный настоящими уполномоченными сертификации!

Официальный Web-сайт qpopper находится по адресу http://www.eudora.com qpopper. Здесь можно найти множество полезной информации, включая документ в формате PDF (в разделе Documentation), в котором описаны все возможные опции конфигурирования qpopper. Этот документ создан с точки зрения системы Linux. поэтому многие имена каталогов отличаются от тех, что используются в инсталляции FreeBSD. Подробную информацию можно найти в man qpopper.

Настройка IMAP-сервера IMAP-UW

IMAP (Interactive Mail Access Protocol - Протокол интерактивного доступа к элек-тронной почте) - представляет собой альтернативу POP, предпочитаемую некоторыми пользователями. Вероятно, на почтовом сервере этот протокол понадобится наравне с POP и SMTP. Фундаментальное различие между IMAP и POP заключается в том, что POP загружает каждое сообщение с сервера и сохраняет в почтовой программе, тогда как IMAP обращается к почте и управляет ей сугубо на сервере. Клиент

IMAP , как серверная почтовая программа-клиент, может поддерживать несколько почтовых каталогов и пересылать сообщения между ними так же, как если бы они были локальными. Клиенту сообщения пересылаются только при запросе, и не удаляются до тех пор, пока пользователь явно не укажет сделать это. Такой подход обеспечивает гибкость таких текстовых MUA, как Mutt и Pine, в сочетании с удобством графического интерфейса почтовых программ Outlook и Eudora. Почти все почтовые клиенты поддерживают IMAP наравне с POP.

Одним из самых популярных IMAP-серверов является сервер IMAP-UW, созданный в Вашингтонском университете (той же группой, что разрабатывает Pine). Он имеется в наборе портов в каталоге /usr/ports/mail/imap-uw и в наборе пакетов (см. главу 15). Чтобы включить поддержку SSL, при сборке добавьте опцию USE_SSL=YES обеим командам: make и make install.

ПРИМЕЧАНИЕ

Порт IMAP-UW предупреждает о проблеме с защитой: известны ситуации, когда переполнение буфера в демоне позволяет пользователям IMAP получить доступ к интерпретатору с собственными правами. Это может оказаться проблемой и для вас. Если пользователям в любом случае предоставляется доступ к интерпретатору, это не беда. Если же нет, это серьезная дыра в защите. Можно поступить следующим образом: ожидать обновления, исправляющего проблему; подыскать другой IMAP-сервер; запретить IMAP, полностью полагаясь на POP.

Пакет IMAP-UW состоит из программы, тестирующей почтовый ящик mboxtest, и файлов, размещенных в каталоге /usr/local/libexec. Два из них, ipop2d и. ipop3d, представляют собой POP-серверы (для РОР2 и РОРЗ, соответственно), которые не требуются, если в системе уже установлен qpopper. Однако эти демоны позволяют перенаправлять команды POP на IMAP-сервер, что позволяет перевести всех РОР-клиентов на IMAP, если вы хотите ограничиться поддержкой только этого протоко-ла.

Инсталляция IMAP-UW достаточно проста. Сама программа не требует конфигу-рационных файлов - все необходимые изменения вносятся в /etc/inetd.conf (по-скольку IMAP-сервер работает через inetd, как и qpopper) и в /etc/pam.conf (допол-нительно).

Закомментированная строка в /etc/inetd.conf содержит все необходимое для работы IMAP-UW. Достаточно устранить комментарий:

# пример записи для сервера imap4

I

imap4 stream tcp nowait root /usr/local/libexec/imapd imapd

После этого необходимо перезапустить демон inetd:

# killall -HUP inetd

Демон ШАР прослушивает TCP-порт 143. Для проверки работы сервера нужно подключиться к этому порту по Telnet. Для окончания сессии следует нажать комби-нацию клавиш Ctrl+] и ввести команду quit.

# telnet localhost 143

Trying 127.0.0.1...

Connected to localhost.somewhere.com.

Escape character is `A]'.

* OK [CAPABILITY IMAF4 IMAP4REV1 LOGIN-REFERRALS AUTH=LOGIN]

localhost.somewhere.com IMAP4revl 2001.303 at Sun, 10 Jun 2001 11:21:26 -

0700 (PDT)

^]

telnet> quit Connection closed.

Сценарий инсталляции предлагает внести изменения в записи imap в файле /etc/ pam.conf (который управляет методами аутентификации), чтобы ограничить доступ. Для этого замените строку:

imap auth required pam_unix.so try_first_pass

следующими:

imap auth required pam_unix.so

imap account required pam_unix.so try_first_pass

imap session required pam_deny.so

To же самое можно сделать и с правилами рорЗ:

рорЗ auth required pam_unix.so

рорЗ account required pam_unix.so try_first_pass

рорЗ session required pam_deny.so

ПРИМЕЧАНИЕ

В файле /uar/log/messages или в клиентском программном обеспечении IMAP можно заме-тить предупреждения о том, что почтовый ящик "уязвим", и что права доступа к /uar/mail должны быть установлены как 1777. Такую проверку защиты производит сервер IMAP-UW (ее выполняет и Pine).

Почтовый каталог во FreeBSD имеет права доступа 775, т.е. все программы, которым требуется доступ для изменения или создания файлов в /war/mail должны иметь бит setgid для почтовой группы. Однако IMAP-LJW не запускается как setgid и не может создавать в каталоге /маг/ mail lock-файлы, предотвращающие доставку почты в почтовый ящик при получении новых сообщений. Правильное решение заключается в изменении прав доступа к /war/mail на 1777. Это позволяет пользователям добавлять и удалять файлы, но в файлы могут вносить изменения только их владельцы. Это не идеальное решение, но в большинстве случаев оно подходит.

Шифрование SSL/TLS можно применять с ШАР так же, как и с протоколом РОРЗ. При сборке программы из набора портов, выполните команды make USE_SSL=YES и make install USE_SSL=YES вместо make и make install. После этого можно создать сертификат, используя cert, или просто скопировать сертификат, созданный для qpopper, в /usr/local/certs (где IMAP-UW ищет этот файл). Если сертификат будет использоваться для обоих протоколов, можно изменить конфигурацию qpopper так, чтобы она указывала на тот же сертификат в /usr/local/certs.

Альтернативный способ защиты протоколов РОРЗ и ШАР - использование про-граммы stunnel. О ней рассказано в главе 29.

Электронная почта для отдельных рабочих станций

Умение настроить полнофункциональный почтовый сервер - важный навык системного администрирования. Вам также потребуются знания о том, как вместо серверных средств использовать рабочую станцию с диспетчером окон Gnome или КDЕ и графическими приложениями.

Использование Fetchmail для получения почты с РОРЗ- и IMAP-серверов

Большинство потребительских операционных систем содержат почтовые программы-клиенты (Outlook, Eudora, Netscape Messenger), имеющие собственные внутренние механизмы для проверки РОРЗ- или IMAP-серверов. Каждая из них посвоему запрашивает почту и сохраняет ее присущим ей образом. Некоторые программы MUA такого типа существуют и во FreeBSD.

Кроме того, на рабочей станции можно использовать те же MUA, например, Mutt, Elm или Pine, что и на сервере. Эти программы работают напрямую с каталогом /var/ mail и файлом почтового спула в нем, не имея собственного кэша для загруженных сообщений. Это позволяет разным программам одновременно работать с почтовым ящиком, производить поиск в нем с помощью средств командной строки и пользоваться другими гибкими средствами UNIX.

Чтобы получить сообщения с РОРЗ- или IMAP-сервера, где они хранятся, на ло-кальную рабочую станцию FreeBSD, требуется средство, способное установить РОРЗ-или 1МАР-соединение и доставить новые сообщение из удаленного почтового ящика в локальный. Этим средством является Fetchmail - небольшая, но гибкая утилита, написанная Эриком Рэймондом (Eric Raymond).

Fetchmail можно инсталлировать из набора портов (/usr/ports/mail/fetchmail) или пакетов. Его работой управляет файл .fetchmailrc, находящийся в home-каталоге пользователя. В нем указаны РОРЗ- и IMAP-серверы, где хранится новая почта, интервалы времени, через которые ее нужно проверять, и другие опции. Fetchmail получает новую почту через указанные промежутки времени и пересылает ее на порт 25 рабочей станции, который в конфигурации по умолчанию прослушивает Sendmail.

Когда Fetchmail установлен, необходимо сконфигурировать файл .fetchmailrc в начальном каталоге. Это можно сделать двумя способами. Первый из них требует использования программы fetchmailconf. Это программа конфигурирования Fetchmail с графическим интерфейсом, написанная на Python. Она использует набор инстру-ментальных средств ТК (SDK для создания графических интерфейсов в X Window). Программа fetchmailconf требует, чтобы в системе были установлены Python и TCL/ ТК.

Второй способ предполагает создание файла .fetchmailrc вручную. Его формат достаточно прост. Назначение каждой опции объясняется в man-странице Fetchmail.

Настройка файла .fetchmailrc

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

Здесь приведен лишь пример настроек для получения почты с РОРЗ-сервера. Как упоминалось ранее, страница справочного руководства по Fetchmail чрезвычайно обширная. На начальном этапе воспользуйтесь информацией из этого раздела, а по мере усложнения конфигурации обратитесь к справочному руководству.

Первый раздел файла .fetchmailrc содержит глобальные опции. Они применяются ко всем почтовым серверам и учетным записям пользователей, которые будут перечислены в конфигурационном файле далее. Некоторые из глобальных опций можно отменить с помощью специфических опций сервера или пользователя, но общее правило гласит, что все они действуют для всех серверов и учетных записей, прове-ряемых Fetchmail. Вот пример раздела глобальных настроек:

set daemon 600

set postmaster foobar

set logfile ./.fetchmail.log

Первая строка заставляет Fetchmail запуститься в режиме демона и проверять новую почту через каждые 600 секунд (10 минут). После запуска система проверяет новую почту и переходит в фоновый режим как демон. Если эта строка отсутствует, Fetchmail после запуска проверяет новую почту и завершает работу.

Во второй строке указан адрес отказа (fallback address). Вся почта, получаемая Fetchmail и не адресованная локальному пользователю, пересылается на эту учетную запись в локальной системе. Вероятно, здесь нужно указать ту же учетную запись, под которой запускается Fetchmail.

И наконец, третья опция определяет log-файл, в который Fetchmail записывает информацию о своих действиях. Здесь можно использовать и альтернативную строку set syslog, тогда для ведения журнала будет использоваться демон syslogd. Последний представляет собой демон системного уровня, который обрабатывает все системные события.

Это основные опции, применяемые в глебальном разделе.

Следующий раздел файла .fetchmailrc предназначен для серверов. В нем содержится информация обо всех почтовых серверах, на которых осуществляется проверка почты. Вот пример серверного раздела, в котором сконфигурирован один почтовый сервер:

poll mail.samplenet.org proto рорЗ no dns

В первой строке указана проверка новой почты на сервере mail.samplenet.org через интервал времени, заданный опцией set daemon в глобальном разделе. Альтернативная опция skip mail.samplenet.org пропускает этот сервер и не проверяет почту ни через определенный интервал времени, ни при запуске системы Fetchmail вручную.

Если применяется эта опция, проверка новой почты на данном сервере осуществляется лишь тогда, он указан в командной строке запуска Fetchmail.

Во второй строке указан протокол, используемый Fetchmail для соединения с сервером. В данном случае это РОРЗ. Возможные опции: РОРЗ, ШАР, АРОР и КРОР.

Третья опция отключает поиск в DNS. Если вы подключены к Internet по комму-тируемой линии, вам стоит включить эту строку.

В серверном разделе используется еще несколько опций. Узнать о них подробнее можно на странице справочного руководства man fetchmail.

Третий и заключительный раздел файла .fetchmailrc предназначен для пользова-тельских настроек. Он содержит информацию об учетных записях. Вот пример опций из этого раздела:

user foobar pass secretword fetchall flush

Первая и вторая строки содержат имя пользователя и пароль, необходимые для доступа к почтовому серверу ISP-провайдера.

Третья строка указывает Fetchmail получать с сервера все сообщения, в том числе и те, что уже были прочитаны.

В заключение, в четвертой строке задана опция "очистки сервера" (flush) (все загруженные с сервера сообщения удаляются). Она не является обязательной, по-скольку такая же установка применяется по умолчанию.

Другие опции позволяют, например, не удалять почту с сервера после ее загрузки на локальную машину. Подробные сведения о них приведены на странице справоч-ного руководства Fetchmail.

Полностью конфигурационный файл Fetchmail выглядит следующим образом:

set daemon 600

set postmaster foobar

set logfile ./.fetchmail.log

poll mail.samplenet.org proto рорЗ no dns

user foobar pass secretword fetchall flush

Он содержит следующие инструкции: "Проверять новую почту каждые 600 секунд. Посылать почту без адресата пользователю 'foobar'. Записывать все действия в файл .fetchmail.log. Проверять новую почту на сервере mail.samplenet.org каждые 10 минут по протоколу РОРЗ и не предпринимать попыток поиска в DNS. Для регистрации на сервере использовать имя foobar и пароль secretword, загрузить все сообщения и после этого удалить их с сервера".

ПРЕДУПРЕЖДЕНИЕ Так как файл .fetchmailrc содержит имя пользователя и пароль, необходимые для регистрации на почтовом сервере, права доступа к нему должны быть установлены на чтение только вами. Таким образом, значение не должно быть выше, чем 60О. Воспользуйтесь командой chmod

600 .fetchmailrc. Это предоставляет права на чтение и запись только владельцу файла. Если файл .fetchmailrc имеет более либеральные права доступа, Fetchmail не запустится.

Настройка Sendmail для отдельных рабочих станций

Для работы Fetchmail требуется, чтобы входящие сообщения принимались на 25 порту системой Sendmail (или ее эквивалентом). Кроме того, Sendmail полезен и для исходящей почты, поэтому не следует использовать рабочую станцию, не имеющую никакого МТА. Например, Mutt и подобные почтовые клиенты пересылают сообщения через Sendmail, не подключаясь при этом к внешнему SMTP-хосту.

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

В файле /etc/mail/freebsd.mc содержатся следующие строки:

dnl Dialup users should uncomment and define this appropriately dnl define("SMART_HOST', 'your.isp.mail.server')

Уберите комментарий со строки define, переместив дескриптор dnl в ее конец и замените your.isp.mail.server именем соответствующего почтового сервера. Соберите заново конфигурационный файл, воспользовавшись командами make cf и make install в каталоге /etc/mail.

В этом случае рабочая станция действует как любая настольная операционная система, где каждый почтовый клиент производит собственные SMTP-соединения с SMTP-сервером, поддерживаемым ISP-провайдером. Этот сервер пересылает почту в точку назначения. Так как в системе будут использоваться текстовые MUA, например, Mutt или Pine, которые пересылают почту Sendmail, не пытаясь установить SMTP-соединение с указанным SMTP-сервером, необходим централизованный спо-соб для того, чтобы почтовые клиенты вели себя как коммерческие Windows-программы. Определение переменной SMART_HOST заставляет Sendmail перенаправить всю исходящую почту SMTP-серверу ISP-провайдера.

Цель этой настройки заключается в следующем. Как вы помните, большинство SMTP-серверов отвергает почту, приходящую с IP-адресов, неразрешаемых по об-ратному DNS-поиску, а многие сети ISP не содержат информацию для поиска по DNS для клиентов, подключающихся по коммутируемой линии. В этом случае рабочая станция FreeBSD не сможет отправлять почту. Но если ISP-провайдер поддерживает SMTP-сервер, который осуществляет релейную пересылку почты от клиентов (об этом свидетельствует то, что работают агенты MUA для Windows), определение переменной SMART_HOST обеспечит доставку сообщений.

Следующий элемент конфигурации, который нужно настроить, это очередь исхо-дящих сообщений. По умолчанию Sendmail производит проверку очереди каждые 30 минут (для этого используется опция командной строки -q30m, установленная в файле /etc/defaults/rc.conf). Если вы подключаетесь по коммутируемой линии на короткие промежутки времени, этот интервал может оказаться слишком большим. Добавьте в файл /etc/rc.conf опцию, отменяющую настройку по умолчанию:

sendmail_flags="- bd -qlOm"

Более эффективный способ состоит в том, чтобы оставить опцию -q30m без изме-нений и запускать проверку очереди при каждом подключении к Internet. Как вы помните, для этого можно воспользоваться командой sendmail -q, добавив необяза-тельную опцию -v.

Запуск вручную может оказаться утомительным, поэтому команду sendmail -q можно, например, добавить в сценарий ррр-up, о котором было рассказано в главе 24.

Альтернативные почтовые серверы

Хотя Sendmail считается ведущим МТА, он также имеет и недостатки. Его критикуют за сложные конфигурационные файлы, главный конфигурационный файл в малоизвестном формате m4, большое число различных файлов времени исполнения (например, база данных доступа и файл virtusertable), относительно большой размер и невысокую скорость. Если вас устраивает то, как Sendmail работает в конфигурации по умолчанию (что обычно не требует дополнительных усилий по настройке), вам не стоит беспокоиться. Если же вам требуется более высокая скорость, меньшее потребление ресурсов, более удобное конфигурирование, существуют системы, способные заменить Sendmail. Все они, естественно, имеют свои достоинства и недостатки.

Postfix

Возможно, одной из самых распространенных альтернатив Sendmail является система Postfix, разработанная Вьетсом Венемой (Wietse Venema). Основными задачами этой разработки были повышение скорости и улучшение защиты. Структура этого агента похожа на Sendmail, что облегчает работу администраторов, использующих Sendmail и нуждающихся в повышении производительности.

По сообщениям, скорость работы Postfix высока (эта система быстрее, чем, на-пример, Qmail, хотя подобные характеристики тяжело измерить эмпирически). Не-достатком Postfix является сравнительная новизна этой системы, поскольку она не обладает дополнительными "зрелыми" возможностями Sendmail или Qmail. Домашняя страница Postfix расположена по адресу http://www.postfix.org.

Qmail

Дэн Бернстайт (Dan Bernstein) разработал систему Qmail как альтернативу Sendmail с точки зрения скорости и защиты. Этот сервер используется такими известными службами Internet, как Hotmail, Network Solutions и Yahoo! mail. Внутренняя структура Qmail создана с нуля, а не заимствована из Sendmail. Это значит, что конфигурация и структура файлов инсталляции Qmail не повторяют структуру Sendmail. Qmail хорошо подходит тем администраторам, которым требуется высокая скорость работы и надежная защита. Домашняя страница Qmail находится по адресу http:// www.qmail.org.

Exim

Разработанная в Кембриджском университете, система Exim обладает следующими достоинствами: обилие документации, поддержка разработчиками и списки рассылки. Эта система легко конфигурируется, во многом благодаря обширной доку-ментации. Нужно отметить, что Exim в прошлом имел проблемы с защитой и представляет собой плохую альтернативу Sendmail в том, что касается модульности и расширенных свойств. Однако это высокопроизводительный сервер, который может заметно ускорить работу SMTP-службы по сравнению с Sendmail. Домашняя страница Exim находится по адресу http://www.exim.org.

Обновлено: 12.03.2015