Опубликован: 21.11.2006 | Уровень: специалист | Доступ: платный
Лекция 13:

Подключение почтового сервера к провайдеру Internet

Конфигурация sendmail

Как и в предыдущем случае, для реализации новой схемы необходимо создать новый файл конфигурации sendmail. На этот раз почтовый сервер под управлением ОС Linux не может отправлять и принимать сообщения непосредственно от удаленных хостов в сети Internet. При использовании такой схемы доставка сообщений между локальным почтовым сервером и другими узлами в сети осуществляется через интеллектуальный хост. Все исходящие почтовые сообщения помещаются в очередь на сервере электронной почты и находятся там до того момента, пока sendmail не установит соединение с интеллектуальным хостом и не начнет с ним сеанс работы. Все входящие сообщения хранятся в очереди почтовых сообщений на сервере провайдера и также ожидают установления соединения с соответствующим почтовым сервером. Локальный почтовый сервер подключается к серверу провайдера и с помощью программы fetchmail получает адресованные его домену сообщения.

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

1 divert(-1)
2 divert(0)dnl
3 include('/usr/lib/sendmail-cf/m4/cf.m4')dnl
4 OSTYPE('linux')dnl
5
6 FEATURE('allmasquerade')dnl
7 FEATURE('masquerade_envelope')dnl
8 FEATURE('local_procmail', '/usr/bin/procmail')dnl
9 FEATURE('access_db', '/etc/mail/access.db')dnl
10 FEATURE('nocanonify')dnl
11
12 MAILER('smtp')dnl
13 MAILER('procmail')dnl
14
15 MASQUERADE_AS('smallorg.org')dnl
16 define('SMART_HOST', 'smtp:mail.isp.net')dnl
Листинг 13.5. Пример файла макросов dialup.mc

Как и в предыдущем случае, в листинге 13.5 для почтового сервера определяется доменное имя, которое будет подставляться в адреса всех сообщений. Определяется также программа для локальной доставки почты на самом почтовом сервере. Эти функции будет выполнять программа procmail. Единственное отличие наблюдается в строке 16, где в качестве SMART_HOST определяется почтовый сервер провайдера Internet. Вам необходимо лишь изменить имя хоста mail.isp.net на имя реального почтового сервера вашего провайдера. Сохраните полученный файл макросов и с помощью макропроцессора m4 сгенерируйте новый файл sendmail.cf (как показано в предыдущем примере).

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

Далее необходимо запустить программу sendmail в фоновом режиме. Для этого сценарий запуска sendmail можно добавить в сценарии запуска init для соответствующего уровня запуска ОС Linux. В качестве альтернативы можно использовать графическую программу linuxconf, окно которой представлено на рис. 13.2.

Конфигурация fetchmail

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

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

Для каждого пользователя на локальном почтовом сервере под управлением ОС Linux заводится отдельный файл конфигурации fetchmail. Этот файл хранится в рабочем каталоге пользователя $HOME под именем .fetchmail.rc. Пользователь root пользуется файлом конфигурации fetchmail, определенным для подключения к почтовому серверу провайдера по протоколу POP3 с использованием имени пользователя и пароля, заданных провайдером. Кроме того, каждый пользователь, которому разрешено принимать почту из Internet, должен быть описан в файле .fetchmail.rc пользователя root. Почта, полученная для описанных в этом файле локальных пользователей, передается в их ящики. Вся остальная почта, полученная с помощью программы fetchmail, хранится в почтовом ящике пользователя, запустившего fetchmail (в нашем случае пользователя root ). В листинге 13.6 приведен пример файла .fetchmail.rc, который может применяться при работе по описываемой схеме.

1 poll mail.isp.net with proto POP3
2 localdomains smallorg.org
3 no envelope
4 no dns
5 user "rich" with password "guitar" is
6 rich
7 barbara
8 katie
9 jessica
10 haley
11 riley
12 chris
13 matthew
14 here
Листинг 13.6. Пример файла конфигурации $HOME/.fetchmail.rc

В строке 1 листинга 13.6 определяется почтовый сервер провайдера, к которому для получения почты подключается программа fetchmail. В этой строке также указывается, что получение почты с сервера провайдера будет осуществляться с помощью протокола POP3. В строках 2–4 определяются параметры соединения. Так, в строке 2 указывается, какое доменное имя будет использовано программой fetchmail в качестве локального доменного имени при анализе заголовков сообщений. То есть адрес prez@smallorg.org почтовый сервер распознает как пользователя на локальном почтовом сервере с именем prez. Строкой 3 программе fetchmail указывается не использовать при анализе адреса получателя поле заголовка X-Envelope-To:. Это поле обычно добавляется почтовыми транспортными агентами МТА при прохождении сообщением почтовых узлов. Дело в том, что эти поля могут стать причиной некорректной работы fetchmail, поэтому желательно их игнорировать. В строке 4 указывается, что нет необходимости в проверке подлинности узла отправителя с помощью системы DNS. В строке 5 задаются имя пользователя и пароль, с которыми осуществляется подключение fetchmail к почтовому ящику на сервере провайдера. Эти данные должен предоставить ваш провайдер сети Internet.

В строках 6–13 задаются все пользователи локального почтового сервера под управлением ОС Linux, которые могут принимать электронную почту. Работа программы заключается в просмотре и анализе полей заголовков формата RFC 822 на предмет соответствия именам пользователей, приведенных в списке. Если в адресной части сообщения найдено совпадение с именем пользователя, то программа fetchmail пересылает сообщение пользователю локального почтового сервера. В противном случае, если ни один из пользователей в адресе не соответствует приведенным в списке, fetchmail пересылает сообщение в почтовый ящик пользователя, от имени которого она была запущена (в нашем случае это пользователь root ). В обязанности администратора почтовой системы входит обновление списка пользователей локального почтового сервера. В строке 14 указано, что все приведенные имена пользователей находятся на том же хост-компьютере, где запущена программа fetchmail.

После создания файла .fetchmail.rc и сохранения его в рабочем каталоге пользователя, от имени которого будет запускаться fetchmail (в нашем случае это пользователь root ), можно непосредственно приступить к работе с fetchmail. Теперь, если вы зададите в командной строке fetchmail, программа diald автоматически откроет РРР-соединение, а fetchmail автоматически подключится к почтовому серверу провайдера для получения сообщений из почтового ящика, выделенного для вашего домена. Если все эти этапы пройдут успешно, то следующим действием будет получение почты.

Автоматизация получения почты

После конфигурирования программного обеспечения почтового сервера на базе ОС Linux следует автоматизировать процесс проверки и получения почты. Для этого необходимо лишь задать интервалы времени, через которые будет запускаться программа fetchmail. При этом одним из условий является наличие уже запущенной в фоновом режиме программы sendmail.

Запуск fetchmail через определенные интервалы времени можно обеспечить с помощью утилиты ОС Linux cron. Эта утилита считывает таблицу, в которой содержатся строки с инструкциями о запуске определенной программы в определенное время. Каждый пользователь в ОС Linux имеет свою таблицу cron. В нашем примере программа fetchmail запускается пользователем root, поэтому следует модифицировать cron-таблицу пользователя root. Изменить содержимое cron-таблицы можно с помощью утилиты crontab. Если вы как пользователь root зададите команду crontab -l, то увидите содержимое cron-таблицы. Чтобы внести изменения в нее, воспользуйтесь командой crontab -e. С помощью этой команды вы перейдете в режим редактирования в стандартном для ОС Linux редакторе vi.

Чтобы задать программе fetchmail интервал запуска 15 минут, необходимо добавить в таблицу строку, представленную в листинге 13.7.

0,15,30,45 * * * * /usr/bin/fetchmail
Листинг 13.7. Пример записи в cron-таблице для запуска fetchmail

Этой строкой определяется, что круглый год ежемесячно семь дней в неделю в 0, 15, 30 и 45 минут каждого часа будет запускаться программа fetchmail. Вы можете изменить этот интервал в соответствии со своими потребностями. Избегайте частой проверки почтового ящика на сервере провайдера, поскольку может возникнуть ситуация, когда программой diald еще не будет завершено РРР-соединение с сервером провайдера, как уже будет инициироваться новое.

Valentin Diduk
Valentin Diduk
Украина, одесса, кпи, 2010
Евгений Олабин
Евгений Олабин
Беларусь, Гродно