• 13.1. Настройка sendmail
  • 13.2. Аутентификация в sendmail
  • 13.3. Настройка почтовых клиентов
  • 13.4. Другие программы для работы с электронной почтой
  • 13.5. Создание списка рассылки
  • 13

    Почтовый сервер

    Для начала небольшое отступление. Вкратце напомню о протоколах SMTP и POP, которые будем конфигурировать.

    SMTP (Simple Mail Transfer Protocol) — сервис в сетях TCP/IP для передачи сообщение (т.е. почты). Обычно для SMTP используется порт 25 (см. файл /etc/services).

    POP (Post Office Protocol) — используется для получения почты с сервера. Порт по умолчанию — ПО (для протокола POP3).

    Основными MTA (Mail Transfer Agent) — агентами пересылки почты на сегодняшний день являются sendmail, postfix и qmail. Кроме основной функции — отправка сообщения электронной почты, каждый их них имеет собственные эксклюзивные функции. Sendmail является одной из самых ранних программ MTA — своеобразным стандартом, который использовался еще в самых ранних версиях Unix. Этот агент прошел долгий путь со дня своего создания. Раньше (до 1998 года) в конференциях вообще рекомендовалось вместо использования sendmail перейти на qmail, обладающий лучшей защищенностью. Действительно, в то время sendmail имел много брешей с точки зрения безопасности, а тем, кто решался все-таки использовать его, рекомендовалось регулярно обновлять sendmail. Сейчас sendmail обладает должным уровнем безопасности и достаточно легко настраивается, в чем вы убедитесь в этой главе. Возможно, postfix обладает и более простой настройкой, но у меня почему-то не сложилась работа с этой программой. О qmail могу сказать только то, что редко встретишь программу с более сложной настройкой. Для заинтересовавшихся я разместил на прилагаемом компакт-диске руководство по настройке qmail.

    Сейчас я попробую объяснить, как настроить небольшой почтовый сервер, использующий POP3 и SMTP. Для начала установите необходимое программное обеспечение. При этом вам понадобятся пакеты sendmail и imap.

    Да простят меня почитатели PostFix, но я действительно предпочитаю sendmail. Возможно, postfix проще конфигурируется, но это дело вкуса.

    13.1. Настройка sendmail

    Если вы используете дистрибутив, совместимый с RedHat, то вам потребуется установить соответствующие пакеты. Я использую sendmaiI-8.11.0 и imap-4.7c2. Последнюю версию sendmail можно выкачать из Интернет по адресу http://www.sendmail.org.

    Прежде, чем приступить к настройке sendmail, вам необходимо правильно настроить DNS. Настройка сервера DNS подробно обсуждалась в гл. 10. Если вы настраиваете только почтовый сервер, вам необязательно настраивать сервер DNS на этом же компьютере. Достаточно будет указать DNS-сервера вашей сети в файле /etc /resolv.conf, чтобы система разрешения имен корректно работала. Впрочем, sendmail можно настроить для работы без использования DNS, но этот вариант я рассматривать не буду.

    Для того, чтобы приступить к базовой настройке sendmail, запустите утилиту netconf (см. рис. 13.1). Она работает как и из-под Х-Window, так и из-под консоли. Утилита netconf есть в RedHat Linux, Mandrake, ASPLinux и в других дистрибутивах, ее точно нет в KSI Linux. Естественно, вы должны быть зарегистрированы в системе как root. Если у вас нет программы netconf, вы получите незабываемое удовольствие от редактирования файла /etc/sendmail.cf вручную. Именно в этом файле хранятся все настройки sendmail.

    Pиc. 13.1. Конфигуратор netconf


    Выберите в меню Mail delivery system, затем Basic sendmail configuration. В поле Present your system as просто введите свое доменное имя. Затем обязательно отметьте флажок «Accept email for your_domain.com» (см. рис. 13.2). Если вы этого не сделаете, через ваш сервер можно будет перенаправить сообщения на другой сервер. При этом через ваш сервер будет идти лишний трафик, который вам совсем ни к чему. Когда-то даже существовал такой вид атаки на отказ через электронную почту. Принцип его следующий: отправляется письмо от несуществующего пользователя not_exists@A.com другому несуществующему пользователю not_exists@B.com. Письмо отправляется через компьютер hostcom, который позволяет перенаправить сообщение (не включен режим «Accept email for domain.com»). Почтовый сервер домена B.com отправляет сообщение по адресу not_exists@A.com о том, что пользователь not_exists@B.com не существует. В свою очередь, почтовик домена A.com сообщает, что пользователя not_exists@A.com также не существует и отправляет сообщение по адресу not_exists@B.com. Возникает косвенная рекурсия. А теперь представьте, что такое сообщение не одно, а, скажем, 100 и объем каждого хотя бы 1 Мб! В результате один из серверов в цепочке domain1.com — host.com — domain2.com должен «упасть».

    Рис. 13.2. Основная конфигурация sendmail


    Прошу извинения, я немного отошел от темы, продолжим конфигурировать sendmail. Протокол отправки сообщений установите smtp (Mail gateway protocol).

    Этой информации уже вполне достаточно, чтобы ваш sendmail функционировал. Вы можете установить дополнительные опции программы sendmail с помощью netconf.

    Теперь сделайте так, чтобы sendmail принимал почту только с разрешенных адресов. Для этого даже не нужно настраивать сам sendmail — нужно только подправить файлы /etc/hosts.allow и /etc/hosts.deny. В первом из них содержится список хостов, которым разрешен доступ к этой машине, а во втором — которым запрещен. Обратите внимание: несмотря на название «разрешен» или «запрещен», ограничения, которые устанавливаются первым файлом намного строже. Например, для запрещения доступа всем хостам, кроме компьютеров вашей сети, в файл /etc/hosts.allow добавьте строку: 192.168.1.

    Здесь имеется в виду, что сеть имеет адрес 192.168.1.0 и маску 255.255.255.0. Более подробно о формате файлов hosts.allow и hosts.deny вы можете прочитать, введя команду man hosts.allow.

    Теперь настала очередь POP3. После установки пакета imap у вас практически все настроено, т.е. я хочу сказать, что уже можно проверять конфигурацию. Перезапустите демон inetd или xinetd, в зависимости от того, который вы используете, и введите следующее:

    telnet <имя_только_созданного_почтовика> 25

    В ответ вы должны увидеть примерно следующее:

    Trying 192.168.1.1 . . .

    Connected to 192.168.1.1

    Escape character is

    220 de.dhsilabs.com ESMTP Sendmail 8.11.0/8.8.7 Sun, 17 Jun

    2001 10:54:22 +300

    Это означает, что sendmail работает, осталось проверить насколько правильно он это делает. С этой целью введите примерно следующее:

    mail from: me@my.host.com

    220 2.1.0 me@my.host.com …. Sender Ok

    rcpt to: den@den.dhsilabs.com

    220 2.1.5 den@den.dhsilabs.com …. Recipient Ok

    После этого введите команду data, потом текст сообщения, а для окончания ввода поставьте точку в пустой строке. Sendmail сообщит, что сообщение отправлено (точнее помещено в очередь на отправку). Запись den@den.dhsilabs.com — имя пользователя, которому вы отправляете почту. Пользователь должен реально существовать. Запись den.dhsilabs.com — имя вашего почтовика.

    Примечание. Имена den@den.dhsilabs.com и dhsilabs.com даны в качестве примера. Вместо них вы должны указать свои значения.

    Обратите внимание, что узла my.host.com и в природе нет, а программа sendmail сообщает, что «Sender Ok». Вот поэтому, в настройках sendmail лучше включить опцию Wait for DNS.

    Теперь нужно запустить какой-нибудь почтовый клиент, например kmail, и получить почту. Используйте следующие настройки сети в программе kmail: Сеть→ Отправка почты установите SMTP, порт 25, имя сервера — имя вашего почтовика, в рассматриваемом примере — это den.dhsilabs.com. Затем добавьте аккаунт для POP3:

    Имя пользователя — den

    Пароль — пароль, который используется для входа в систему.

    Сервер — den.dhsilabs.com

    Порт — 110

    В результате вы должны получить то сообщение, которое ввели после data. При этом возможны проблемы при разрешении имени. Чтобы их избежать необходимо правильно настроить DNS или вместо имени почтового сервера использовать его IP-адрес. При добавлении нового пользователя не забудьте установить его пароль для входа в систему. Если этого не сделать, а пытаться получить почту без указания пароля, вы получите сообщение «Сбой аутентификации».

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

    Примечание. В большинстве случаев, вас будет устраивать базовая настройка до тех пор, пока вас не возьмут под свой «протекторат» спаммеры — тогда вам нужно будет прочесть гл. 23 о методах защиты от спама. Однако может сработать один из законов Мерфи — для вашей системы не будет разработан конфигуратор sendmail и тогда вам все равно придется разбираться с файлами конфигурации.

    Основным файлом конфигурации sendmail является файл /etc/sendmail.cf. В некоторых дистрибутивах этот файл расположен в каталоге /etc/mail. Об этом файле говорят, что он длиннее, чем лимузин у Билла Гейтса и что его редактирование происходит в режиме «глаза боятся, руки делают». Если вы не верите мне, откройте этот файл, и вы убедитесь в этом. Редактировать данный файл вручную могут только профессионалы-администраторы или разработчики программы sendmail.

    Обычно для редактирования этого файла используется макропроцессор m4. Сначала вы подготавливаете специальный mc-файл. В этом файле записаны настройки .sendmail, но в более «читабельном» виде. При редактировании конфигурационных файлов также сказывается и их размер. Для сравнения: размер моего mc-файла — 2459 байт, а файла sendmail.cf — 46302 байт. Одно дело, редактировать файл размером в два килобайта, и совсем другое, если размер файла равен 46 килобайтам. В отличие от конфигурационного файла sendmail, вы сразу поймете, для чего предназначен тот или иной mc-файл. Затем, отредактировав mc-файл, нужно запустить макропроцессор m4 для создания файла конфигурации sendmail:

    m4 my_config.mc > /etc/sendmail.cf

    Перед выполнением этой команды я настоятельно рекомендую сохранить где-нибудь исходный файл sendmail.cf. В случае некорректной настройки вы всегда сможете восстановить его.

    Файл конфигурации по умолчанию, который используется макропроцессором т4 для создания файла конфигурации программы sendmail (sendmail.cf), находится в каталоге /usr/share/sendmail-cf/cf. В более старых версиях программы sendmail он может быть расположен в каталоге /usr/lib/sendmail.

    Как правило, этот файл называется sendmail.mc. Иногда он может называться и по-другому, например, redhat.mc, если вы используете операционную систему Red Hat или совместимую с ней.

    Пример стандартного файла /usr/share/sendmail-cf/cf/redhat.mc приведен в листинге 13.1.

    Листинг 13.1. Стандартный файл redhat.mc

    divert(-1)

    dnl This is the sendmail macro config file. If you make changes to this file,

    dnl you need the sendmail-cf rpm installed and then have to generate a

    dnl new /etc/sendmail.cf by running the following command: dnl

    dnl m4 /etc/mail/sendmail.mc > /etc/sendmail.cf

    dnl

    include('../m4/cf.m4')

    VERSIONID('linux setup for Red Hat Linux')dnl

    OSTYPE( 'linux' )

    define('confDEF_USER_ID',"8:12") dnl

    undefine( 'UUCP_RELAY' )dnl

    undefine('BITNET_RELAY')dnl

    define('confAUTO_REBUILD')dnl

    define('confTO_CONNECT', '1m')dnl

    define('confTRY_NULL_MX_LIST',true)dnl

    define('confDONT_PROBE_INTERFACES',true)dnl

    define('PROCMAIL_MAILER_PATH', '/usr/bin/procmail')dnl

    define('ALIAS_FILE', '/eto/aliases')dnl

    dnl define('STATUS_FILE', '/etc/mail/statistics')dnl

    define('UUCP_MAILER_MAX', '2000000')dnl

    define('conf USERDB_SPEC', '/etc/mail/userdb.db')dnl

    define('confPRIVACY_FLAGS', 'authwarnings,novrfy,noexpn,restrictqrun')dnl

    define('confAUTH_OPTIONS', 'A')dnl

    dnl TRUST_AUTH_MECH('DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') dnl

    dnl define('confAUTH_MECHANISMS', 'DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

    dnl define('confTO_QUEUEWARN', '4h')dnl

    dnl define('confTO_QUEUERETURN', '5d')dnl

    dnl define('confQUEUE_LA', '12')dnl

    dnl define('confREFUSE_LA', '18')dnl

    dnl FEATURE(delay_checks)dnl

    FEATURE('no_default_msa', 'dnl')dnl

    FEATURE('smrsh',Vusr/sbin/smrsh')dnl

    FEATURE('mailertable', 'hash-o /etc/mail/mailertable.db')dnl

    FEATURE('virtusertable', 'hash –o /etc/mail/virtusertable.db')dnl

    FEATURE(redirect)dnl

    FEATURE(always_add_domain)dnl

    FEATURE(use_cw_file)dnl

    FEATURE(use_ct_file)dnl

    FEATURE(local_procmail, '', 'procmail –t –Y –a $h –d $u')dnl

    FEATURE('access_db','hash –o /etc/mail/access.db')dnl

    FEATURE('blacklist_recipients')dnl

    EXPOSED_USER('root' ) dnl

    dnl This changes sendmail to only listen on the loopback device 127.0.0.1

    dnl and not on any other network devices. Comment this out if you want

    dnl to accept email over the network.

    DAEMON_OPTIONS('Port=smtp,Addr=127.0.0.1, Name=MTA')

    dnl NOTE: binding both IPv4 and IPv6 daemon to the same port requires

    dnl a kernel patch

    dnl DAEMON_OPTIONS (xport=smtp,Addr=::1, Name=MTA-v6, Family=inet6')

    dnl We strongly recommend to comment this one out if you want to protect

    dnl yourself from spam. However, the laptop and users on computers that

    do dnl not have 24x7 DNS do need this.

    FEATURE('accept_unresolvable_domains')dnl

    dnl FEATURE('relay_based_on_MX')dnl

    MAILER(smtp)dnl

    MAILER(procmail)dnl

    Cwlocalhost.localdomain

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

    Предположим, что вы хотите, чтобы названия компьютеров домена были скрыты. Это легко достигается с помощью добавления функции masquerade_envelope в ваш mc-файл. Для этого скопируйте файл redhat.mc в файл hide_hosts.me и добавьте в конец файла hide_hosts.me строки:

    MASQUERADE_AS(my-domain.ru)dnl

    FEATURE(masquerade_envelope)dnl

    Затем выполните команду:

    m4 /usr/share/sendmail-cf/cf/hide_hosts.me> /etc/sendmail.me

    Вот и все! Названия узлов будут скрыты. Описание прочих функций представлено в табл. 13.1.

    Функции программы sendmail Таблица 13.1

    Функция Описание
    access_db Определяет таблицу доступа. В этой таблице указаны хосты, которым разрешена или запрещена отправка почты через ваш почтовый сервер. Эта опция эффективно используется для борьбы со спамом. Защита от спама подробно рассмотрена в одноименном разделе в гл. 23
    accept_unresolvable_domains Разрешает отправлять почту доменам, которые не могут быть распознаны
    bestmx_is-local Сообщения будут приниматься только в том случае, если запись МХ-сервера DNS указывает на этот почтовый сервер
    blacklist_recipients «Черный список». Еще одна опция для борьбы со спамом. Для ее работы необходима опция access_db
    dnsbl Используется для работы с «черным списком», dnsbl — это сокращение от DNS Black List. В более ранних версиях эта опция называлась (Resolve Black List)
    domaintable Используется для разрешения имен доменов
    genericstable Используется для изменения адреса отправки в сообщениях
    local_procmail Указывает, что доставлять почту нужно с помощью локальной утилиты procmail
    mailertable Переопределяет маршрутизацию для конкретных доменов
    masquerade_entire_domain Используется для маскировки (сокрытия) всего домена. Данная функция должна использоваться вместе с директивой MASQUERADE AS (или MASQUERADE_DOMAIN), например, MASQUERADE_AS(f117.ru)dnl
    masquerade_envelope Позволяет скрыть имена хостов домена. Заменяет поле received from заголовка сообщения перед передачей сообщения другим
    redirect Используется для перенаправления на другой почтовый сервер. Означает отказ от принятия почты с выдачей сообщения please try <address> (попытайтесь использовать этот адрес)
    relay_based_on_MX Разрешает перенаправление (ретрансляцию) почты только для узлов, которые указаны в записях МХ-сервера DNS
    relay_hosts_only Разрешает ретрансляцию только для узлов, указанных в access_db
    relay_mail_from Разрешает ретрансляцию только, если отправитель указан в списке RELAY базы accessdb
    smrsh Использование ограниченной оболочки sendmail
    use_cf_file При указании этой функции sendmail будет обращаться к файлу sendmail.cf за списком доверенных пользователей
    use_cw_file При указании этой функции sendmail будет обращаться к файлу sendmail.cw за списком локальных узлов
    virtusertable Преобразует адрес получателя в адрес локального пользователя

    В файле /etc/mail/sendmail.cw перечислены все псевдонимы данного почтового сервера. Предположим, что имя вашего сервера mail.dhsilabs.ru. Если отправитель отправит почту по адресу den@mail.dhsilabs.ru, письмо будет без проблем доставлено пользователю den. А если кто-то отправит письмо по адресу den@dhsilabs.ru, то его доставка вызовет определенные трудности, так как не ясно какому узлу домена dhsilabs адресовано сообщение? Для решения этой проблемы в файл sendmail.cw нужно поместить строку:

    dhsilabs.ru

    Теперь, когда будет приходить почта формата user@dhsilabs.ru, она будет доставлена почтовому серверу mail.dhsilabs.ru.

    Напомню, что перед изменением файла sendmail.cf желательно остановить программу sendmail. Это делается с помощью команды:

    /etc/init.d/sendmail stop

    Запустить sendmail заново можно с помощью команды:

    /etc/init.d/sendmail start

    Конечно, удобнее сначала отредактировать файл sendmail.cf с помощью m4, а потом выполнить команду /etc/init.d/sendmail restart для перезапуска программы sendmail.

    13.2. Аутентификация в sendmail

    Программы Sendmail 8.10/8.11 поддерживают SMTP AUTH, согласно стандарту RFC 2554. Аутентификация базируется на SASL. Она позволит вам несколько повысить безопасность вашей сети, но создаст определенные неудобства для пользователей, потому что не все почтовые клиенты ее поддерживают.

    Вам потребуются библиотеки Cyrus SASL, исходные коды которых вы можете найти по адресу ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/. Последней версией на момент написания этих строк являлась 1.5.14. Желательно также выкачать последнюю версию sendmail, хорошо бы в исходных кодах. Скачать последнюю версию программы sendmail можно по адресу: http:// www.sendmail.org. Распакуйте библиотеку Cyrus SASL выполнив следующую последовательность:

    # tar –xzf cyrus-sasl-1.5.24.tar.qz

    # cd cyrus-sasl-1.5.24/

    # ./configure –prefix=/usr

    # make

    # make install

    Распаковывать лучше всего, зарегистрировавшись в системе root. Сама по себе операция извлечения файлов из архива не требует таких полномочий, однако, если у вас не было прав суперпользователя, вам нужно будет изменить права доступа для файлов, которые будут распакованы в каталоги /usr/lib и /usr/include. Распаковав исходные коды, отредактируйте файл /usr/lib/sasl/Sendmail.conf. Если он не существует, создайте его. В конец этого файла необходимо добавить строку:

    pwcheck_method: sasldb

    Это укажет sendmail, что аутентификацию нужно проводить с использованием SASL. Теперь займитесь созданием базы данных всех пользователей, которые могут отправлять почту. Для этого используются две программы: saslpasswd и sasldblistusers. Они должны находиться в каталоге /sbin. Запускать их нужно от имени пользователя root.

    # saslpasswd –a sendmail newuser

    password:<type passwdord for newuser>

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

    sasldblistusers

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

    user: newuser realm: dhsilabs.com mech: CRAM-MD5

    user: newuser realm: dhsilabs.com mech: DIGEST-MD5

    user: newuser realm: dhsilabs.com mech: PLAIN

    Отображенная информация означает, что пользователь newuser может аутентифицироваться тремя методами: CRAM-MD5, DIGEST-MD5, PLAIN. Рекомендую использовать метод CRAM-MD5, но в крайнем случае подойдет и PLAIN.

    Далее проверьте, поддерживает ли ваш sendmail библиотеку SASL:

    sendmail –d0.1 –bv root | grep SASL

    При отсутствии поддержки SASL от вас потребуется перекомпилировать sendmail. Вот для чего я просил в начале раздела приготовить исходные коды sendmail. Итак, распакуйте sendmail, как обычно, программой tar:

    tar –xzf senmail-x.xx.xx.tar.gz cd sendmail-x.xx.xx/

    Теперь нужно создать файл sendmail-x.xx.x/devtools/Site /site.config.m4, в котором необходимо прописать следующие строки:

    APPENDDEF('confENVDEF' , '-DSASL')

    APPENDDEF('conf_sendmail_LIBS', '-lsasl')

    APPENDDEF('confLIBDIRS', '-L/usr/lib/')

    APPENDDEF('confINCDIRS' , '-I/usr/include/' )

    Напомню, создать файл в простейшем случае можно командой:

    cat > sendmail-x.xx.x/devtools/Site/site.config.m4

    Самое время запустить скрипт Build:

    ./Build

    ./Build install

    Если вы все сделали правильно, ваш sendmail теперь должен поддерживать SMTP AUTH. Проверить это можно с помощью уже знакомой команды:

    sendmail –d0.1 –bv root | grep SASL

    После этого приступите к настройке самой программы sendmail. Для этого в файл sendmail.me внесите следующие строки:

    TRUST_AUTH_MECH('GSSAPI DIGEST-MD5 CRAM-MD5 PLAIN')dnl

    define('confAUTH_MECHANISMS', 'GSSAPI DIGEST-MD5 CRAM-MD5 PLAIN')dnl

    define('confDEF_AUTH_INFO', Vetc/mail/auth/auth-info')dnl

    FEATURE('no_default_msa')dnl turn off default entry for MSA

    DAEMON_OPTIONS('Port=25, Name=MSA, M=E')dnl

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

    Запустите интерпретатор m4:

    m4 senmail.mc > sendmail.cf

    Скопируйте новый файл sendmail.cf на место старого, обычно он находится в каталоге /etc/mail:

    ср ./sendmail.cf /etc/mail/sendmail.cf

    Почти все! Осталось проверить работоспособность sendmail и убедиться, что он работает корректно. С этой целью запустите клиент telnet и присоединитесь к порту 25 вашего компьютера:

    telnet localhost 25

    Trying 127.0.0.1.. .

    Connected to localhost

    Escape character is '^ ]'.

    220 local.sendmail.ORG ESMTP Sendmail 8.10.0/8.10.0; Thu, 9 Sep 1999 10:48:44 –0700 (PDT)

    ehlo localhost

    250-local.sendmail.ORG Hello localhost [127.0.0.1], pleased to meet you

    250-ENHANCEDSTATUSCODES

    250-DSN

    250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN

    250 HELP

    quit

    Теперь желательно добавить описания поддерживаемых вашим сервером методов аутентификации. Откройте файл /etc/mail/sendmail.cf в любом текстовом редакторе и найдите следующие строки:

    #####################

    # Format of headers #

    #####################

    После этих строк вам нужно добавить следующее:

    $.$?{auth_type}(auth_type is ${auth_type}, user

    ${auth_author}$.)

    Хочу заметить, что файл sendmail.cf у вас может находиться в другом каталоге. Это делается для того, чтобы в заголовке письма появилось такое сообщение:

    (auth_type is CRAM-MD5, user den)

    Указание метода авторизации поможет вам при дальнейшей настройке вашего сервера.

    13.3. Настройка почтовых клиентов

    В предыдущих разделах данной главы мы рассмотрели два типа настройки программы sendmail — без аутентификации и с наличием таковой. Поэтому сначала рассмотрим настройку почтовых клиентов для первого случая, а потом — для второго. Ради написания этого материала мне даже пришлось установить Outlook Express. Этой программы не наблюдалось на моей машине с момента выхода первой версии TheBat!

    Итак, рассмотрим настройку трех самых популярных почтовых клиентов:

    1. TheBat!, версия 1.38е.

    2. Outlook Express, версия 5.00.

    3. Netscape Messenger, версия 4.76.

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

    Начнем с предпочитаемой мною программы — TheBat!

    Для создания новой учетной записи выберите пункт меню Account→New… В появившемся окне введите название новой учетной записи, затем собственную информацию, серверы исходящей почты (SMTP server) и сервер для входящих сообщений (POP3 server). Затем введите имя пользователя и пароль. Пароль должен быть установлен на сервере с помощью команды passwd! Нажмите на кнопку «Finish» и учетная запись готова. Проверить параметры учетной записи вы можете с помощью меню Account→Properties. Для нашего «виртуального» почтового сервера, используемого в примерах, настройки будут выглядеть так как это показано на рис. 13.3.

    Рис. 13.3. Параметры учетной записи (программаTheBat!)

    На рис. 13.3. видно, что в качестве сервера для входящей и исходящей почты используется компьютер den.dhsilabs.com. Протокол сервера входящей почты — POP3. Параметры протокола (порт, порядок удаления сообщения) можно указать в разделе Mail management. Остальные параметры не представляют интереса. Имя пользователя и пароль должны быть такими же, какие вы используете для локальной регистрации на своем компьютере, в данном случае на компьютере den.dhsilabs.com.

    Теперь перейдем к Outlook Express. Выберите пункт меню Сервис→Учетные записи и нажмите на кнопку «Добавить». Затем выберите пункт подменю «Почта» и введите аналогичные параметры. После создания учетной записи нажмите на кнопку «Свойства» и еще проверьте ее параметры. На вкладке Серверы можно указать серверы для приема и передачи сообщений, а на вкладке Дополнительно — установить параметры протоколов.

    Почтовый клиент Netscape Messenger настраивается так: выберите пункт меню Edit→Preferences. Причем это можно сделать из любой программы, входящей в пакет Netscape Communicator. В появившемся окне Preferences (рис. 13.4) перейдите в раздел Почтовые серверы (Mail servers) и укажите необходимые вам параметры. Параметры протокола POP можно задать, выбрав почтовый сервер и нажав на кнопку «Edit».

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

    Программа The Bat!

    Возле поля ввода сервера для отправления сообщений есть кнопка «More» (см. рис. 13.3). При нажатии на нее откроется окно Advanced SMTP Options. Установите режим Perform SMTP authenication (RFC 2554). Если имя пользователя и пароль на сервере POP совпадают с именем пользователя и паролем на сервере SMTP, а это обычно так, установите режим Use POP server login. В противном случае, укажите нужное имя пользователя и пароль.

    Программа Outlook Express

    Откройте окно свойств учетной записи и перейдите на вкладку Серверы. Включите режим «Проверка подлинности пользователя», а затем нажмите на кнопку «Настройка» и установите параметры аутентификации.

    Netscape Messenger

    Здесь все аналогично предыдущим программам — установить имя пользователя для сервера SMTP можно в разделе Mail servers (см. рис. 13.4), включить аутентификацию там же. Хочу заметить, что Netscape Messenger (версия 4.76) поддерживает только метод авторизации PLAIN.

    Рис. 13.4. Настройка Netscape Messenger

    13.4. Другие программы для работы с электронной почтой

    Кроме агентов MTA и демонов POP-сервиса существуют также программы для получения почты, POP-клиенты и программы для сортировки почты.

    Конечно, любая почтовая программа, например, kmail или Outlook, обладают встроенным POP-клиентом, но, кроме сбора почты, почтовые программы, как правило, обладают массой других не менее полезных функций — создание, отправка сообщений и тому подобные.

    В качестве POP-клиента рассмотрим стандартный почтовый клиент Linux — fetchmail, а также программу сортировки почты — procmail.

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

    1. На один ящик mail@firma.ru поступает почта для всех отделов какой-либо организации. Вам нужно выполнить сортировку приходящей почты по названию отдела, например, если в теле письма или в одном из его заголовков упоминается название отдела, отправить это сообщение одному из пользователей отдела.

    2. Настроить автоответчик электронной почты. Этот автоответчик будет работать подобно обыкновенному автоответчику: когда пользователь получает сообщение, автоответчик автоматически отправит ответ, содержащий примерно такое сообщение: «Ваше сообщение получил. Прочитаю в 19:00».

    Теперь займемся решением первой задачи. Сначала немного конкретизируем ее. Пусть у вашей организации существует 3 отдела. Адрес первого отдела — depl@firma.ru, второго — dep2@firma.ru, а третьего — dep3@firma.ru. У вас также есть пользователь mail, на имя которого будет приходить вся почта. Его адрес — mail@firma.ru. Также вы хотите, чтобы рассылка проекта LinuxRSP отправлялась вам по адресу adm@firma.ru.

    Для начала в домашнем каталоге пользователя mail создайте файл .procmailrc примерно такого содержания, как это показано в листинге 13.2 :

    Листинг 13.2. Файл .procmailrc

    :0

    * ^Subject:.*dep1

    ! dep1

    :0

    * ^Subject: .*dep2

    ! dep2

    :0

    * ^Subject: . *dep3

    ! dep3

    :0

    * ^Subject:.*LinuxRSP

    ! adm

    Таким образом, вы определили правила сортировки почты. Если в теме (заголовок Subject) будет присутствовать название отдела, то сообщение будет отправлено нужному пользователю.

    Примечание. Если вы создавали файл .procmailrc, зарегистрировавшись в системе как пользователь root, измените права доступа к этому файлу:

    chown mail.mail .procmailrc

    chmod 600 .procmailrc

    Можно выполнить сортировку по полю From или любому другому, например, последнее правило могло бы выглядеть так:

    :0

    * ^From:.* Subscribe.Ru

    ! adm

    Но в этом случае, если кто-нибудь из пользователей вашей системы также подпишется на другую рассылку на сервере Subscribe.Ru, то вся почта попадет к пользователю adm и вам придется читать рассылку вместе.

    Примечание. Подробнее о правилах сортировки вы прочитаете в справочной системе Linux, введя команду man procmail.

    В этом же каталоге ($HOME/mail) создайте файл .forward. Если вы работаете как пользователь root, установите права доступа к этому файлу так же как и для файла .procmailrc. В этом файле задаются правила перенаправления почты. Добавьте в него следующую строку: 

    |IFS=' ' && exec /usr/bin/procmail USER=<mail>

    Обычно программа procmail находится в каталоге /usr/bin. Если вы при самостоятельной сборке программы указали другой каталог, измените команду перенаправления в файле .forward.

    Теперь создайте файл .fetchmailrc. Этот файл нужно создать в каталоге того пользователя, от имени которого будет запускаться fetchmail. В этот файл добавьте следующие строки:

    set postmaster "mail"

    poll provider.ru proto POP3 no dns

    user "mail" pass "my_password" to mail here

    options fetchall

    Таким образом вы установите постмастера (пользователь mail. provider.ru) — имя почтового сервера, откуда вы будете забирать почту по протоколу POP3. При этом вы будете использовать имя пользователя mail и пароль my_password. Опция fetchall указывает программе получить всю почту и потом удалить полученные сообщения на сервера provider.ru.

    Запускать программу fetchmail можно как демон, а можно с помощью планировщика crontab. В первом случае просто выполните команду:

    fetchmail –d 12000

    При этом fetchmail будет проверять наличие новой почты через каждые 20 минут. Во втором случае выполните команду crontab –e и введите новое задание:

    0,20,40 * .* * * /usr/bin/fetchmail

    Теперь перейдем к решению второй задачи. Напомню, что наша цель — создание автоответчика. Существуют два типа автоответчиков. Первые посылают автоответ только на определенные сообщения, а вторые — на все. Например, вам нужно отправить клиенту прайс-лист вашей организации по его требованию. Это первый тип автоответчика. Если же вы уезжаете летом на недельку отдохнуть куда-нибудь и хотите, чтобы программа сообщила людям, что вы в отпуске — это второй тип.

    Займемся настройкой первого типа. Для этого в ваш файл .procmailrc добавьте строки:

    0:

    * ^Subject.*Price

    | (formail –r ; cat $HOME/pricelist.zip)

    | sendmail –t

    Как видите все намного проще, чем ожидалось. А второй тип автоответчика создается еще проще:

    0:

    | (formail –r; cat $HOME/infо.txt)

    | sendmail –t

    Заметьте — вы не определяете никаких условий, поэтому ответное письмо будет отправлено всем, кто напишет вам сообщение. В файл info.txt нужно записать ваш автоответ.

    Сделаем небольшой вывод. Программа fetchmail используется для загрузки сообщений, a procmail — для ее сортировки. Рекомендую вам изучить параметры программ fetchmail и procmail — вы найдете их в документации по этим программам. Используйте procmail с большой осторожностью, потому что если вы неправильно укажете условия сортировки, почта будет просто утеряна без возможности восстановления.

    13.5. Создание списка рассылки

    Средствами Linux можно создать небольшую рассылку сообщений электронной почты. Для больших систем рассылки я не рекомендовал бы использовать вам этот метод. Обычно системы рассылки создаются средствами, специально предназначенными для этого, например, РНР в связке с MySQL идеально подходят для этого. Язык программирования РНР предназначен для создания Web-приложений и оснащен всеми необходимыми для этого функциями, а сервер баз данных MySQL обеспечит поддержку базы данных адресов подписчиков и параметры рассылки. Таким образом, если вы хотите создать собственный MailList.Ru, воспользуйтесь готовыми решениями или напишите собственную на РНР или Perl.

    Однако иногда бывает полезно создать небольшую рассылку внутри одной организации. Приведенное далее решение не отличается оригинальностью и не претендует на звание лучшей системы рассылки. С помощью этого примера вы также узнаете, как использовать стандартную почтовую утилиту Linux — mail. Эта программа входит в состав практически каждой Unix-системы.

    Итак, допустим у вас есть три отдела: отдел маркетинга, производственный отдел и администрация. К первому отделу относятся пользователи вашей системы marina и oleg, ко второму — igor, dmitry, olya, а к третьему — president, director, secretar. Периодически вам нужно отправлять сообщения в один из отделов. Число пользователей небольшое и, возможно, отправить сообщение можно было бы с помощью групп пользователей почтовой программы, которую вы используете. Однако сейчас я покажу, как элегантно это можно сделать средствами Linux. Тем более, что для этого не нужно устанавливать никаких почтовых программ.

    Создайте файл .mailrc в вашем домашнем каталоге и добавьте в него строки:

    alias market marina oleg

    alias proizv igor dmitry olya

    alias adm director secretar

    В дальнейшем, чтобы отправить сообщение в производственный отдел просто введите команду:

    mail proizv

    Программа mail попросит вас ввести тему, а затем текст сообщения. Для окончания ввода нажмите Ctrl+D и mail отправит сообщения пользователям.

    При создании псевдонимов убедитесь, что в вашей системе нет пользователей с таким именем.

    Как видите, средствами одной программы mail вам удалось сделать немного. Если пользователей много, использовать механизм псевдонимов не очень удобно. Гораздо удобнее, чтобы программа mail брала список подписчиков из какого-нибудь файла. К сожалению, разработчики этой программы не предусмотрели такой возможности, однако с помощью небольшого сценария мы можем организовать эту возможность. Посмотрим, что из этого получится, если воспользоваться средствами интерпретатора команд bash.

    Создайте сценарий smaller в своем домашнем каталоге (см. листинг 13.3).

    Листинг 13.3. Сценарий smailer

    #!/bin/bash

    DT=`date`

    echo $DT >> log

    for user in `cat users`

    do

     echo "Sending message to $user"

     mail $user –s Subscribe < msg 2>> log

    done

    Напомню, что сценарий — это обыкновенный текстовый файл с установленным атрибутом выполнения, содержащий команды интерпретатора. Более подробно сценарии рассматриваются в гл. 19, а сейчас попробую объяснить все на интуитивном уровне, чтобы вы поняли сам принцип работы вышеприведенного сценария.

    В первой строке указывается, какой интерпретатор будет выполнять ваши команды — /bin/bash. Обратите внимание на одинарные кавычки, в которые заключена команда date. Это не обыкновенные кавычки, а те, которые расположены под знаком тильды «~». Во второй и третьей строках заносится дата в файл протокола log. Этот файл находится в домашнем каталоге.

    Затем последовательно (в цикле for) читается список пользователей из файла users, который находится в домашнем каталоге, и передается имя пользователя программе mail. Программа mail поочередно отправит сообщение каждому пользователю из файла users. Тема сообщения устанавливается с помощью параметра –s, а само сообщение хранится в файле msg. 

    Весь поток ошибок перенаправляется в файл log. Вы можете переправить и все сообщения программы mail, удалив дескриптор 2 перед символами перенаправления ввода/вывода.

    Теперь создайте файл users. Текст моего личного файла приведен в листинге 13.4.

    Листинг 13.4 Файл users

    den

    u

    synthetic

    evg

    Сообщения, которые вы хотите отправить, запишите в файл msg. Запустите сценарий командой:

    ./smaller

    На экране вы должны увидеть следующую информацию:

    Sending message to den

    Sending message to u

    Sending message to synthetic

    Sending message to evg

    Так как пользователя evg в моей системе нет, в файл протокола будет записано соответствующее сообщение:

    Сбт Май 4 10:43:28 EEST 2002

    evg… User unknown /root/dead.letter…

    Saved message in /root/dead.letter

    На экран не будет выведено сообщение об ошибке, потому что мы перенаправили стандартный поток ошибок в файл log. Как видите, все предельно просто.

    Программу mail можно использовать и для чтения почты. Для этого просто введите команду:

    mail

    Если в вашем почтовом ящике нет сообщений, программа сообщит вам об этом:

    No mail for user

    где user — это ваше имя пользователя.

    Если будут новые сообщения, программа выведет на экран нумерованный список, и вы сможете ввести номер сообщения, которое хотите прочитать. Для удаления сообщения используется команда d <номер> или d <диапазон>. Выйти из программы можно, введя команду q.

    Использовать программу mail в качестве полноценной почтовой программы нельзя — она работает только с вашим локальным ящиком, поэтому если вам нужно будет получить сообщения откуда-то извне, скажем pop.mail.ru, вы не сможете сделать это. Я бы вам порекомендовал использовать программу kmail. которая входит в состав KDE. Данная программа поддерживает несколько учетных записей электронной почты, в том числе и локальный ящик, отправку сообщений с помощью SMTP и локального агента MTA (sendmail), а также сообщения в формате HTML, что является немаловажным, когда пользователи Outlook забывают включить текстовый формат для исходящих сообщений.








    Главная | В избранное | Наш E-MAIL | Прислать материал | Нашёл ошибку | Наверх