• Глава 18 Администрирование домена
  • Использование сервера DNS
  • Сервер DNS, доступный из внешней сети
  • Работа локального сервера DNS
  • Получение доменного имени
  • Серверы DNS для Linux
  • Базовая конфигурация DNS
  • Главный конфигурационный файл BIND
  • Расположение других серверов имен
  • Настройка сервера для перенаправления запросов
  • Описание зоны
  • Настройка ведомого сервера
  • Управление доменом
  • Пример конфигурационного файла зоны
  • Формирование описания зоны
  • Определение адресов и имен
  • Конфигурация зоны для обратного преобразования
  • Настройка сервера, предназначенного только для кэширования
  • Взаимодействие с сервером DHCP
  • Запуск и тестирование сервера
  • Резюме
  • Глава 19 Передача почты: протокол SMTP
  • Использование сервера SMTP
  • Программы, реализующие сервер SMTP в системе Linux
  • Настройка домена для использования почтового сервера
  • Передача данных с помощью протокола SMTP
  • Специальные функции сервера SMTP
  • Маскировка адреса
  • Обработка локальных сообщений
  • Ретрансляция писем
  • Настройка сервера для борьбы со спамом
  • Настройка
    sendmail
  • Конфигурационные файлы
    sendmail
  • Маскировка адреса sendmail
  • Настройка
    sendmail
    для получения почты
  • Работа в режиме ретранслятора
  • Конфигурация
    sendmail
    для противодействия попыткам передачи спама
  • Настройка Exim
  • Конфигурационные файлы Exim
  • Маскировка адресов
  • Настройка Exim для приема почты
  • Конфигурация Exim для ретрансляции писем
  • Настройка Exim для противодействия распространению спама
  • Настройка Postfix
  • Конфигурационный файл Postfix
  • Маскировка адресов
  • Настройка Postfix для получения почты
  • Конфигурация Postfix для ретрансляции писем
  • Настройка Postfix для противодействия распространению спама
  • Использование фильтров Procmail
  • Роль Procmail в процессе доставки почты
  • Создание рецепта
  • Пример использования рецептов
  • Использование существующих наборов фильтров
  • Запуск Procmail
  • Резюме
  • Глава 20 Поддержка Web-сервера
  • Использование Web-сервера
  • Программы, реализующие Web-сервер в системе Linux
  • Настройка основных функций Apache
  • Конфигурационные файлы Apache
  • Способы запуска сервера Apache
  • Опции общего назначения
  • Описание каталогов
  • Загрузка модулей Apache
  • Настройка kHTTPd
  • Поддержка форм и сценариев
  • Статические данные, формы и CGI-сценарии
  • Поддержка CGI-сценариев
  • Создание CGI-сценариев
  • Повышение уровня защиты при использовании CGI-сценариев
  • Поддержка защищенных Web-узлов
  • Задачи, решаемые с помощью SSL
  • Настройка средств поддержки SSL
  • Установка компонентов Apache, предназначенных для поддержки SSL
  • Организация виртуальных доменов
  • Использование виртуальных доменов
  • Конфигурация виртуальных доменов
  • Создание содержимого Web-узла
  • Форматы данных, используемых при создании Web-узла
  • Инструментальные средства создания Web-страниц
  • Особенности создания Web-страниц
  • Анализ файлов протоколов
  • Формат файла протокола Apache
  • Использование Analog
  • Использование Webalizer
  • Резюме
  • Глава 21 FTP-серверы
  • Использование FTP-сервера
  • Программы, реализующие FTP-сервер в системе Linux
  • Настройка основных функций FTP-сервера
  • Запуск FTP-сервера
  • Настройка WU-FTPD
  • Настройка ProFTPd
  • Установка анонимного FTP-сервера
  • Особенности работы анонимного FTP-сервера
  • Обеспечение безопасности при работе анонимного FTP-сервера
  • Опции, используемые для настройки анонимного FTP-сервера
  • Резюме
  • ЧАСТЬ III

    Серверы Internet

    Глава 18

    Администрирование домена

    Для того чтобы компьютеры, подключенные к сети TCP/IP, могли обращаться друг у другу по имени, они должны иметь возможность преобразовывать доменные имена в IP- адреса, а также выполнять обратное преобразование. Существуют различные средства, позволяющие осуществлять подобные преобразования. Наиболее часто для этой цели используется DNS-сервер (Domain Name System — система доменных имен), который часто называют сервером имен. В главе 2 рассматривались вопросы настройки компьютера для взаимодействия с сервером имен. Однако, для того, чтобы такое взаимодействие было возможным, сервер DNS должен присутствовать в сети. Следует заметить, что работа всей Internet базируется на использовании иерархии серверов DNS. Установив сервер DNS в локальной сети, вы не только обеспечите преобразование имен в ее пределах, но также предоставите возможность внешним пользователям обращаться к компьютерам вашей сети по именам.

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

    Администрирование сервера DNS не занимает столько времени и не требует таких усилий, сколько требуется для управления сложными системами, например, Kerberos выполнять все же труднее, чем администрировать простой сервер, например Telnet. Прочитав данную главу, вы получите сведения, достаточные для управления простым доменом. Если же потребуется установить более сложную конфигурацию, вам придется обратиться к документации на сервер DNS либо к изданиям, специально посвященным данному вопросу. В качестве примеров можно привести книгу Элбица (Albitz) и Лиу (Liu) DNS and BIND, 4th Edition (O'Reilly, 2001) и книгу Ханта (Hunt) Linux DNS Server Administration (Sybex, 2000).

    Использование сервера DNS

    Администрирование сервера DNS — нетривиальная задача, для выполнения которой администратор должен обладать определенной квалификацией. Чтобы грамотно настроить сервер, необходимо знать принципы его работы.

    Сервер DNS, доступный из внешней сети

    Работа сети Internet базируется на использовании взаимодействующих между собой серверов DNS. Чтобы понять, как сервер, установленный в локальной сети, позволяет внешним пользователям обращаться к локальным компьютерам по именам, необходимо рассмотреть процесс обмена данными между различными серверами DNS. Предположим, что к серверу DNS обратился Web-броузер, пользователь которого задал

    URL http://www.whitehouse.gov.
    Сервер DNS должен преобразовать символьное имя
    www.whitehouse.gov
    в IP-адрес узла сети. Локальный сервер DNS начинает процесс преобразования с того, что обращается к корневому серверу DNS. IP-адреса компьютеров, выполняющих функции корневых серверов, указаны в конфигурационном файле каждого сервера DNS; вероятность того, что эти адреса изменятся, крайне мала. Обращаясь к корневому серверу DNS, локальный сервер передает ему имя, предназначенное для преобразования (в данном примере это имя
    www.whitehouse.gov)
    . В большинстве случаев корневой сервер не знает IP-адреса, соответствующего указанному имени, но имеет информацию о доменах верхнего уровня (TLD — top-level domain). Примерами таких доменов являются
    .com
    ,
    .gov
    ,
    .uk
    и т.д. Поэтому корневой сервер возвращает локальному серверу адреса компьютеров, поддерживающих DNS-сервер
    .gov
    , после чего локальный сервер передает запрос одному из компьютеров, обеспечивающих работу домена
    .gov
    . Сервер DNS
    .gov
    также не может преобразовать имя, но он знает IP-адреса компьютеров, ответственных за поддержку домена
    whitehouse.gov
    , поэтому передает их локальному серверу DNS. Сервер
    whitehouse.gov
    знает IP-адрес, соответствующий имени
    www.whitehouse.gov
    , поэтому, получив запрос локального сервера, он возвращает ему требуемую информацию. После получения IP-адреса локальный сервер DNS передает его Web-броузеру, который использует адрес при формировании запроса к Web-серверу. Процесс преобразования адресов условно показан на рис. 18.1. Детали этого процесса скрыты от пользователя. С точки зрения прикладной программы или работающего с ней пользователя дело обстоит так, как будто локальный сервер DNS имеет информацию о соответствии символьных имен и IP-адресов всех узлов Internet.

    Рис. 18.1. Процесс преобразования адреса предполагает передачу запросов различным серверам DNS

    На первый взгляд описанная здесь процедура кажется сложной. Создается впечатление, что для ее выполнения потребуется много времени, однако реально преобразование имени завершается за несколько секунд. Существуют также способы ускорить этот процесс. Один из них состоит в том, что локальные серверы DNS кэшируют результаты преобразования адресов. Поэтому если два пользователя передадут серверу DNS запросы на преобразование одного и того же имени и между этими запросами пройдет не слишком много времени, то второй запрос будет обработан мгновенно. Сервер DNS лишь вернет второму пользователю результаты, полученные для первого пользователя. В кэше также сохраняются адреса серверов тех доменов, обращения к которым осуществляются наиболее часто. Например, локальный сервер DNS почти наверняка имеет сведения о серверах домена верхнего уровня .com, поэтому он не станет обращаться к корневому домену. Информация хранится в кэше в течение ограниченного времени, поэтому, если администратор изменит IP-адрес одного из своих компьютерах, это не приведет к возникновению проблем при обращении к этой машине.

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

    whitehouse.gov
    выполняет для своего домена. После того как ваш сервер будет настроен и запущен, а также после того как сервер DNS, поддерживающий домен более высокого уровня, узнает о существовании вашего сервера, каждый пользователь Internet сможет преобразовать имена компьютеров вашей сети в IP-адреса.

    На заметку

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

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

    http://www.granitecanyon.com
    ). Советую вам не слишком полагаться на бесплатные услуги; помните правило: "Вы получите то, за что заплатите". В любом случае сторонние организации предоставят вам возможность разместить либо один, либо оба сервера DNS, необходимых для обслуживания вашей сети.

    Существует специальное динамическое DNS-обслуживание, которое предоставляется в основном пользователям DSL и кабельных модемов. Организации, которые предоставляют динамическое DNS-обслуживание, поддерживают обычные серверы DNS, но они позволяют быстро обновлять записи, которые соответствуют изменяющимся IP-адресам. Многие организации предпочитают использовать статические IP-адреса и статические средства преобразования имен. Динамическое DNS-обслуживание в основном предоставляется отдельным пользователям, поддерживающим собственные серверы. Динамическое DNS-обслуживание обеспечивают многие организации. Полный их список занял бы слишком много места, поэтому здесь приводятся лишь два URL:

    http://www.technopagan.org/dynamic/
    и
    http://www.oth.net/dyndns.html
    .

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

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

    Работа локального сервера DNS

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

    /etc/resolv.conf
    . Использование локального сервера DNS предоставляет следующие преимущества.

    • Преобразование адресов по запросам компьютеров локальной сети выполняет сервер, находящийся в той же сети, что увеличивает производительность работы. Увеличение производительности особенно заметно тогда, когда сервер DNS провайдера работает медленно или ненадежно. Локальный сервер поддерживает собственный кэш, что также способствует повышению быстродействия.

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

    Таким образом, локальный сервер не только позволяет внешним пользователям обращаться к вашим компьютерам по именам, но и может использоваться для обслуживания внутренней сети. Решение об установке сервера DNS полностью оправдано в том случае, когда ваша локальная сеть отделена от Internet брандмауэром и к ней подключено достаточно большое количество компьютеров.

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

    /etc/hosts
    . (Аналогичное средство доступно и в прочих системах, но соответствующий файл расположен в другом каталоге. Например, в Windows 9x/Me подобные функции выполняет файл
    С:\WINDOWS\HOSTS
    .) В составе файла
    /etc/hosts
    содержатся записи; каждая из них состоит из IP-адреса, за которыми следуют полное доменное имя и сокращенный вариант имени компьютера. Пример записи из файла
    /etc/hosts
    приведен ниже.

    192.168.78.109 gingko.threeroomco.com gingko

    При установке системы Linux в файл

    /etc/hosts
    помещается единственная запись, которая связывает имя
    localhost
    с адресом 127.0.0.1. Если в локальной сети содержится небольшое число компьютеров, этот файл несложно дополнить так, чтобы он определял все узлы сети. В небольшой сети отредактировать файлы
    /etc/hosts
    гораздо проще, чем настроить сервер DNS. При увеличении размеров сети для редактирования файлов
    /etc/hosts
    приходится прилагать все больше и больше усилий, в то время как затраты на поддержку сервера DNS увеличиваются лишь незначительно. Применение файла
    /etc/hosts
    теряет смысл, если в вашей сети присутствует сервер DHCP и используется динамическое распределение IP-адресов.

    Получение доменного имени

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

    На заметку

    Если вы собираетесь установить сервер DNS во внутренней сети, можете самостоятельно выбрать имя домена. Необходимо лишь следить за тем. чтобы оно отличалось от всех доменов, используемых в Internet. Сделать это можно, приняв несуществующее имя домена верхнего уровня, например

    .unused
    .

    В настоящее время существуют два основных типа доменов верхнего уровня.

    • Домен верхнего уровня на базе кода страны (ccTLD — country code top-level domain). Эти домены принадлежат конкретным странам. Например, домен

    .us
    принадлежит США, а
    .se
    — Швеции.

    • Универсальный домен верхнего уровня (gTLD — generic top-level domain). Эти домены не отражают географическое положение узла сети. Примерами подобных доменов являются

    .com
    ,
    .net
    ,
    .org
    и
    .gov
    . Начиная с 2001 г. стали доступны новые gTLD; к ним относятся, например,
    .biz
    и
    .museum
    .

    Процесс регистрации домена зависит от того, принадлежит ли ваш домен ccTLD или gTLD. Кроме того, процедура регистрации имеет свои особенности для разных доменов верхнего уровня внутри категории. В большинстве случаев для получения имени домена следует обращаться к одной из организаций, поддерживающей реестр доменных имен. Большинство таких организаций имеют право распределять домены в составе

    .com
    ,
    .org
    ,
    .net
    и ряда других TLD. Некоторые страны выделяют домены в своем ccTLD на коммерческой основе. При этом имя домена может получить организация, не имеющая никакого отношения к стране, которой принадлежит домен верхнего уровня. Списки организаций, поддерживающих реестр доменных имен, можно найти по адресам
    http://www.NewRegistrars.com
    и
    http://www.icann.org/registrars/accredited-list.html
    . Стоимость регистрации домена в составе gTLD обычно составляет от 10 до 35 долларов в год.

    В некоторых доменах верхнего уровня, например в gTLD

    .gov
    и
    .edu
    , а также во многих ccTLD регистрация доменов затруднена. Список ccTLDs, включающий информацию об организациях, ответственных за распределение доменных имен, можно найти по адресу
    http://www.iana.org/cctld/cctld-whois.htm
    .

    На заметку

    В конце 2001 г. были изменены принципы управления доменом верхнего уровня

    .us
    . С начала 2002 г. появилась возможность регистрировать домены непосредственно в TLD
    .us
    . Если вы собираетесь зарегистрировать свой домен в составе
    .us
    , вам следует обратиться по адресу
    http://www.nic.us
    .

    Некоторые домены, в особенности ccTLD, содержат иерархию поддоменов. Например, в составе домена

    .uk
    созданы поддомены
    .gov.uk
    и
    .со.uk
    , предназначенные для конкретных целей. Если организация захочет зарегистрировать домен, непосредственно принадлежащий TLD ей будет отказано в этом. В различных поддоменах действуют разные правила регистрации новых доменов. Например,
    .gov.uk
    выделен для государственных учреждений Великобритании, а домен
    .co.uk
    — для коммерческих организаций (он выполняет те же функции, что и gTLD
    .com
    ).

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

    Серверы DNS для Linux

    Первое, что необходимо сделать при установке сервера DNS, — решить, какой продукт вы будете использовать в качестве сервера. Разные программы предоставляют различные возможности. Наиболее часто используемые пакеты описаны ниже.

    • BIND. Сервер BIND (Berkeley Internet Name Domain) — самая популярная в настоящее время программа, которая может обеспечивать функции сервера DNS в системе Linux. Именно этому серверу уделяется основное внимание в данной главе. Пакет BIND поставляется в составе многих дистрибутивных пакетов, кроме того, вы можете скопировать его с узла

    http://www.isc.org/products/BIND/
    . В настоящее время доступна версия 9.2.0, но на момент написания данной книги, т.е. в 2002 г., многие дистрибутивные пакеты Linux еще поставлялись с версиями 8.2.x данного продукта. Заметьте, что формат конфигурационного файла старой версии 4.9.x отличается от формата, используемого в новых версиях сервера.

    • 

    djbdns
    . D. J. Bernstein's DNS server (сервер DNS Д. Дж. Бернстайна) представляет собой продукт, альтернативный BIND, пользующийся популярностью у некоторых пользователей. Этот сервер отличается небольшими размерами, высокой эффективностью и обеспечивает высокий уровень защиты. Он не принят в качестве стандарта и не поставляется ни с одним из дистрибутивных пакетов, рассматриваемых в данной книге. При желании вы можете заменить BIND на
    djbdns
    . Дополнительная информация о
    djbdns
    содержится на Web-странице
    http://cr.yp.to/djbdns.html
    .

    • 

    pdnsd
    . Данный продукт представляет собой демон, реализующий proxy-сервер DNS. Он ориентирован для использования в локальной сети в качестве посредника между локальными компьютерами и внешним сервером DNS. Он также предоставляет ограниченные средства преобразования имен, но не поддерживает все возможности BIND или
    djbdns
    . Дополнительную информацию о
    pdnsd
    можно найти по адресу
    http://home.t-online.de/home/Moestl/
    .

    • 

    dnscache
    . Подобно
    pdnsd
    ,
    dnscache
    представляет собой proxy-сервер DNS. Он предназначен для ускорения процесса преобразования имен. В отличие от
    pdnsd
    ,
    dnscache
    не поддерживает локальные компьютеры, за исключением узла
    localhost
    (127.0.0.1). Информацию о данном продукте можно получить, обратившись по адресу
    http://cr.yp.to/djbdns/dnscache.html
    .

    Большинство администраторов, занимающихся поддержкой компьютеров под управлением Linux, используют в качестве сервера DNS продукт BIND, поскольку он принят как стандарт и поставляется с большинством версий данной операционной системы. Администраторы, для которых вопросы безопасности системы имеют первоочередное значение, отдают предпочтение продукту

    djbdns
    . Proxy-серверы DNS в основном используются в небольших сетях для кэширования результатов запросов к внешним серверам и преобразования локальных имен. Если же вы хотите поддерживать собственный домен и выполнять преобразование имен по запросам извне, возможности подобных продуктов не позволяют решать эти задачи. Остальной материал данной главы посвящен рассмотрению BIND, но некоторые действия по администрированию этого сервера применимы также к
    djbdns
    .

    Базовая конфигурация DNS

    Установка конфигурации DNS предполагает решение двух задач: настройка сервера DNS (в пакете BIND функции сервера выполняет программа

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

    Главный конфигурационный файл BIND

    Основные опции BIND задаются в главном конфигурационном файле с именем

    named.conf
    . Этот файл обычно располагается в каталоге
    /etc
    . В некоторых дистрибутивных пакетах Linux файл с опциями, установленными по умолчанию, в каталоге
    /etc
    отсутствует. В этом случае файл-образец надо искать в каталоге, содержащем документацию BIND (обычно это каталог
    /usr/share/doc/bind-версия
    ). Пример файла
    named.conf
    приведен в листинге 18.1.


    Листинг 18.1. Пример файла

    named.conf

    options {

     directory "/var/named/";

     auth-nxdomain yes;

     forwarders {

      10.232.7.98;

      10.232.45.1;

     };

     forward first;

    };


    zone "." {

     type hint;

     file "named.ca";

    };


    zone "threeroomco.com" {

     type master;

     file "named.threeroomco.com";

    };


    zone "1.168.192.in-addr.arpa"{

     type master;

     file "named.192.168.1";

    };


    zone "0. 0.127.in-addr.arpa" {

     type master;

     file "named.local";

    };

    Файл

    named.conf
    состоит из нескольких разделов. В листинге 18.1 представлены раздел
    options
    и несколько разделов
    zone
    . Раздел
    options
    содержит определения глобальных опций, в частности, в нем задается каталог, в котором содержатся файлы с описанием зоны. Разделы
    zone
    описывают конкретные зоны — домены либо другие группы имен или IP-адресов. Большинство строк, содержащихся в файле
    named.conf
    , оканчиваются точкой с запятой (
    ;
    ). Это требование надо выполнять, в противном случае BIND может некорректно интерпретировать содержимое конфигурационного файла. В основном содержимое файла
    named.conf
    представляет собой указатели на файлы, в которых находятся дополнительные сведения о зонах. Эти файлы содержатся в каталоге
    /var/named
    либо в другом каталоге, заданном с помощью опции
    directory
    .

    В последующих разделах информация, содержащаяся в файле

    named.conf
    , описывается более детально.

    Расположение других серверов имен

    Одна из основных задач, которые вам предстоит решить при инсталляции сервера DNS, — получить список корневых серверов. Сделать это можно несколькими способами.

    • Требуемый файл может входить в поставку пакета BIND. Обычно он называется

    named.са
    или
    db.cache
    и располагается в каталоге
    /var/named
    . Если содержимое этого файла устарело, вы можете получить новый файл одним из двух описанных ниже способов.

    • Файл

    named.са
    , содержащий список корневых серверов, можно скопировать посредством протокола FTP, обратившись по адресу
    ftp://ftp.rs.internic.net/domain/
    .

    • Если в вашей системе установлена программа

    dig
    , вы можете задать команду
    dig @a.root-servers.net.ns > named.са
    . Эта команда копирует файл, содержащий список корневых серверов, и присваивает ему имя
    named.са
    .

    Чтобы вы могли воспользоваться вторым или третьим из описанных выше способов, в вашей сети должен работать сервер DNS. Если сервер DNS в сети отсутствует, вы можете скопировать нужный файл, воспользовавшись компьютером другой сети, либо временно настроить компьютер, на котором должен быть установлен сервер DNS для преобразования посредством внешнего сервера имен (действия по настройке были описаны в главе 2).

    Получив файл со списком корневых серверов, скопируйте его в каталог

    /var/named
    . Кроме того, вам следует убедиться в том, что ссылка на этот файл присутствует в конфигурационном файле
    /etc/named.conf
    . В листинге 18.1 файл, содержащий список корневых серверов, указан с помощью опции
    file
    , расположенной в разделе
    zone "."
    , (Каждое доменное имя должно оканчиваться точкой, но имя корневой зоны состоит только из точки.)

    Настройка сервера для перенаправления запросов

    BIND осуществляет преобразование имен одним из трех описанных ниже способов.

    1. Если пакет BIND настроен для поддержки запрошенного имени, сервер возвращает адрес, указанный в его конфигурационном файле.

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

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

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

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

    Перенаправление запросов задается с помощью опций

    forwarders
    и
    forward
    (см. листинг 18.1). Опция
    forwarders
    позволяет задать один или несколько IP-адресов серверов DNS, к которым локальный сервер станет обращаться перед тем, как начать выполнение стандартной процедуры преобразования адресов. Опция
    forward
    допускает одно из двух значений:
    only
    или
    first
    . Если вы зададите
    forward only
    , BIND при работе будет полагаться лишь на удаленный сервер DNS, указанный с помощью опции
    forwarders
    , и не будет выполнять стандартную процедуру преобразования имен. Значение
    first
    опции
    forward
    указывает на то, что BIND должен сначала обратиться к удаленному серверу DNS, а если такое обращение не дало результатов (например, если удаленный сервер не ответил на запрос), он должен осуществить преобразование имен по стандартному алгоритму. В любом случае, если к серверу поступит запрос на преобразование имен, которые принадлежат зоне, обслуживаемой данным сервером, он будет использовать описание зоны в своем конфигурационном файле.

    Описание зоны

    При настройке BIND вы должны указать, как следует обрабатывать запросы, в которых указаны определенные домены, поддомены и диапазоны IP-адресов. Различные группы имен и адресов называются зонами. Зоной может быть домен или поддомен (например, зоной является домен

    threeroomco.com
    , указанный в листинге 18.1) либо диапазон IP-адресов (такой диапазон присутствует в имени зоны, оканчивающемся символами
    in-addr.arpa
    ). Для простого сервера DNS задается лишь несколько зон.

    • Корневая зона. Зона, идентифицируемая посредством точки (

    "."
    ), определяет корневой узел пространства имен. В определении зоны присутствует опция t
    ype hint
    , которая сообщает о том, что список серверов содержится в файле, указанном посредством опции
    file
    .

    • Локальный домен. Если ваш сервер DNS предназначен не только для кэширования, вам придется сконфигурировать BIND для поддержки зоны, соответствующей вашему домену. В листинге примером такой зоны является

    threeroomco.com
    .

    • Обратная зона. Несмотря на то что в большинстве случаев сервер DNS используется для преобразования символьных имен в IP-адреса, сервер имен также должен поддерживать обратное преобразование. Для выполнения подобного преобразования создается зона, имя которой оканчивается на

    in-addr.arpa
    . Перед этой последовательностью символов указывается имя зоны, т.е. часть IP-адреса, заданная в обратном порядке. Например, запись для сети 192.168.1.0/24 имеет имя
    1.168.192.in-addr.arpa
    .

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

    • 

    master
    . Первичный, или ведущий (master), сервер содержит описание зоны. Если вы создаете сервер DNS для небольшой сети, то, вероятнее всего, объявите локальные зоны как master. Пример зоны такого типа приведен в листинге 18.1.

    • 

    slave
    . Вторичный, или ведомый (slave), сервер получает информацию о зоне от другого сервера DNS. Такой сервер также может выступать в роли источника информации о зоне. В следующем разделе данный тип зоны будет рассмотрен более подробно. Простой сервер DNS может выступать для некоторых зон как ведущий, а для других зон — как ведомый.

    • 

    stub
    . Сервер такого типа похож на ведомый, но он копирует только записи NS, т.е. спецификации сервера имен. Данный тип зоны следует использовать в том случае, если вы хотите создать отдельный сервер DNS для поддомена. Предположим, что домен
    threeroomco.com
    содержит поддомен
    sub.threeroomco.com
    и вы хотите использовать для управления им отдельный сервер DNS. Для этого вы должны включить в состав конфигурационного файла сервера BIND для
    threeroomco.com
    определение зоны с именем
    sub.threeroomco.com
    типа
    stub
    , указывающее на сервер DNS
    sub.threeroomco.com
    . Вы можете также использовать один сервер DNS для поддержки всего домена, включая поддомен
    sub.threeroomco.
    com. В этом случае вам не понадобится формировать специальную зону
    sub.threeroomco.com
    .

    • 

    forward
    . Подобно опции
    forward
    в разделе
    options
    , зона
    forward
    сообщает BIND, что запросы на получение информации о зоне должны передаваться другому серверу DNS. BIND формирует собственный запрос к указанному серверу, а затем использует полученные данные для построения ответа. Используя зону такого типа, вы должны включить опцию
    forwarders
    , указывающую BIND, какому из удаленных серверов DNS должны перенаправляться запросы.

    • 

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

    Простой конфигурационный файл, подобный представленному в листинге 18.1, содержит одну зону

    hint
    и несколько зон
    master
    . В случае более сложной конфигурации в конфигурационном файле могут быть указаны зоны всех типов.

    Настройка ведомого сервера

    Если вы собираетесь зарегистрировать домен, вам необходимо настроить два сервера DNS. Обычно один сервер конфигурируют как ведущий, а другой — как ведомый. Как и ведущий, ведомый сервер хранит информацию о зоне в отдельных файлах. Различие между этими серверами состоит в том, что ведомый сервер получает информацию о зонах от ведущего сервера. Для того чтобы это стало возможным, надо задать специальным образом конфигурацию зоны в файле

    /еtс/named.сonf
    . Предположим, например, что вам необходимо настроить сервер так, чтобы он выполнял функции ведомого по отношению к серверу, конфигурационный файл которого приведен в листинге 18.1. На ведомом сервере зона
    threeroomco.com
    должна быть определена следующим образом:

    zone "threeroomco.com" {

     type slave;

     file "named.threeroomco.com";

     masters { 192.168.1.50; }

    };

    Приведенная выше запись указывает на то, что ведомый сервер должен получать содержимое конфигурационного файла для

    threeroomco.com
    с сервера DNS, расположенного по адресу 192.168.1.50. Если сервер функционирует как ведомый для нескольких доменов, в его конфигурационном файле содержится несколько подобных определений. В списке masters можно указать два и более серверов DNS; их адреса отделяются друг от друга точкой с запятой. (При необходимости ведомый сервер может синхронизировать свое содержимое посредством другого ведомого сервера.) Если сервер является ведомым для нескольких зон, различные зоны могут синхронизироваться от разных ведущих серверов. Эту возможность удобно использовать в том случае, если вы администрируете несколько доменов. Каждый домен обслуживается отдельным ведущим сервером, и для всех их роль ведомого может выполнять один сервер.

    Зоны типа

    slave
    должны быть определены не только для прямого, но и для обратного преобразования адресов (зоны
    threeroomco.com
    и
    1.168.192.in-addr.arpa
    , приведенные в листинге 18.1). Для корневых серверов имен и для обратного преобразования localhost (
    0.0.127.in-addr.arpa
    в листинге 18.1) зоны типа
    slave
    создавать не надо.

    Если сконфигурировав сервер как ведомый, вы запустите его на выполнение, то вскоре увидите, что сервер создал файлы описания зоны, указанные в записях

    zone
    . Если этого не произошло, необходимо просмотреть файлы протоколов как для ведущего, так и для ведомого сервера и определить причину их некорректной работы. Возможно, что ведущий сервер сконфигурирован так, что передача зоны запрещена. Такой запрет часто устанавливается по соображениям безопасности, чтобы внешние пользователи не могли получить информацию о компьютерах, принадлежащих вашему домену. Если вы хотите ограничить право передачи зоны ведущим или ведомым сервером DNS, вам надо задать опцию
    allow-transfer
    . Сделать это можно либо в разделе
    options
    , либо в определении конкретной зоны. Например, чтобы ограничить право передачи зоны компьютерами 192.168.1.0/24 и 172.19.98.23, надо создать следующую запись:

    allow-transfer {

     192.168.1/24;

     172.9.98.23;

    };

    Управление доменом

    Несмотря на то что вы создали файл

    /etc/named.conf
    , указали в нем глобальные опции и определили зоны, оказывается, что настройка ведущего сервера DNS не закончена и запускать его еще рано. Если в файле
    /etc/named.conf
    указана зона типа
    master
    , необходим также конфигурационный файл зоны. В этом файле указываются имена узлов и IP-адреса. Если сервер имен обслуживает домен, содержащий большое число узлов, создание и поддержка файла зоны составляет значительную часть работы по администрированию сети. Если же домен невелик и состояние его не изменяется, достаточно лишь один раз создать конфигурационный файл.

    Пример конфигурационного файла зоны

    В листинге 18.2 приведен пример простого конфигурационного файла зоны. Этот файл начинается с имени зоны (

    threeroomco.com
    ) и раздела, в котором определяются параметры домена по умолчанию. Эти параметры детально рассматриваются ниже. За этим разделом следует набор записей, предоставляющих информацию о соответствии имен компьютеров и IP-адресов. Некоторые из записей относятся ко всему домену. Подробно структура записей будет рассмотрена позже.

    Внимание

    В системе DNS имена узлов должны оканчиваться точкой. Если, работая с клиентскими программами Internet (Web-броузером, клиентом FTP, программой подготовки почты), вы не укажете завершающую точку, система Linux сначала посчитает, что имя домена не указано, поэтому добавит к имени узла имя домена, заданное в

    /etc/resolv.conf
    . Если попытка преобразования такого имени окажется неудачной, система вместо имени домена добавит к имени, указанному пользователем, точку и снова попытается выполнить преобразование. Эти действия скрыты от пользователя, поэтому он может пренебрегать точкой в конце имени без ущерба для себя. Настраивая сервер DNS, администратор не может позволить себе подобной небрежности. В конфигурационном файле можно задавать либо полностью определенное доменное имя, оканчивающееся точкой, либо имя узла, не содержащее имени домена. Если вы забудете указать точку в конце полного доменного имени, система добавит к нему имя домена. Сформированное таким образом имя будет иметь вид
    gingko.threeroomco.com.threeroomco.com
    .


    Листинг 18.2. Простой конфигурационный файл зоны

    threeroomco.com. IN SOA spruce.threeroomco.com. \

                            admin.threeroomco.com. (

                     2002043004 ; serial (последовательный номер)

                     3600       ; refresh (обновление)

                     600        ; retry (повторное обращение)

                     604800     ; expire (срок действия)

                     86400      ; default_ttl (время жизни)

                    )

    gingko.threeroomco.com. IN A     192.168.1.1

    birch                   IN A     192.168.1.2

    spruce                  IN A     192.168.1.3

    threeroomco.com.        IN A     192.168.1.4

    www                     IN CNAME gingko

    kelp                    IN CNAME jacques.pangaea.edu.

    @                       IN MX    10 birch.threeroomco.com.

    @                       IN MX    20 mail.pangaea.edu.

    @                       IN NS    spruce.threeroomco.com.

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

    имя IN тип_записи содержимое_записи

    Здесь под именем подразумевается имя компьютера или псевдоимя, связанное с адресом и применяемое для обратного преобразования. Идентификатор

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

    Внимание

    В различных конфигурационных файлах BIND точка с запятой интерпретируется по-разному: в файле

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

    Конфигурационный файл зоны обычно помещается в каталог

    /var/named
    , и ему присваивается имя, связанное с именем зоны. Обычно для такого файла выбирается имя
    db.имя-зоны
    или
    named.имя-зоны
    . Конфигурационному файлу можно присвоить любое имя, необходимо лишь, чтобы оно совпадало с именем, указанным в
    /etc/named.conf
    .

    Формирование описания зоны

    Для описания зоны используется запись SOA (Start of Authority — начало полномочий). В поле, определяющем тип записи, указано значение SOA. Наличие этой записи означает, что сервер имен поддерживает данный домен. В поле имени указывается имя зоны, совпадающее с именем, заданным в файле

    /etc/named.conf
    (не забывайте о завершающей точке!). Содержимое записи в данном случае состоит из трех частей.

    • Ведущий сервер имен. Первое имя (в листинге 18.2 это

    spruce.threeroomco.com
    .) представляет имя ведущего сервера имен для зоны. В листинге 18.2 за этим именем следует обратная косая черта (
    \
    ). Как и во многих конфигурационных файлах, этот символ означает, что продолжение записи находится на следующей строке. Часто в конфигурационных файлах зоны две строки объединяются в одну, и в этом случае обратная косая черта не нужна.

    • Почтовый адрес администратора. Второе имя (в листинге 18.2 это

    admin.threeroomco.com.
    ) определяет почтовый адрес администратора, отвечающего за поддержку зоны. Этот адрес представляется в несколько необычном формате. Чтобы его можно было использовать, надо заменить первую точку на символ
    @
    , так, адрес
    admin.threeroomco.com.
    будет преобразован в
    admin@threeromco.com
    .

    • Временные соотношения. Числовые значения, помещенные в скобки и располагающиеся в последующих строках, задают информацию о временных соотношениях. В листинге 18.2 приведены комментарии, поясняющие назначение соответствующих чисел. В строке, помеченной комментариями

    serial
    , содержится последовательный номер, который необходимо увеличивать при каждом редактировании файла. Ведомый сервер на основании данного значения определяет, следует ли обновлять свой конфигурационный файл. Многие администраторы задают последовательный номер как дату (в формате YYYYMMDD), сопровождая ее номером изменений, произведенных в течение текущего дня. В строке
    refresh
    задается время в секундах между обращениями ведомого сервера к ведущему. Значение 3600, приведенное в листинге 18.2, соответствует одному часу, следовательно, ведомый сервер будет каждый час проверять, не изменились ли параметры зоны на ведущем сервере. Значение
    retry
    представляет время в секундах, по истечении которого ведомый сервер предпримет повторную попытку обращения к ведущему серверу в случае, если первая попытка окажется неудачной. Значение
    expire
    также определяет время в секундах, в течение которого запись считается действительной, если ведомому серверу не удается связаться с ведущим. По истечении указанного времени запись не может быть использована для преобразования имен. Величина
    expire
    обычно соответствует одной неделе и, конечно же, должна превышать значение
    refresh
    . Значение
    default_ttl
    задает время жизни. В течение этого времени сервер DNS должен хранить информацию о результатах преобразования. Обычно величина времени жизни составляет от одного дня (86400 в листинге до одной недели (604800). Если IP-адреса вашей сети часто изменяются или если вы предполагаете, что вскоре придется произвести много изменений, имеет смысл задать время жизни порядка часа.

    Определение адресов и имен

    Большинство записей в конфигурационном файле зоны предоставляет информацию о соответствии между именами и IP-адресами. В поле имени, как правило, задается имя компьютера либо другое имя, связанное с IP-адресом. В поле имени также можно задавать символ

    @
    , заменяющий имя домена. Данный символ обычно используют в записях
    MX
    и
    NS
    (листинг 18.2). Эти записи не несут информации о взаимосвязи имен и адресов, а определяют специальные имена для всего домена.

    Ниже описаны основные типы записей.

    • 

    А
    . В записи
    A
    (address — адрес) в поле имени задается имя узла, а содержимое записи представляет собой IP-адрес. В качестве имени узла можно использовать полное доменное имя (с завершающей точкой), например
    gingko.threeroomco.com.
    , либо имя узла без указания имени домена, например
    birch
    или
    spruce
    . Можно также в качестве имени компьютера указать имя домена, так, например, в листинге 18.2 задано соответствие между именем
    threeroomco.com.
    и IP-адресом 192.168.1.4.

    • 

    CNAME
    . Запись
    CNAME
    (canonical name — каноническое имя) ставит в соответствие имени другое имя. В поле содержимого может быть указано либо полное доменное имя с завершающей точкой, либо имя узла без имени домена. Если вы задаете полное доменное имя, оно не обязательно должно принадлежать домену, определяемому посредством файла зоны. Например, в листинге 18.2 имя
    kelp
    связывается с компьютером в другом домене. Записи
    CNAME
    обычно применяются в тех случаях, когда важные IP-адреса могут изменяться без вашего участия. Например, если вы размещаете Web-страницу на внешнем компьютере, то можете связать имя
    www
    с именем этой машины. Если адрес внешнего компьютера изменится, ваша запись останется корректной.

    • 

    PTR
    . В листинге 18.2 записи типа
    PTR
    отсутствуют. Эти записи применяются для обратного преобразования и будут рассматриваться ниже.

    • 

    NS
    . Запись
    NS
    (name server — сервер имен) задает сервер имен для домена. В конфигурационном файле должна присутствовать хотя бы одна запись
    NS
    , указывающая на компьютер, заданный в качестве ведущего сервера имен в записи
    SOA
    . В поле имени данной записи указывается либо имя домена, либо символ
    @
    . IP-адрес компьютера, содержащего сервер имен, задается с помощью записи
    А
    .

    • 

    MX
    . Запись
    MX
    (mail exchanger — обмен почтой) предоставляет информацию о почтовом сервере для зоны. В поле имени этой записи указывается символ
    @
    либо имя домена. В поле содержимого записи содержатся два компонента: код приоритета и имя узла. Когда удаленный почтовый сервер собирается передать сообщение пользователю в домене (например,
    lorax@threeroomco.com
    ), он запрашивает у сервера имен записи MX. Затем уделенный сервер пытается связаться с компьютером, для которого указано наименьшее значение приоритета (в листинге 18.2 это
    birch.threeroomco.com.
    ). Если этот компьютер не доступен, удаленный сервер предпринимает попытку установить соединение с тем узлом, приоритет которого выражается следующим по величине значением (в листинге 18.2 это
    mail.pangaea.edu.
    ). Перебор компьютеров продолжается до тех пор, пока сообщение не будет доставлено либо пока не выяснится, что все узлы, указанные в записях
    MX
    , не доступны. Очевидно, что компьютер, имя которого задано в записи
    MX
    , должен быть настроен для приема почты. Вопросы передачи почтовых сообщений будут рассматриваться в главе 19.

    Совет

    Некоторые типы записей указывают на компьютеры, расположенные за пределами домена. Так, например, вы можете задать в качестве почтового сервера узел внешней сети.

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

    Конфигурация зоны для обратного преобразования

    В листинге указано несколько зон, некоторые из них предназначены для обратного преобразования. Эти зоны позволяют серверу DNS определять доменное имя по IP-адресу. Для того чтобы это стало возможным, необходимо создать псевдодомен

    in-addr.arpa
    . В файле
    /etc/named.conf
    содержатся указатели на конфигурационные файлы, описывающие подмножества этого домена. Поскольку имя домена уточняется при движении справа налево, а IP-адрес уточняется по мере движения слева направо, в имени псевдодомена адрес должен быть указан в обратном порядке. Например, имя зоны для диапазона адресов 192.168.1.0/24 будет иметь вид
    1.168.192.in-addr.arpa
    .

    Зона для обратного преобразования, или обратная зона, настраивается подобно зоне прямого преобразования. Конфигурационный файл зоны содержит записи

    SOA
    и
    NS
    , но основное место в нем занимают записи
    PTR
    . При обратном преобразовании не возникает необходимость в записях
    MX
    , А и
    CNAME
    . В листинге 18.3 содержится конфигурационный файл обратной зоны, соответствующий файлу, приведенному в листинге 18.2.

    В поле имени записи PTR указывается либо сокращенный вариант адреса (например, 1 для 192.168.1.1), либо полный IP-адрес, расположенный в обратном порядке и сопровождаемый именем

    in-addr.arpa
    . В листинге 18.3 продемонстрированы оба подхода. В поле содержимого включается полное доменное имея с точкой в конце. Поскольку обратная зона отличается от зоны, используемой для прямого преобразования, попытка задать в поле содержимого сокращенное имя приведет к некорректному преобразованию, например, при указании
    birch
    вместо
    birch.threeroomco.com.
    будет получен результат
    birch.1.168.192.in-addr.arpa
    .


    Листинг 18.3. Пример конфигурационного файла обратной зоны

    1.168.192.in-addr.arpa. IN SOA spruce.threeroomco.com. \

                                   admin.threeroomco.com. (

                            2002043004 ; serial

                            3600       ; refresh

                            600        ; retry

                            604800     ; expire

                            86400      ; default_ttl

                            )

    1                         IN PTR gingko.threeroomco.com.

    2.1.168.192.in-addr.arpa. IN PTR birch.threeroomco.com.

    3.1.168.192.in-addr.arpa. IN PTR spruce.threeroomco.com.

    4.1.168.192.in-addr.arpa. IN PTR threeroomco.com.

    @                         IN NS  spruce.threeroomco.com.

    Настройка сервера, предназначенного только для кэширования

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

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

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

    Основной конфигурационный файл сервера, предназначенного лишь для кэширования, имеет тот же формат, что и файл, представленный в листинге 18.1, однако в нем присутствует лишь определение зоны, предназначенной для обратного преобразования

    localhost
    (
    0.0.127.in-addr.arpa
    ), и корневой зоны (
    .
    ). Даже эти зоны не являются обязательными.

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

    forwarders
    и
    forward
    , расположенные в разделе
    options
    . Опция
    forwarders
    должна содержать список серверов DNS провайдера. BIND использует эти серверы для выполнения преобразования. Вместо выражения
    forward first
    , приведенного в листинге 18.1, необходимо указать
    forward only
    . В этом случае сервер прекратит попытки преобразования, если серверы, указанные в качестве значения
    forwarders
    , окажутся не доступными.

    Внимание

    Если вы включите в состав конфигурационного файла корневую зону и зададите опцию

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

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

    dnscache
    или
    pdnsd
    .

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

    Взаимодействие с сервером DHCP

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

    birch.threeroomco.com
    должен соответствовать адрес 192.168.1.2. Для этого вам надо изменить как конфигурационный файл сервера DHCP, так и конфигурационные файлы зон сервера DNS, используемых для прямого и обратного преобразования. При этом приходится следить за тем, чтобы значения в обоих файлах совпадали. Несмотря на то что данное решение реализуется относительно просто, для больших доменов оно неприемлемо.

    В главе 5 рассматривалась конфигурация сервера DHCP для совместной работы с сервером DNS. Чтобы соответствующим образом настроить BIND, вам надо внести изменения в файл

    named.conf
    . Вы должны добавить в определение соответствующей зоны опцию
    allow-update
    . В результате определение зоны примет следующий вид:

    zone "threeroomco.com" {

     type master;

     file "named.threeroomco.com";

     allow-update { 192.168.1.1; }

    };

    Теперь BIND будет принимать информацию об IP-адресах от компьютера с адресом 192.168.1.1. Как нетрудно догадаться, это должен быть адрес узла сети, на котором выполняется сервер DHCP. Аналогичные изменения надо внести в определение обратной зоны.

    Внимание

    Если ваш сервер DNS доступен из Internet или если вы не полностью доверяете пользователям локальной сети, получение информации об обновлении DNS-данных представляет угрозу безопасности системы. Хакер может взломать сервер DHCP или, фальсифицировав адрес, внести необходимые ему изменения в конфигурацию сервера DNS. Чтобы уменьшить опасность атаки, желательно разместить серверы DNS и DHCP на одном компьютере и разрешить обновление только с локального узла (127.0.0.1).

    Запуск и тестирование сервера

    Для запуска сервера DNS можно применить любой из способов, рассмотренных в главе 4, но чаще всего сервер DNS запускается с помощью сценария SysV или локального сценария запуска. Запуск сервера DNS посредством суперсервера снизит скорость преобразования имен.

    Для тестирования сервера имен хорошо подходит инструмент

    host
    . Программа
    host
    поставляется в составе большинства версий Linux; обычно она располагается в пакете
    bind-utils
    . Данная утилита передает указанному серверу DNS запросы на преобразование имен. В простейшем случае
    host
    взаимодействует с сервером, указанным в файле
    /etc/resolv.conf
    на том компьютере, на котором она выполняется. Для вызова данной программы надо ввести ее имя, а также имя узла либо IP-адрес.

    $ host www.awl.com

    www.awl.com is a nickname for awl.com

    awl.com has address 165.193.123.224

    В данном примере первая строка, отображаемая программой, сообщает о том, что

    www.awl.com
    представляет собой каноническое имя (заданное с помощью записи
    CNAME
    ) узла
    awl.com
    . Этот компьютер имеет адрес 165.193.123.224. Такой тест подтверждает, что сервер DNS может преобразовывать имена внешних узлов. Если вы сконфигурировали сервер для поддержки собственного домена, вы должны указать при проверке локальные имя и адрес. Убедитесь в том, что сервер выполняет как прямое, так и обратное преобразование. При необходимости вы также можете просмотреть записи требуемого типа, задавая при вызове утилиты опцию
    -t
    . Например, чтобы проверить записи
    MX
    для домена, вам потребуется выполнить следующую команду:

    $ host -t MX awl.com

    awl.com mail is handled by 100 mailhost.uu.net.

    awl.com mail is handled by 10 oldtms702.pearsontc.com.

    awl.com mail is handled by 20 oldtms701.pearsontc.com.

    Данная проверка показывает, что в домене com определены три почтовых сервера:

    oldtms702.pearsontc.com
    (приоритет 10),
    oldtms701.pearsontc.com
    (приоритет 20) и
    mailhost.uu.net
    (приоритет 100). Если вы хотите указать сервер DNS для тестирования, вам надо при вызове программы задать имя или IP-адрес этого сервера.

    $ host www.awl.com spruce

    Using domain server:

    Name: spruce.threeroomco.com

    Address: 192.168.1.3

    Aliases:


    www.awl.com is a nickname for awl.com

    awl.com has address 165.193.123.224

    При этом выводятся те же данные, что и в предыдущем примере, кроме того, отображается подтверждение того, что программа

    host
    передала запрос конкретному серверу DNS.

    Дополнительную информацию о программе

    host
    вы можете найти в справочной системе. Для тестирования сервера также можно использовать утилиту
    nslookup
    . Она выполняет практически те же функции, что и
    host
    , но в настоящее время считается устаревшей.

    Резюме

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

    Глава 19

    Передача почты: протокол SMTP

    В главе 11 рассматривались протоколы POP и IMAP, которые частично решают задачу доставки писем. Эти и другие протоколы получения почты позволяют пользователю копировать адресованные ему сообщения с центрального сервера на свой компьютер. Для того чтобы обеспечить доставку писем, надо решить еще две задачи: копирование сообщений на центральный почтовый сервер и передачу их адресатам. Обе эти задачи решаются посредством протоколов передачи почты. При использовании этих протоколов сообщения передаются по инициативе сервера. Взаимосвязь между протоколами передачи и получения почты рассматривалась в главе 11.

    Из протоколов передачи почты в настоящее время наиболее популярным является SMTP (Simple Mail Transfer Protocol — простой протокол передачи почты). Все письма, передаваемые в среде Internet, проходят как минимум через один сервер SMTP. Обычно серверы получения и передачи почты выполняются на одном и том же компьютере, так что письмо, полученное сервером SMTP, может быть в любой момент передано на пользовательский компьютер. Если в системе Linux предполагается обработка почты, сервер SMTP выполняет при этом основную роль. В состав каждого дистрибутивного пакета Linux входит по меньшей мене один сервер SMTP, однако различные системы содержат разные серверы. В данной главе рассматриваются наиболее популярные в настоящее время серверы SMTP:

    sendmail
    , Exim и Postfix. Кроме того, в этой главе пойдет речь об инструменте Procmail, часто используемом совместно с сервером SMTP. Прежде чем вплотную приступить к настройке сервера SMTP, необходимо рассмотреть доступные программы, поддерживающие функционирование подобного сервера, и вопросы настройки домена для работы сервера.

    Часто для обеспечения работы сервера в сети достаточно внести лишь минимальные изменения в состав его конфигурационного файла, но в некоторых случаях приходится выполнять сложные действия по настройке сервера. Для тех, кому необходима дополнительная информация о серверах SMTP, можно порекомендовать следующие книги: Косталес (Costales) и Эллмен (Allman) Sendmail (O'Reilly, 1997), Хант (Hunt) Linux Sendmail Administration (Sybex, 2001), Хэзел (Hazel) Exim: The Mail Transfer Agent (O'Reilly, 2001), Блюм (Blum) Posfix (Sams, 2001), Стилл (Sill) The qmail Handbook (APress, 2001) и Маккарти (McCarthy) The Procmail Companion (Addison Wesley, 2001).

    Использование сервера SMTP

    Серверы SMTP часто называют агентами передачи почты (MTA — mail transfer agent). В процессе обмена почтой подобная программа может выступать как в роли клиента, так и в роли сервера. Сервер SMTP может получить сообщение, переданное другим сервером, поддерживающим этот протокол. Сервер хранит полученные сообщения на локальном компьютере, а при необходимости может передать их другому серверу SMTP. Возможные варианты использования сервера SMTP в системе Linux описаны ниже.

    • Получение почты. Чаще всего сервер SMTP выполняет функции центрального почтового сервера сети. Письма, полученные сервером SMTP, могут быть просмотрены с помощью специальных программ (например,

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

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

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

    root
    .

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

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

    Программы, реализующие сервер SMTP в системе Linux

    • 

    sendmail
    . В составе системы Linux часто поставляется наиболее популярный в настоящее время почтовый сервер
    sendmail
    . Этот пакет предоставляет обширные возможности и многие программы по умолчанию считают, что он установлен в системе. Для обеспечения совместимости в состав некоторых пакетов даже включается исполняемая программа
    sendmail
    . Конфигурационный файл
    sendmail
    имеет сложный формат, и это является причиной того, что некоторые пользователи отдают предпочтение альтернативным пакетам. Web-узел
    sendmail
    расположен по адресу
    http://www.sendmail.org
    .

    • Exim. Формат конфигурационного файла данного сервера проще, чем у

    sendmail
    , кроме того, Exim поддерживает разнообразные правила фильтрации почты. Этот сервер используется в Debian и системах, созданных на ее основе. Адрес Web-узла Exim —
    http://www.exim.org
    .

    • Postfix. Как

    sendmail
    , так и Exim реализованы в виде большой "монолитной" программы. В отличие от этих продуктов, Postfix имеет модульную структуру. Это означает, что частные задачи, возникающие перед почтовым сервером, решаются с помощью отдельных небольших программ. При этом повышается как производительность сервера, так и уровень безопасности системы. Модульная структура и простота конфигурационного файла являются основными преимуществами Postfix по сравнению с
    sendmail
    . Данный сервер используется в качестве сервера по умолчанию в системе Mandrake. Дополнительную информацию о Postfix можно получить, обратившись по адресу
    http://www.postfix.org
    .

    • 

    qmail
    . Подобно Postfix,
    qmail
    представляет собой модульный сервер, разработчики которого ставили перед собой задачу обеспечить высокую производительность и повышенный уровень защиты. Структура конфигурационного файла
    qmail
    проще, чем у сервера
    sendmail
    , но, в отличие от Exim и Postfix, данный сервер плохо совместим с
    sendmail
    . Поэтому замена
    sendmail
    на
    qmail
    представляет собой достаточно сложную задачу. Несмотря на то что
    qmail
    по популярности уступает только
    sendmail
    , этот сервер редко включается в дистрибутивные пакеты Linux в качестве сервера по умолчанию, поэтому в данной главе он не будет подробно рассматриваться. Web-узел
    qmail
    расположен по адресу
    http://www.qmail.org
    .

    Помимо перечисленных выше, в системе Linux могут использоваться и другие почтовые серверы. В качестве примера можно привести Smail (

    http://www.gnu.org/software/smail/smail.html
    ), Courier (
    http://www.courier-mta.org
    ) и OpenMail (
    http://www.openmail.com/cyc/om/00/
    ). Многие из почтовых серверов распространяются в исходных кодах, но некоторые доступны лишь на коммерческой основе. Большинство пользователей отдают предпочтение упомянутым выше четырем серверам:
    sendmail
    , Exim, Postfix и
    qmail
    . Все четыре продукта представляют собой мощные программы, способные обслуживать даже большие домены.

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

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

    sendmail
    необходимо установить другой сервер. Проще всего заменить
    sendmail
    сервером Exim или Postfix. Несмотря на различия в структуре конфигурационных файлов, программы, непосредственно обращающиеся к
    sendmail
    , обычно хорошо взаимодействуют с Exim и Postfix, а формат очереди почтовых сообщений этих двух программ совпадает с форматом очереди
    sendmail
    . (Как и
    sendmail
    , Exim и Postfix используют формат
    mbox
    , т.е. хранят все письма в одном файле.) Заменить
    sendmail
    сервером
    qmail
    гораздо труднее, так как qmail по умолчанию поддерживает
    maildir
    (формат, в котором сообщения хранятся как отдельные файлы). Поэтому, чтобы установить
    qmail
    вместо
    sendmail
    , надо изменить стандартную конфигурацию
    qmail
    или заменить почтовые программы в вашей системе (в том числе и серверы получения почты, рассмотренные в главе 11.

    Настройка домена для использования почтового сервера

    Многие почтовые серверы получают почту с внешних компьютеров. Существуют два способа адресации почтового сервера.

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

    mail.threeroomco.com
    , то почтовый адрес пользователя будет выглядеть так:
    jennie@mail.threeroomco.com
    . В этом случае для сервера имен потребуется только запись А, связывающая имя почтового сервера с его адресом. Недостаток подобного способа состоит в том, что адрес получается несколько длиннее, чем он мог бы быть.

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

    MX
    . Если в почтовом адресе указано только имя домена, запись
    MX
    позволят направить это письмо на конкретный компьютер. Предположим, например, что в конфигурационном файле сервера имен, управляющего доменом
    threeroomco.com
    , содержится запись
    MX
    , указывающая на компьютер
    mail.threeroomco.com
    . В этом случае письмо, адресованное пользователю
    jennie@threeroomco.com
    , будет доставлено на узел
    mail.threeroomco.com
    . Указав в конфигурационном файле сервера DNS несколько записей
    MX
    , администратор может организовать использование резервных почтовых серверов. По сравнению с непосредственной адресацией данный способ несколько усложняет администрирование домена.

    Формат конфигурационного файла сервера DNS, в частности структура записей

    MX
    , рассматривалась в главе 18. Если вы устанавливаете почтовый сервер по адресу
    mail.threeroomco.com
    , соответствующая запись
    MX
    будет выглядеть следующим образом:

    @ IN MX 10 mail.threeroomco.com.

    Эта строка содержится в конфигурационном файле зоны, имя которого указано в файле

    /var/named
    . Символ
    @
    в начале строки означает, что запись применима ко всему домену. Идентификатор
    IN
    представляет собой стандартный компонент записи, описывающей домен Internet, a
    MX
    определяет тип записи. Число 10 представляет приоритет записи. Сервер, осуществляющий передачу почты, сначала старается установить соединение с почтовыми серверами, которым соответствуют малые значения приоритетов, а если очередной сервер не отвечает, он обращается к компьютеру с более высоким приоритетом. Это позволяет использовать в составе домена несколько почтовых серверов. В конце записи указывается полное доменное имя почтового сервера, завершающееся точкой.

    На заметку

    Передавая письма на почтовый сервер вашей сети, внешним пользователям достаточно указать лишь имя домена. Однако локальные пользователи при настройке своих клиентских программ должны задавать полное имя сервера SMTP.

    Передача данных с помощью протокола SMTP

    Для того чтобы понять материал данной главы, надо хотя бы в общих чертах представлять себе принцип передачи почтовых сообщений с помощью протокола SMTP. В частности, необходимо знать различия между заголовками конверта (envelope header), заголовками сообщения (message header) и телом сообщения (message data). Заголовком конверта считаются поля

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

    В отличие от заголовка конверта, заголовок сообщения входит в состав письма. Нередко этот заголовок составляет значительную часть сообщения, доставляемого адресату. Среди них также присутствуют поля

    From:
    и
    To:
    , но полагаться на их значения нельзя, так как они могут быть фальсифицированы. К заголовку сообщения относятся также поле
    Received:
    , которое отражает путь, проделанный письмом, и поле
    Subject:
    , отображаемое большинством программ просмотра писем.

    На заметку

    В заголовке сообщения значение поля отделяется от его имени двоеточием. В заголовке конверта двоеточие обычно не используется. Если сервер SMTP использует формат

    maildir
    , данные, содержащиеся в заголовке конверта, хотя и используются при выполнении SMTP-транзакции, но не сохраняются в сообщении. Некоторые серверы могут быть сконфигурированы так, чтобы адреса, указанные в полях
    From
    и
    То
    заголовка конверта, сохранялись в составе поля
    Received:
    заголовка сообщения. Это помогает в тех случаях, когда надо выяснить причину возникновения проблем при передаче писем.

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

    telnet
    . (Как нетрудно догадаться, в обычной SMTP-транзакции программа
    telnet
    не участвует).


    Листинг 19.1. Пример SMTP-сеанса

    $ telnet louiswu.rodsbooks.com

    25 Trying 192.168.1.5...

    Connected to louiswu.rodsbooks.com.

    Escape character is '^]'.

    220 louiswu ESMTP Exim 3.12 #1 Wed, 30 Oct 2002 12:01:29 -0500

    HELO nessus.rodsbooks.com

    250 louiswu Hello nessus.rodsbooks.com [192.168.1.3]

    MAIL FROM:<rodsmith@nessus.rodsbooks.com>

    250 <rodsmith@nessus,rodbooks.com> is syntactically correct

    RCPT TO:<rodsmith@louiswu.rodsbooks.com>

    250 <rodsmith@louiswu.rodsbooks.com> is syntactically correct

    DATA

    354 Enter message, ending with "." on a line by itself

    From: <rodsmith@nessus.rodsbooks.com>

    To: <rodsmith@louiswu.rodsbooks.com>

    Subject: A Sample SMTP Session


    This is the text of the message.

    .

    250 OK id=15z87H-OOOOCX-00

    QUIT

    221 louiswu closing connection

    Connection closed by foreign host.

    В большинстве случаев SMTP-соединение начинается по инициативе клиентской программы, в роли которой выступает программа подготовки писем или другой сервер SMTP (в сеансе, представленном в листинге 19.1, действия клиентской программы имитирует пользователь с помощью программы

    telnet
    ). Клиент объявляет о своем намерении начать взаимодействие, передавая серверу команду
    HELO
    или
    EHLO
    . Затем с помощью команд
    MAIL FROM:
    и
    RCPT ТО:
    клиент задает заголовки конверта
    From
    и
    То
    . В ответ на каждую из этих команд сервер SMTP передает числовой код, посредством которого он сообщает результаты обработки очередной команды. Текст, следующий за числовым кодом, предназначен для пользователя, который следит за ходом взаимодействия. Команда
    DATA
    указывает на то, что передающий компьютер готов пересылать тело сообщения. Получив ответ от сервера, клиент начинает передачу заголовков и данных сообщения. (Заголовки сообщения передавать не обязательно. Если исключить их из листинга 19.1, письмо все равно будет доставлено.) Заголовки отделяются от тела сообщения пустой строкой. Строка, содержащая только точку, является признаком окончания сообщения.

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

    • Идентификация отправителя. Передающая система передает свой адрес принимающему компьютеру различными способами, в частности, адрес содержится в составе команд

    HELO
    и
    MAIL FROM
    , а также поля заголовка
    From:
    . Следует заметить, что если передающая система работает в режиме ретранслятора, в команде
    MAIL FROM
    и в поле заголовка будет содержаться адрес другого компьютера. Так или иначе, IP-адрес отправителя становится известен принимающей системе; в листинге 19.1 этот адрес указывается в ответе на команду
    HELO
    .

    • Заголовки конверта и сообщения. В листинге 19.1 заголовки конверта и сообщения соответствуют друг другу, но в других случаях ситуация может быть иной. Если вы получите сообщение, адресованное не вам, причина этого может состоять в том, что в поле

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

    • Возможность отказаться от сообщения. Принимающий сервер SMTP может прекратить работу по доставке письма на любом этапе, начиная с установки соединения и заканчивая обработки сообщения после его получения. Чаще всего управление доставкой сообщения осуществляется после ответа на команду

    RCPT TO:
    , но существует также возможность контроля на более ранних этапах взаимодействия. Если получатель прерывает соединение перед получением команды
    RCPT
    некоторые отправители предпринимают повторную попытку передачи письма, что увеличивают нагрузку на сеть. Отказ от обработки после передачи содержимого письма имеет свой недостаток — если объем сообщения велик, такой подход также приведет к неоправданному увеличению трафика в сети.

    • Предоставление информации о сервере. При проведении сеанса, приведенного в листинге 19.1, отправитель получает лишь частичную информацию о сервере и никаких других данных. В данном примере сервер объявляет себя как Exim 3.12. Некоторые программы позволяют скрыть номер версии; если в средствах защиты сервера имеются недостатки, такая мера повышает безопасность системы. Сохраняя в секрете номер реализации сервера, вы лишаете хакера информации о возможных путях незаконного проникновения в систему. В листинге 19.1 в ответ на команды

    MAIL FROM:
    и
    RCPT TO:
    принимающий сервер возвращает код 250 и сообщение
    is syntactically correct
    . Некоторые серверы могут быть сконфигурированы так, что в случае, если в системе отсутствует учетная запись пользователя, которому адресовано письмо, взаимодействие с передающим компьютером прекратится после обработки команды
    RCPT TO:
    . Такая конфигурация предоставляет информацию, полезную для злоумышленника: посредством команд почтового сервера он может подобрать корректное имя пользователя. В этом примере сервер Exim не предоставляет подобных данных, однако это порождает другую проблему. Если в письме указан несуществующий пользователь, сервер должен обработать, а затем проигнорировать письмо.

    Специальные функции сервера SMTP

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

    Маскировка адреса

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

    hostname
    . Это имя сервер указывает при передаче команд
    HELO
    и
    MAIL FROM:
    , оно же включается в поле
    From:
    заголовка сообщения. Кроме того, сервер сообщает имя узла, передавая другим программам ответы на полученные от них команды.

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

    franklin.threeroomco.com
    . Возможно, вы захотите, чтобы сообщения выглядели как отправленные не с конкретного компьютера, а из домена
    threeroomco.com
    . (Это может понадобиться в том случае, если вы используете для отправки и получения почты различные серверы, или для того, чтобы упростить перенос почтовых серверов на другие компьютеры.) Не исключено, что вы захотите изменить имя узла в сети, защищенной брандмауэром, чтобы сообщения, переданные в ответ, адресовались на компьютер, доступный извне. Сделать это можно, используя средства маскировки адресов. В результате их применения сервер, расположенный на компьютере
    franklin.threeroomco.com
    , будет объявлять себя как
    threeroomco.com
    . Маскировку адресов поддерживают все серверы, рассматриваемые в данной главе, но детали настройки различаются в разных продуктах. Некоторые серверы предоставляют в распоряжение администратора несколько опций, позволяющих настраивать команды, приветственные сообщения и заголовки для работы с другим именем, а в других серверах настройка осуществляется с помощью одной опции. В одних серверах относительно просто изменить заголовки существующих сообщений для отображения нового адреса, а при работе с другими решить данную задачу достаточно сложно.

    На заметку

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

    Обработка локальных сообщений

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

    franklin.threeroomco.com
    . По умолчанию сервер SMTP настраивается для получения почты, адресованной пользователям компьютера
    franklin.threeroomco.com
    . Если при настройке домена вы указали запись
    MX
    , которая указывает на этот компьютер, он будет обрабатывать письма для пользователей домена
    threeroomco.com
    . Кроме того, вам, возможно, понадобится настроить почтовый сервер для обработки почты, направленной на другие компьютеры и в другие домены. В этом случае вам придется добавить к списку доменов, в которых сервер должен поддерживать передачу локальной почты, домен
    fourroomco.com
    .

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

    Ретрансляция писем

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

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

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

    На заметку

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

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

    Совет

    Если вы сконфигурировали операционную систему для работы в сетях различных провайдеров, передача почты может быть затруднена. Большинство провайдеров настраивают почтовые серверы так, чтобы они могли перенаправлять только письма, полученные из своей сети. Таким образом, если вы настроите свой сервер SMTP для передачи сообщений почтовому серверу одного из провайдеров, серверы остальных провайдеров останутся для вас недоступными. Чтобы решить эту проблему, надо сформировать несколько конфигурационных файлов сервера SMTP (по одному для каждого провайдера) и включить в сценарий установки PPP-соединения команду, которая будет выполнять копирование требуемого файла в стандартный конфигурационный файл и перезапускать сервер. Предположим, что вы работаете с двумя провайдерами и используете

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

    Настройка сервера для борьбы со спамом

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

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

    Блокирование поступающих рекламных сообщений

    Вас, как системного администратора, больше всего должно заботить, чтобы спам не проник в вашу сеть. Для контроля за спамом разработаны различные способы. Наиболее популярные из них описаны ниже.

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

    • Списки IP-адресов. В настоящее время некоторые организации публикуют списки IP-адресов, которые можно использовать для блокирования нежелательных почтовых сообщений. В подобном списке содержатся адреса спамеров, открытых ретрансляторов (т.е. почтовых серверов, предоставляющих всем желающим возможность передавать через них письма), компьютеров, подвергшихся взлому и используемых для распространения спама, и т.д. Многие почтовые серверы настроены для работы с одним из таких списков. Письма, переданные с адресов, указанных в списке, отвергаются. Информация о некоторых из списков IP-адресов, применяемых для борьбы со спамом, приведены в табл. 19.1.

    • Сравнение с шаблоном сообщений, обработанных почтовым сервером. Система Procmail, которая будет описываться далее в этой главе, может быть использована для проверки писем на соответствие заданным шаблонам. На базе Procmail построены сложные системы, предназначенные для борьбы со спамом, например SpamBouncer (

    http://www.spambouncer.org
    ). При необходимости вы можете самостоятельно сформировать фильтры Procmail.

    • Сравнение с распределенными шаблонами. Одним из последних инструментов, предназначенных для борьбы со спамом, является Vipul's Razor (

    http://razor.sourceforge.net
    ). Эта система использует базу данных SHA-кодов (Secure Hash Algorithm — защищенный алгоритм хеширования) сообщений спама. Вы можете сконфигурировать свой почтовый сервер для вычисления SHA-кодов полученных писем и блокировать рекламные сообщения на основании сравнения их с кодами Vipul's Razor.


    Таблица 19.1. Списки IP-адресов, используемые для борьбы со спамом

    Название списка URL Адрес сервера Описание
    Dial-Up List (DUL)
    http://mail-abuse.org/dul/
    dialups.mail-abuse.org
    В данный список помещаются IP-адреса, выделяемые провайдерами для поддержки PPP-соединений. Считается, что, зарегистрировавшись в сети провайдера, пользователь не должен применять собственный почтовый сервер, так как он может воспользоваться сервером провайдера. Попытки передать письма, минуя почтовый сервер провайдера, часто предпринимают распространители спама
    Realtime Blackhole List (RBL)
    http://mail-abuse.org/rbl/
    blackholes.mail-abuse.org
    В этот список включаются адреса серверов, замеченных в распространении спама, и серверов, конфигурация которых позволяет спамерам воспользоваться их услугами
    Relay Spam Stopper (RSS)
    http://mail-abuse.org/rss/
    relays.mail-abuse.org
    В данном списке содержатся адреса серверов, замеченных в распространении спама, а также серверов, работающих как открытые ретрансляторы. Проверка таких серверов выполняется в полуавтоматическом режиме
    Open Relay Database (ORDB)
    http://www.ordb.org
    relays.ordb.org
    Данный список выполняет те же функции, что и RSS, но для принятия решения о занесении в этот список адреса сервера используются менее строгие критерии. В результате при использовании этого списка оказываются заблокированными многие корректные сообщения
    RFC Ignorant
    http://www.ifc-ignorant.org
    Адреса указаны на Web- узле Организация RFC Ignorant поддерживает несколько списков IP-адресов серверов, которые не соответствуют требованиям стандартов, изложенных в документах RFC. часто используют некорректно настроенные программы, поэтому данные списки могут быть использованы для борьбы со спамом

    Для блокирования большей части спама достаточно использовать один или два способа, например, один из списков IP-адресов и сравнение с шаблонами сообщений, обработанных почтовым сервером. Основная проблема борьбы со спамом состоит в том, что в настоящее время не существует технологии, позволяющей гарантированно распознать спам и отделить его от обычных сообщений. Большинство способов блокирования основаны на тех или иных обобщениях. Эти способы позволяют отвергать сообщения спама, но вместе с ними блокируются также некоторые корректные сообщения. Этот эффект принято называть ложными срабатываниями (false positive). Иногда с потерей некоторых писем можно смириться, в других случаях ложные срабатывания не допустимы. Для того чтобы уменьшить риск блокирования корректных сообщений, необходимо выполнять проверку на базе четко определенных критериев. Среди списков IP-адресов наименьшее число ложных срабатываний обеспечивают RBL и RSS. Списки IP-адресов RBL, RSS и DUL, поддерживаемые MAPS (Mail Abuse Prevention System — система борьбы с захватом почтовых программ), распространяются по подписке.

    Как предотвратить использование вашего сервера для передачи спама

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

    Если на отдельных рабочих станциях в сети установлены почтовые серверы, необходимо следить за тем, чтобы они не были сконфигурированы как открытые ретрансляторы (open relay). Открытым ретранслятором называется почтовый сервер, который принимает сообщения от любого компьютера, подключенного к Internet, и передает их по назначению. Многие дискуссии, посвященные использованию

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

    Чтобы поверить, не является ли почтовый сервер открытым ретранслятором, следует с компьютера, на котором расположен этот сервер, обратиться с помощью

    telnet
    по адресу
    relay-test.mail-abuse.org
    . В результате удаленный компьютер обратится к вашему почтовому серверу и начнет проверку. Ход тестирования отобразится на экране, а в конце будет выведено сообщение о состоянии вашего сервера. Следует заметить, что этот тест не является исчерпывающим; существует конфигурация, не идеальная с точки зрения безопасности, не выявляемая при проверке.

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

    http://mail-abuse.org/tsi/
    .

    Настройка
    sendmail

    В настоящее время sendmail является самым популярным почтовым сервером в мире. Эта программа входит в состав различных дистрибутивных пакетов Linux, в том числе Caldera, Red Hat, Slackware, SuSE и TurboLinux. Несмотря на то что в Debian и Mandrake по умолчанию устанавливаются другие серверы SMTP,

    sendmail
    также входит в комплект поставки и при необходимости может заменить существующий почтовый сервер. Как было сказано ранее, в настоящее время доступна версия 8.12.2
    sendmail
    , но некоторые дистрибутивные пакеты Linux до сих пор поставляются с 8.11.x и более ранними версиями.

    Формат конфигурационного файла

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

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

    Основной конфигурационный файл

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

    Обойти трудности, вызванные сложным форматом

    sendmail.cf
    , можно, создавая конфигурационный файл в простом и понятном формате, а затем преобразуя его с помощью утилиты
    m4
    в файл
    sendmail.cf
    . Исходный файл, предназначенный для обработки программой заканчивается символами
    .mc
    , но конкретное его имя и расположение может изменяться в зависимости от версии операционной системы. В Red Hat это файл
    /etc/sendmail.mc
    , в Slackware —
    /usr/src/sendmail/cf/cf/linux.smtp.mc
    , а в SuSE —
    /etc/mail/linux.mc
    . Независимо от имени, исходный файл
    m4
    гораздо меньше и удобнее для восприятия, чем создаваемый на его основе файл
    .cf
    . Например, если в системе SuSE 7.1 файл
    sendmail.cf
    содержит 1669 строк, то файл
    linux.m
    c состоит всего из 221 строки, причем основную часть файла занимают комментарии (строки комментариев начинаются символами
    dnl
    ).

    Для того чтобы создать файл

    sendmail.cf
    из файла
    m4
    , необходимо вызвать программу
    m4
    и перенаправить ввод и вывод. В системе SuSE этот вызов имеет следующий вид:

    # m4 < /etc/mail/linux.mc > /etc/sendmail.cf

    На заметку

    В некоторых версиях Linux перед тем как приступать к созданию файла

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

    Внимание

    Не следует изменять рабочий вариант файла

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

    После изменения конфигурационного файла необходимо перезапустить

    sendmail
    . Во многих версиях Linux
    sendmail
    запускается с помощью сценария SysV, поэтому для перезапуска программы можно использовать опцию
    restart
    этого сценария.

    Большинство записей в конфигурационном файле

    m4
    задается в следующем формате:

    ИМЯ_ХАРАКТЕРИСТИКИ(`опция1'[, `опция2' [,...])

    Имя характеристики — это некоторое содержательное имя, например

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

    Внимание

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

    sendmail.cf
    будет сформирован некорректно.

    Помимо

    sendmail.cf
    , программа
    sendmail
    также использует при работе другие файлы.

    • 

    access.db
    . Этот двоичный файл создается на базе текстового файла
    access
    . Файл
    access.db
    определяет, какие компьютеры могут обращаться к программе
    sendmail
    . Конфигурация
    sendmail
    в качестве ретранслятора во многом зависит от содержимого этого файла. Многие сценарии запуска
    sendmail
    вызывают
    makemap
    , и если файл
    access
    изменился с момента последнего создания
    access.db
    , автоматически генерируется новый файл
    access.db
    .

    • 

    aliases.db
    . Этот двоичный файл также создается на базе текстового файла с аналогичным именем (
    aliases
    ). Он определяет псевдонимы — имена, эквивалентные другим именам. Так, например, во многих дистрибутивных пакетах для пользователя
    root
    определяется псевдоним
    postmaster
    . Возможно, вы захотите создать псевдоним для
    root
    , чтобы просматривать почту суперпользователя посредством обычной учетной записи. Подобно файлу
    access.db
    , при выполнении многих сценариев запуска файл
    aliases.db
    генерируется автоматически.

    Рассмотренные выше файлы обычно размещаются в каталоге

    /etc
    или
    /etc/mail
    . Кроме того, в этом каталоге находятся другие файлы баз данных, определяющие особенности работы
    sendmail
    .

    Маскировка адреса sendmail

    Если вы хотите, чтобы сервер SMTP объявлял себя посредством имени, отличающегося от имени компьютера, на котором он выполняется, вам необходимо сконфигурировать сервер для выполнения маскировки адреса. Принцип маскировки адреса был описан выше в этой главе. Для активизации механизма маскировки адреса вам надо включить в исходный файл m4 следующие две строки:

    MASQUERADE_AS(`требуемый_адрес')

    FEATURE(masquerade_envelope)

    Запись

    MASQUERADE_AS
    активизирует базовые средства маскировки, которые включают адрес в поле заголовка
    From:
    в случае, если пользовательская программа не задает имя узла. Поскольку большинство почтовых программ корректно заполняет это поле, данное средство в основном используется, если пользовательская программа сконфигурирована неправильно. Запись
    FEATURE(masquerade_envelope)
    изменяет поле
    From:
    , даже если в нем был задан адрес узла.

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

    MASQUERADE_DOMAIN(`домен-источник')

    FEATURE(`limited_masquerade')

    Эти опции сообщают

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

    Настройка
    sendmail
    для получения почты

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

    sendmail
    должна распознавать локальные адреса. Почтовый сервер
    sendmail
    поддерживает файл, в котором указываются адреса локальных узлов. В различных дистрибутивных пакетах для данного файла используются разные имена. В Red Hat это файл
    /etc/mail/local-host-names
    , а в SuSE —
    /etc/sendmail.cw
    . Если вам не удается обнаружить его, найдите в
    sendmail.cf
    запись, которая начинается символами
    Fw
    . Эта запись содержит имя файла, в котором указаны имена локальных узлов. Независимо от имени, содержимое файла представляет собой набор строк, в каждой из которых задано имя узла. Строки, начинающиеся с символа
    #
    , считаются комментариями.

    Работа в режиме ретранслятора

    Как было сказано ранее, ретрансляция является важным режимом работы почтового сервера. Как правило, настраивая

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

    Настройка
    sendmail
    для ретрансляции писем

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

    По умолчанию почтовый сервер, инсталлированный в сети, не настроен для работы в качестве ретранслятора. При попытке передать письмо на сервер программа подготовки почты получит в ответ сообщение "

    relaying denied
    " ("ретрансляция запрещена"). Для того чтобы программа
    sendmail
    работала в качестве ретранслятора, надо активизировать соответствующие компоненты. В частности, в исходном конфигурационном файле необходимо задать записи
    FEATURE
    , указав в них следующие опции.

    • 

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

    • 

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

    • 

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

    • 

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

    • 

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

    Внимание

    Для управления ретрансляцией может использоваться также опция

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

    Ниже приведен пример записи в конфигурационном файле

    m4
    .

    FEATURE(`access_db')

    Данная запись часто устанавливается по умолчанию, но она не обеспечивает реальной ретрансляции писем, передаваемых с удаленных узлов, так как в файле

    access.db
    , автоматически создаваемом при установке системы, указывается только локальный домен.

    Как вы уже знаете, при запуске программа

    sendmail
    читает содержимое файла
    access.db
    . Этот файл обычно хранится в каталоге
    /etc
    или
    /etc/mail
    и создается на базе файла
    access
    . Пример файла
    access
    приведен ниже.

    # Разрешить прием писем с localhost...

    localhost.localdomain RELAY

    localhost RELAY

    127.0.0.1 RELAY

    # Разрешить прием писем из локальной сети

    192.168.99 RELAY

    Первые три записи присутствуют практически в любой конфигурации. Они сообщают sendmail о том, что программа должна принимать письма с локального узла. Эти записи обеспечивают работу локальных почтовых программ. Последняя запись указывает на то, что сервер должен принимать для ретрансляции письма, отправленные из сети 192.168.99.0/24. Вместо IP-адресов можно указывать доменные имена, но IP-адреса сложнее фальсифицировать, поэтому при использовании их повышается уровень безопасности системы.

    Все приведенные примеры оканчиваются опцией

    RELAY
    , но кроме нее в файле access могут также использоваться и другие опции.

    • 

    OK
    . Эта опция сообщает
    sendmail
    о том, что локальные письма должны приниматься, несмотря на то, что другие правила требуют отвергать их.

    • 

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

    • 

    REJECT
    . Если вы собираетесь блокировать почту, поступающую с определенного узла или из определенного домена, вам следует использовать данную опцию. При этом письма будут возвращаться отправителю.

    • 

    DISCARD
    . Данная опция выполняет те же действия, что и
    REJECT
    , но письма не возвращаются отправителю.

    • 

    nnn текст
    . Эта опция также работает подобно REJECT, но в возвращаемое сообщение она включает код ошибки nnn и указанный текст.

    Отредактировав файл

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

    # makemap hash /etc/mail/access.db < /etc/mail/access

    При инсталляции

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

    Настройка
    sendmail
    для передачи почты через ретранслятор

    В предыдущем разделе рассматривался вопрос об использовании программы

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

    В большинстве случаев конфигурация

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

    FEATURE(`nullclient', `outgoing.mail.relay')

    В данном случае

    outgoing.mail.relay
    — это имя компьютера, используемого для ретрансляции почты. После того как вы создадите файл
    sendmail.cf
    и перезапустите
    sendmail
    , вся исходящая почта будет передаваться через указанный почтовый сервер. Выполнив настройку
    sendmail
    , убедитесь, что письма корректно доставляются адресатам.

    Конфигурация
    sendmail
    для противодействия попыткам передачи спама

    Существует несколько способов настройки

    sendmail
    для блокирования поступающих рекламных сообщений и предотвращения попыток использования сервера для передачи спама. Один из способов состоит в использовании файла
    access
    и его двоичного аналога
    access.db
    . С помощью файла
    access.db
    можно блокировать спам на основании анализа адресов отправителей. Если вы зададите для некоторых доменов или компьютеров, указанных с помощью имени или IP-адреса, опции
    REJECT
    или
    DISCARD
    , сообщения из этих источников будут отвергаться. Если вы регулярно получаете рекламные сообщения с определенных адресов, этот способ позволит избавиться от них. Следуя описанному подходу, необходимо соблюдать осторожность, так как вместе со спамом будут отвергнуты и корректные сообщения, приходящие с тех же адресов или из тех же доменов. Если вы блокируете почту, поступающую из сети, которая принадлежит популярному провайдеру, вы рискуете потерять нужные вам письма.

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

    m4
    опцию
    dnsbl
    .

    FEATURE(dnsbl, `blackholes.mail-abuse.org', `Rejected - see \

    http://www.mail-abuse.org/rbl/')

    Данная запись указывает

    sendmail
    на то, что при проверке входящей почты должен использоваться список
    MAPS RBL
    . Если вы хотите использовать другой список, вам надо изменить вторую опцию в данной записи. Последнее поле записи содержит строку, которая включается в состав возвращаемого сообщения. В этой строке вы можете указать отправителю адрес Web-узла, содержащего список IP-адресов, на основании которого было отвергнуто его сообщение. Если окажется, что корректное сообщение было заблокировано по ошибке, его автор сможет принять меры для того, чтобы разрешить проблему.

    На заметку

    В версии 8.10 программы

    sendmail
    порядок использования списков IP-адресов был существенно изменен. В этой главе описаны правила, применяемые в этой и последующих реализациях. Дополнительную информацию по данному вопросу вы найдете по адресу
    http://mail-abuse.org/rbl/usage.html
    .

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

    promiscuous_relay
    — не допустимо.

    Внимание

    Версии

    sendmail
    , предшествующие 8.9.0, настроены так, чтобы любой компьютер мог воспользоваться сервером для передачи писем. Такой сервер необходимо заменить новой версией или перенастроить его, чтобы неограниченные услуги ретранслятора не предоставлялись другим узлам. Информацию по этому вопросу вы найдете по адресу
    http://mail-abuse.org/tsi/ar-fix.html#sendmail_8
    . Версии
    sendmail
    , предшествующие 8.8.4, перенастроить крайне сложно. Гораздо проще обновить почтовый сервер.

    Настройка Exim

    Сервер Exim применяется по умолчанию в Debian GNU/Linux и пользуется умеренной популярностью. Данный сервер можно использовать и с другими пакетами. Так, например, Exim поставляется в составе расширения PowerTools системы Red Hat, поэтому его достаточно легко установить в Red Hat и других подобных дистрибутивных пакетах. Подобно

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

    На заметку

    Поскольку Exim является сервером по умолчанию только для Debian, в данном разделе в основном принимается во внимание конфигурация данного сервера, устанавливаемая в системе Debian. В других системах для Exim может быть по умолчанию выбрана другая конфигурация.

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

    Главный конфигурационный файл Exim называется

    exim.conf
    . Обычно он располагается в каталоге
    /etc
    . В состав этого файла входят записи, представленные в следующем формате:

    опция = значение

    Как обычно, строки, содержащие комментарии, начинаются с символа

    #
    . Файл который используется в системе Debian, в основном состоит из комментариев, поясняющих назначение каждой записи. Комментарии существенно упрощают редактирование конфигурационного файла.

    Совет

    При инсталляции Exim в системе Debian запускается сценарий с именем

    eximconfig
    , в процессе выполнения которого генерируется файл
    exim.conf
    . Данный сценарий можно использовать для изменения конфигурации Exim; при этом нет необходимости непосредственно редактировать файл
    exim.conf
    . Если вам надо внести лишь незначительные изменения в конфигурацию системы, удобнее модифицировать
    exim.conf
    вручную, так как при использовании
    eximconfig
    приходится отвечать на целый ряд вопросов. Во многих случаях
    eximconfig
    может оказаться очень полезным инструментом, в особенности если вы мало знакомы со структурой конфигурационного файла Exim. В частности, данный сценарий помогает выбрать значения опций, наиболее подходящие для вашей системы.

    Помимо

    exim.conf
    , Exim использует в качестве источников дополнительной информации другие файлы. Файлы, применяемые данным сервером в системе Debian, перечислены ниже.

    • 

    /etc/aliases
    . Этот файл выполняет те же функции, что и аналогичный файл
    sendmail
    . Он позволяет связать две учетные записи так, что письмо, адресованное одному пользователю, будет направлено другому. Например, если в этом файле присутствует запись
    root: amelia
    , то письмо, адресованное
    root
    , получит пользователь
    amelia
    . В файле
    aliases
    можно также указывать адреса, не принадлежащие локальным пользователям. Например, наличие записи
    root: amelia@pangaea.edu
    приведет к тому, что письмо, принятое для локального пользователя
    root
    , будет перенаправлено по адресу
    amelia@pangaea.edu
    . В отличие от
    sendmail
    , в сервере Exim файл
    aliases
    не преобразовывается в двоичный формат.

    • 

    /etc/email-addresses
    . Записи в этом файле используются для изменения содержимого полей
    From:
    в заголовках исходящих сообщений. Например, наличие записи
    ben: bfranclin@pangaea.edu
    приведет к тому, что письмо, отправленное с локального компьютера пользователем
    ben
    , придет к получателю как сообщение от
    bfranclin@pangaea.edu
    .

    Сценарий

    eximconf
    создает в файле
    /etc/aliases
    записи, посредством которых почта, адресованная
    postmaster
    перенаправляется
    root
    , а письма, непосредственно направленные
    root
    , будут переданы пользователю, которого вы укажете. Содержимое описанных выше файлов можно удалять или модифицировать, а при необходимости вы можете включать в эти файлы новые записи. Файл
    /etc/email-addresses
    , создаваемый по умолчанию в системе Debian, содержит лишь комментарии.

    Маскировка адресов

    Как было сказано ранее, вам может потребоваться, чтобы в сообщениях вместо имени, возвращаемого по команде

    hostname
    , отображалось другое имя узла или домена. Основные средства маскировки адресов включаются посредством опции
    qualify_domain
    . С помощью данной опции задается имя домена. Если почтовая программа не сгенерирует информацию об адресе, имя домена будет автоматически включено в сообщение. Предположим, что в файле
    exim.conf
    присутствует следующая запись:

    qualify_domain = threeroomco.com

    Если пользователь

    ben
    отправит письмо, а программа, с помощью которой это письмо было подготовлено, не укажет в поле
    From:
    имя домена, то Exim добавит имя
    threeroomco.com
    . Если доменное имя адреса не соответствует имени
    threeroomco.com
    , то Exim заменит адрес. Таким образом, содержимое поля
    From:
    будет выглядеть так:
    ben@threeroomco.com
    .

    Еще одна опция, которую можно использовать для маскировки адресов, называется

    primary_hostname
    . Она применяется подобно
    qualify_domain
    , и ее значение принимается в качестве значения по умолчанию для
    qualify_domain
    . Значение
    primary_hostname
    используется при переговорах о взаимодействии Exim и удаленного сервера имен. Имя, задаваемое посредством данной опции, применяется при формировании заголовка
    Received:
    .

    Для более сложной маскировки адресов применяется файл

    /etc/email-addresses
    . Строго говоря, на файл
    /etc/email-addresses
    ссылается запись, расположенная в конце конфигурационного файла
    exim.conf
    . Эта запись имеет следующий вид:

    *@threeroomco.com ${lookup{$1}lsearch{/etc/email-addresses}\

     {$value}fail} bcfrF

    Это одна из наиболее сложных записей, содержащихся в файле

    exim.conf
    . При настройке сервера не следует редактировать ее, допустимо лишь изменить имя домена в начале строки. С помощью данной записи Exim проверяет каждый адрес на принадлежность домену
    threeroomco.com
    , а затем использует файл
    /etc/email-addresses
    для замены адреса. В первом поле записи, содержащейся в файле
    /etc/email-addresses
    (перед двоеточием), указывается почтовый адрес, предназначенный для сравнения, а во втором поле (после двоеточия) — адрес для замены. Данное средство позволяет выполнять маскировку для каждого пользователя; чтобы сделать это, достаточно лишь отредактировать файл
    email-addresses
    . При необходимости вы можете обрабатывать письма из разных доменов. Для этого надо либо продублировать приведенную выше запись в
    exim.conf
    , либо включить всю информацию, необходимую для замены адресов, в один файл
    email-addresses
    .

    В данном разделе рассмотрены лишь некоторые средства маскировки адресов, предоставляемые Exim. Дополнительную информацию по этому вопросу вы можете получить в документации на Exim, обратившись по адресу

    http://www.exim.org/exim-html-3.30/doc/html/spec_34.html
    .

    Настройка Exim для приема почты

    В конфигурационном файле

    exim.conf
    предусмотрены различные опции, позволяющие указать серверу, следует ли интерпретировать адрес как локальный. Эти опции кратко описаны ниже.

    • 

    local_domains
    . В качестве значения данной опции задается список доменных имен, разделенных двоеточиями. Эти имена Exim должен интерпретировать как локальные. Например, запись
    local_domains = localhost: threeroomco.com
    сообщает Exim о том, что адреса
    localhost
    и
    threeroomco.com
    являются локальными и письма, в которых они указаны, необходимо непосредственно доставлять пользователям. По умолчанию значение данной опции принимается равным значению
    qualify_recipient
    . Опция
    qualify_recipient
    задает имя узла для входящих сообщений, в которых такая информация отсутствует.

    • 

    local_domains_include_host
    . Если значение данной опции равно
    true
    , Exim принимает письма, в адресе которых указано имя компьютера. Тот же результат можно получить, добавив имя узла к списку
    local_domains
    .

    • 

    local_domains_include_host_literals
    . Если значение данной опции равно
    true
    , Exim принимает письма, в которых указан IP-адрес компьютера. Например, если Exim выполняется на компьютере с адресом 172.24.98.2 и на этом компьютере имеется учетная запись пользователя
    ben
    , Exim примет письмо с адресом
    ben@[172.24.98.2]
    . Если вы не хотите, чтобы подобные письма обрабатывались сервером, необходимо установить значение
    false
    опции
    local_domains_include_host_literals
    .

    Сценарий

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

    Конфигурация Exim для ретрансляции писем

    Подобно

    sendmail
    , в сервере Exim предусмотрен ряд опций, предназначенных как для ретрансляции писем, переданных другими программами, так и для использования в качестве ретрансляторов других серверов. Сценарий
    eximconfig
    задает администратору вопросы, касающиеся ретрансляции писем, и в большинстве случаев устанавливает приемлемую конфигурацию сервера. Уточнить настройку Exim можно с помощью непосредственного редактирования файла
    exim.conf
    .

    Настройка Exim для работы в режиме ретранслятора

    Основные опции

    exim.conf
    предназначенные для реализации режима ретрансляции писем, описаны ниже.

    • 

    host_accept_relay
    . Для того чтобы сервер Exim мог ретранслировать письма, переданные определенными компьютерами, вам надо указать в качестве значения данной опции их адреса (адреса отделяются друг от друга двоеточиями). В конфигурационном файле должно быть как минимум указано выражение
    host_accept_relay = localhost
    , позволяющее Exim передавать письма, подготовленные локальными почтовыми программами. По мере расширения списка (в котором могут быть указаны доменные имена, IP-адреса, а также использоваться символы групповых операций) увеличивается число компьютеров, которым позволено пользоваться услугами сервера для передачи почты. Например, выражение
    host_accept_relay = localhost:192.168.99.0/24:*.pangaea.edu
    указывает на то, что письма для передачи должны приниматься с локального узла, со всех узлов сети 192.168.99.0/24, а также со всех компьютеров домена
    pangaea.edu
    . Использование данной опции для указания IP-адресов компьютеров, принадлежащих домену, — один из самых безопасных способов обеспечения ретрансляции писем.

    • 

    relay_domains
    . В качестве значения данной опции можно указать одно или несколько имен доменов, разделенных двоеточиями. В результате сервер Exim будет обрабатывать письма, направленные с любого компьютера, принадлежащего указанным доменам. Эта опция полезна тогда, когда необходимо, чтобы сервер обслуживал несколько доменов или один большой домен. Аналогичных результатов можно добиться, включая символ групповой операции (
    *
    ) в имена, задаваемые в качестве значения опции
    host_accept_relay
    .

    • 

    relay_domains_include_local_mx
    . Если вы зададите значение yes данной опции, доступ к почтовому серверу автоматически получат компьютеры, указанные в записях
    MX
    серверов DNS. Такой подход очень удобен, так как избавляет от необходимости перенастраивать Exim при изменении конфигурации домена. Однако в этом случае повышается опасность использования сервера спамерами, которые имеют возможность управлять доменом и включать в конфигурационный файл сервера DNS записи
    MX
    .

    • 

    sender_address_relay
    . В качестве значения данной опции задается список почтовых адресов, разделенных двоеточиями, для которых разрешено использование сервера в качестве ретранслятора. В обычных условиях письмо должно соответствовать как значению данной опции, так и адресу узла, указанному с помощью опции
    host_accept_relay
    . (Вы можете задать проверку на соответствие любой из этих опций, включив в конфигурационный файл выражение
    relay_match_host_or_sender = yes
    , но такая конфигурация опасна для системы, так как почтовый адрес легко подделать.) Данную опцию можно применить для того, что-бы ограничить круг пользователей, имеющих право использовать сервер в качестве ретранслятора.

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

    host_auth_accept_relay
    (которая выполняет аутентификацию удаленной системы перед ретрансляцией писем) и
    tls_host_accept_relay
    (которая требует, чтобы удаленная система использовала средства аутентификации и кодирования TLS).

    Настройка Exim для передачи почты через ретранслятор

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

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

    smarthost:

     driver = domainlist

     transport = remote_smtp

     route_list = "* franklin.threeroomco.com bydns_a"

    end

    Приведенная выше группа записей сообщает Exim о том, что письма, адресованные внешним пользователям, надо передавать через узел

    franklin.threeroomco.com
    . Чтобы использовать другой ретранслятор, надо изменить значение соответствующей опции.

    Настройка Exim для противодействия распространению спама

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

    • 

    host_reject
    . Данная опция задается в конфигурационном файле
    exim.conf
    . Ее значение представляет собой список имен узлов и доменов, а также IP-адресов, разделенных двоеточиями. Почта, переданная с компьютеров, указанных посредством данной опции, должна блокироваться. Например, запись
    host_reject = *.badspammer.net:10.16.8.0/24
    указывает на то, что письма из домена
    badspammer.net
    , а также из сети 10.16.8.0/24 должны отвергаться. Система отказывается взаимодействовать с удаленным компьютером, заданным с помощью опции
    host_reject
    , уже на этапе установления соединения. В результате удаленный компьютер предпринимает повторные попытки обращения к вашему серверу, но связанная с этим дополнительная нагрузка на линии связи и компьютеры небольшая.

    • 

    host_reject_recipients
    . Данная опция действует так же, как
    host_reject
    , но почтовые сообщения отвергаются лишь в процессе взаимодействия с удаленной программой, в частности, в тот момент, когда она передает команду
    RCPT TO:
    . В результате попытки пересылки писем немедленно прекращаются.

    • 

    sender_reject
    . Данная опция блокирует письма от указанных отправителей. Роль отправителя может выполнять либо целый домен, либо отдельный пользователь в домене. Например, опция
    sender_reject = spammer@abigisp.com:badspammer.net
    указывает на то, что письма из домена
    badspammer.net
    и от пользователя
    spammer@abigisp.com
    должны отвергаться. Сервер Exim прекращает взаимодействие сразу же, как только сможет идентифицировать отправителя. В некоторых случаях это приводит к повторным попыткам передачи сообщений, предпринимаемым удаленными программами.

    • 

    sender_reject_recipients
    . Данная опция действует подобно опции
    sender_reject
    , но взаимодействие с удаленным компьютером прекращается после того, как выполняющаяся на нем программа укажет адрес получателя, т.е. передаст команду
    RCPT TO:
    . Данный подход более эффективен по сравнению с использованием опции
    sender_reject
    , так как при этом удаленная система больше не предпринимает попыток передачи сообщений.

    • Фильтры, определяемые пользователем. Сервер Exim предоставляет пользователям возможность создавать собственные фильтры. Для их формирования используются файлы

    .forward
    , находящиеся в рабочих каталогах пользователей. Возможность создания новых фильтров превращает Exim в чрезвычайно мощный и гибкий инструмент. Фильтры, определяемые пользователем, во многом похожи на фильтры Procmail, которые будут рассматриваться далее в этой главе. Подробное описание средств создания пользовательских фильтров содержится файле
    filter.txt.gz
    , который поставляется в составе Exim. В Debian GNU/Linux этот файл располагается в каталоге
    /usr/doc/exim
    ; распаковать его можно с помощью утилиты
    gunzip
    .

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

    exim.conf
    , кратко описаны ниже.

    • 

    rbl_domains
    . Значением этой опции является перечень адресов серверов, поддерживающих списки IP-адресов (эти серверы описаны в табл. 19.1). Адреса серверов разделяются двоеточиями и могут сопровождаться последовательностями символов
    /warn
    или
    /reject
    . Значение
    /warn
    указывает серверу Exim на то, что он должен добавить поле заголовка с предупреждающим сообщением (который впоследствии может быть использован фильтром Procmail), a
    /reject
    означает, что письмо должно быть отвергнуто. Кроме того, в составе данной опции могут также использоваться последовательности символов
    /accept
    (формирование "белого списка") и
    /skiprelay
    (если домен отправителя указан в опции
    host_accept_relay
    , то список IP-адресов не должен использоваться).

    • 

    rbl_hosts
    . По умолчанию принимается значение
    *
    данной опции; оно указывает на то, что сервер должен проверять все узлы, с которыми он взаимодействует, на соответствие спискам IP-адресов, указанных посредством опции
    rbl_domains
    . При необходимости вы можете освободить некоторые серверы от этой проверки. Чтобы сделать это, вам надо указать их имена перед символом
    *
    ; каждому имени должен предшествовать символ
    !
    . Например, выражение
    rbl_hosts = !ok.pangaea.edu:*
    освобождает
    ok.pangaea.edu
    от проверки на принадлежность спискам IP-адресов.

    • 

    rbl_reject_recipients
    . Последовательности символов
    /warn
    и
    /reject
    в составе значения опции
    rbl_domains
    указывают, следует ли добавить к письму поле заголовка с предупреждающим сообщением или отказаться от получения письма. Если эти последовательности не указаны, Exim по умолчанию отказывается от письма. Изменить поведение сервера позволяет опция
    rbl_reject_recipients
    . Если вы зададите в конфигурационном файле выражение
    rbl_reject_recipients = no
    , Exim будет по умолчанию добавлять в заголовки писем предупреждающие сообщения.

    • 

    recipients_reject_except
    . Данная опция позволяет задавать исключения из списков IP-адресов. Например, если указана опция
    recipients_reject_except = posmaster@threeroomco.com
    , сервер Exim будет получать письма, адресованные пользователю
    postmaster@threeroomco.com
    , даже в том случае, если они были отправлены с компьютера, указанного в списке IP-адресов.

    Дополнительную информацию об опциях, предназначенных для работы со списками IP-адресов, вы найдете в документации, поставляемой в комплекте с сервером Exim. Помимо опций, рассмотренных выше, Exim поддерживает дополнительные опции, имеющие лишь косвенное отношение к борьбе со спамом. Эти опции перечислены ниже.

    • 

    headers_check_syntax
    . Exim может проверить формат сообщений и отвергнуть их, если они составлены некорректно. Серверы некоторых спамеров неправильно формируют заголовки, поэтому, отвергая подобные сообщения, вы избавляетесь от писем с рекламными сообщениями. Чтобы сервер блокировал некорректно составленные письма, необходимо задать значение
    true
    опции
    headers_check_syntax
    .

    • 

    helo_verify
    . В процессе взаимодействия по протоколу сервер SMTP передает команду
    HELO
    или
    EHLO
    , указывая в ее составе свое имя. Обычно Exim не требует этой команды, но при необходимости вы можете задать список узлов, которые должны соблюдать все правила взаимодействия серверов. Так, например, выражение
    helo_verifу = *
    указывает, что все удаленные серверы должны строго следовать протоколу обмена. Опция
    helo_verifу
    не только требует передавать команду
    HELO
    или
    EHLO
    , но также включает проверку соответствия IP-адресов доменным именам. Системы спамеров часто бывают неверно сконфигурированы, поэтому передаваемые ими письма не выдерживают подобной проверки. Однако следует учитывать, что серверы, с которых поступают обычные письма, также бывают некорректно настроены. В этом случае будут потеряны нужные вам сообщения.

    • 

    message_size_limit
    . Данная опция также имеет лишь отдаленное отношение к борьбе со спамом, но с ее помощью можно избавиться от некоторых рекламных сообщений. По умолчанию устанавливается значение 0 опции
    message_size_limit
    , которое отменяет ограничения на размер писем. Если вы зададите положительное значение данной опции, оно будет определять максимальный размер письма. Это предотвратит получение рекламных сообщений большого объема.

    Средства фильтрации сообщений, предоставляемые Exim, и в особенности фильтры, определяемые пользователем, позволяют настроить систему в соответствии с вашими потребностями.

    Настройка Postfix

    Как и в сервере Exim, конфигурационный файл Postfix достаточно прост. Настроить сервер Postfix сможет каждый, кто хотя бы поверхностно знает терминологию SMTP и способен понять назначение имен. Сервер Postfix имеет модульную структуру, т.е. его функции обеспечиваются совместным выполнением нескольких программ. Postfix предоставляет приблизительно те же возможности, что и Exim. Подобно другим серверам SMTP, Postfix обеспечивает маскировку адресов, прием писем, адресованных в локальные домены, работу в режиме ретрансляции почты, а также предоставляет возможность противодействия распространению спама.

    Postfix по умолчанию используется в Mandrake, но также может быть установлен и в других системах, например в Debian и SuSE. Этот сервер также входит в состав PowerTools. RPM-пакет, предназначенный для Mandrake, может быть установлен в других дистрибутивных пакетах Linux, но сценарии содержащиеся в данном пакете, работать не будут. Поскольку Postfix чаще всего применяется совместно с Mandrake, материал данного раздела будет излагаться с учетом конфигурации Postfix, устанавливаемой по умолчанию для данной версии системы. Настройка Postfix для остальных систем отличается от конфигурации для Mandrake лишь отдельными деталями.

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

    Особенности выполнения Postfix определяются содержимым конфигурационного файла

    main.cf,
    который обычно располагается в каталоге
    /etc/postfix
    . Большинство записей в этом файле представлены в следующем формате:

    опция = значение

    Некоторые записи

    main.cf
    определяют переменные, используемые далее в этом файле. Чтобы ссылаться на значение опции как на переменную, надо указать перед именем опции символ
    $
    и включить полученное имя в правую часть записи. В качестве примера рассмотрим следующие две записи (между которыми могут находиться другие строки):

    myhostname = franklin.threeroomco.com

    myorigin = $myhostname

    В первой записи переменной

    myhostname
    присваивается имя узла
    franklin.threeroomco.com
    , затем это же значение присваивается переменной
    myorigin
    . Подобные цепочки определений часто используются в Postfix, поэтому, чтобы определить значение переменной, надо проследить его, перемещаясь назад по конфигурационному файлу.

    Файл

    main.cf
    в основном состоит из комментариев, которые содержатся в строках, начинающихся в символа
    #
    . Комментарии подробно описывают назначение каждой опции, поэтому вы можете достаточно подробно изучить конфигурацию Postfix, просматривая лишь содержимое конфигурационного файла.

    В файле

    main.cf
    содержатся ссылки на другие файлы. Как и в сервере
    sendmail
    , некоторые из этих файлов (оканчивающиеся символами . представлены в двоичном формате. Они создаются на базе текстовых файлов с теми же именами, за исключением суффикса
    .db
    . В процессе использования сервера наиболее часто приходится редактировать файл
    aliases
    (который преобразуется в файл
    aliases.db
    ). Как и в одноименном файле сервера
    sendmail
    , в файле
    aliases
    задаются псевдонимы, используемые при доставке писем. Например, запись
    root: amelia
    указывает на то, что все письма, адресованные root, должны быть доставлены пользователю
    amelia
    . Для того чтобы преобразовать текстовый файл
    aliases
    в двоичный файл
    aliases.db
    , надо вызвать команду
    postalias aliases
    , указав перед этим в качестве текущего каталог, в котором содержится файл
    aliases
    .

    После того как вы модифицируете содержимое текстового файла и создадите файл

    .db
    , пройдет некоторое время перед тем, как Postfix учтет внесенные изменения. Для того чтобы ускорить этот процесс, необходимо задать команду
    postfix reload
    либо перезапустить Postfix, используя для этого сценарий SysV.

    Маскировка адресов

    Опция

    myorigin
    позволяет задать имя, под которым Postfix будет представляться при взаимодействии с другими системами. По умолчанию в качестве значения данной опции задается переменная
    $myhostnam
    e, которая, в свою очередь, определяет доменное имя компьютера. Конфигурация по умолчанию приемлема во многих случаях, но если вашему компьютеру соответствует несколько имен или если вы хотите вместо имени узла использовать имя домена, вам придется изменить настройку сервера. Для этого надо задать новое значение опции
    myorigin
    , например:

    myorigin = threeroomco.com

    При желании вы можете указать в качестве значения опции переменную, например

    $mydomain
    . По умолчанию значением переменной
    $mydomain
    является значение из которого исключен компонент, находящийся слева. Например, если переменная
    $myhostname
    имеет значение
    franklin.threeroomco.com
    , то значение
    $mydomain
    будет равно
    threeroomco.com
    . В файле
    main.conf
    содержится много закомментированных записей. В некоторых случаях вы можете изменить конфигурацию, выбрав подходящую для вас запись и удалив символ комментариев.

    Опция

    myorigin
    определяет только базовые средства маскировки адресов. Значение данной опции используется лишь в ходе начальных переговоров с удаленным сервером, предусмотренных протоколом SMTP, и для указания доменного имени в поле From:, если соответствующие данные не были включены в это поле программой подготовки писем. Если ваш почтовый сервер выступает в качестве ретранслятора по отношению к другим системам вашего домена, которые, возможно, настроены для включения в заголовок полного адреса, вам потребуется выполнять более сложные действия по маскировке адресов. Предположим, например, что клиентская программа, использующая сервер Postfix для передачи писем, включает в поле From: адрес
    ben@client.threeroomco.com
    . Предположим также, что вы хотите удалить идентификатор client так, чтобы адрес имел вид
    ben@client.threeroomco.com
    . Учитывая, что значением переменной
    $mydomain
    является имя домена
    threeroomco.com
    , вы можете использовать для получения требуемого результата следующую запись:

    masquerade_domains = $mydomain

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

    $mydomain
    . В результате в поля
    From:
    и
    To:
    вместо имени узла, принадлежащего домену
    $mydomain
    , будет записано имя домена.

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

    sender_canonical_maps
    .

    sender_canonical_maps = hash:/etc/postfix/sender_canonical

    В файл

    sender_canonical
    необходимо включить записи, используемые для преобразования имен. Каждая строка этого файла должна содержать адрес, который может находиться в составе заголовка, и адрес, которым он должен быть заменен. Следующие две строки заменяют имена
    client.threeroomco.com
    и
    localhost
    на
    threeroomco.com
    :

    @client.threeroomco.com @threeroomco.com

    @localhost @threeroomco.com

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

    После создания файла

    sender_canonical
    его необходимо преобразовать в двоичный формат посредством команды
    postmap sender_canonical
    . Чтобы внесенные в файл изменения были учтены сервером Postfix, надо вызвать команду
    postfix reload
    либо перезапустить сервер.

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

    myorigin
    . Опция
    masquerade_domains
    в основном применяется в тех случаях, когда сервер принимает для передачи письма, которые уже были обработаны почтовым сервером, выполняющимся в системе Linux или UNIX. Средства преобразования адресов воздействуют не только на заголовок From:, они также затрагивают содержимое заголовка
    Received:
    . Многие администраторы неохотно используют данные средства, но в ряде случаев они могут быть очень полезны, особенно если ваши программы требуют, чтобы имена и адреса в поле
    From:
    были представлены в специальном формате.

    Настройка Postfix для получения почты

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

    mydestination
    . По умолчанию для данной опции приняты значения
    $myhostname
    и
    localhost.$mydomain
    . Например, если переменная
    $mydomain
    имеет значение
    threeroomco.com
    , a
    $myhostname
    franklin.threeroomco.com
    , то Postfix будет принимать письма, направленные на компьютеры
    franklin.threeroomco.com
    и
    localhost.threeroomco.com
    .

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

    $mydomain
    . Неплохо также указать для данной опции значение
    localhost
    . Значения опции
    mydestination
    отделяются друг от друга запятыми. Например, для почтового сервера, обслуживающего один домен, в конфигурационный файл можно включить следующее выражение:

    mydestination = localhost, localhost.$mydomain, $myhostname,

     $mydomain

    На заметку

    Для того чтобы указать, что опция

    mydestination
    занимает несколько строк, символ
    \
    использовать не надо. Строка считается продолжением предыдущей, если она начинается с пробела или знака табуляции.

    Вы можете настроить сервер Postfix для обслуживания нескольких доменов, указав их посредством одной опции

    mydestination
    . В этом случае имена большинства доменов задаются явно.

    Конфигурация Postfix для ретрансляции писем

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

    Настройка Postfix для работы в режиме ретранслятора

    По умолчанию Postfix передает письма, которые удовлетворяют следующим критериям.

    • Отправитель находится в одной из сетей, указанных с помощью переменной

    $mynetworks
    . По умолчанию в качестве значения этой переменной заданы адреса сетей, которым принадлежат все сетевые интерфейсы компьютера, в том числе интерфейс
    localhost
    .

    • Отправитель принадлежит домену, указанному в переменной

    $relay_domains
    . По умолчанию значение данной переменной равно значению переменной
    $mydestination
    .

    • Отправитель пытается передать письмо на компьютер, принадлежащий одному из доменов, указанных в переменной

    $relay_domains
    , или их поддоменов.

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

    $mynetworks
    или
    $relay_domains
    (либо модифицировать обе переменные). Предположим, например, что Postfix должен обслуживать рабочую станцию
    work.threeroomco.com
    . Для этого вам надо переопределить значения переменных следующим образом:

    mynetworks = 127.0.0.0/8

    relay_domains = work.threeroomco.com

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

    mynetworks = 192.168.99.0/24, 172.24.0.0/16, 127.0.0.0/8

    relay_domains = $raydestination, pangaea.edu

    Данные опции сообщают о том, что письма должны приниматься из сетей 192.168.99.0/24, 172.24.0.0/16 и

    localhost
    (127.0.0.0/8), а также с компьютеров, принадлежащих доменам
    $mydestination
    и
    pangaea.edu
    .

    Для управления действием

    mynetworks
    ,
    relay_domains
    и некоторых других опций может использоваться опция
    smtpd_sender_restrictions
    . По умолчанию эта опция отсутствует в
    main.cf
    , но при необходимости вы можете включить ее в состав конфигурационного файла. Значение
    permit_mx_backup
    данной опции соответствует опции
    relay_based_on_MX
    сервера
    sendmail
    . Подробные сведения о
    smtpd_sender_restrictions
    вы найдете в документации на сервер Postfix.

    Настройка Postfix для передачи почты через ретранслятор

    В простейшем случае, чтобы сконфигурировать Postfix для передачи почты посредством другого сервера, достаточно установить значение опции

    relayhost
    . Эта опция, находящаяся в файле
    main.cf
    , указывает на компьютер, выполняющий функции ретранслятора. Если в конфигурационном файле сервера имен, управляющего доменом, присутствует запись
    MX
    , указывающая на сервер-ретранслятор, то в качестве значения опции
    relayhost
    можно задать имя этого домена. Например, если в роли ретранслятора выступает сервер, расположенный на компьютере
    franklin.threeroomco.com
    , в файл
    main.cf
    необходимо включить следующую запись:

    relayhost = franklin.threeroomco.com

    Если ваш сервер находится в том же домене, что и сервер-ретранслятор, и если на ретранслятор, указывает запись

    MX
    , то вместо имени
    franklin.threeroomco.com
    вы можете использовать переменную
    $mydomain
    . Такой подход предпочтительнее тем, что переносе почтового сервера, обслуживающего домен, на другой компьютер перенастраивать Postfix не приходится.

    В обычных условиях при передаче почты Postfix обращается к серверу DNS. Если же сервер имен в вашей сети отсутствует (например, если преобразование имен осуществляется с помощью файлов

    /etc/hosts
    ), вам необходимо включить в конфигурационный файл следующую запись:

    disable_dns_lookups = yes

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

    /etc/hosts
    .

    Настройка Postfix для противодействия распространению спама

    Подобно

    sendmail
    и Exim, Postfix содержит средства, позволяющие бороться с распространением спама. Вы можете блокировать рекламные сообщения, сравнивая информацию в заголовках писем с шаблонами, либо использовать списки IP-адресов.

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

    main.cf
    . Пример опции, предназначенной для проверки заголовков, приведен ниже.

    header_checks = regexp:/etc/postfix/bad_headers

    В файле

    bad_headers
    указываются регулярные выражения, подобные приведенным в листинге 19.2. Если заголовки почтового сообщения соответствуют регулярным выражениям, содержащимся в файле, и если в файле указано, что письмо должно быть отвергнуто, оно возвращается отправителю. Регулярные выражения могут задаваться либо в стиле
    POSIX (regeхр: описание)
    , либо в стиле
    PCRE (pcre: описание)
    .


    Листинг 19.2. Файл с регулярными выражениями Postfix, используемыми для фильтрации спама

    #### Поля Subject: заголовков сообщений, полученных от спамеров

    /^Subject: ADV:/ REJECT

    /^Subject: Accept Visa/ REJECT

    #### Поля From: и Received: заголовков сообщений,

    #### полученных от спамеров

    /^(From|Received):.*badspammer\.net/REJECT

    /^From: spammer@abigisp\ .net/ REJECT

    На заметку

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

    egrep.

    Опция

    header_checks
    предоставляет большие возможности, но она сложна в использовании. Более простое решение проблемы спама состоит в применении списков IP-адресов. Для работы с такими списками предназначены две приведенные ниже опции.

    maps_rbl_domains = relays.mail-abuse.org, dialups.mail-abuse.org

    smtpd_client_restrictions = reject_maps_rbl

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

    reject_maps_rbl
    , опция
    smtpd_client_restrictions
    может также принимать другие значения. Например, значение
    reject_unknown_clien
    t сообщает Postfix, что если для адреса отправителя не может быть выполнено обратное DNS-преобразование, письма не должны обрабатываться. Подробнее эти опции описаны в документации на Postfix.

    Помимо описанных выше опций, Postfix предоставляет также опции, имеющие лишь косвенное отношение к борьбе со спамом. Некоторые из таких опций описаны ниже.

    • 

    smtpd_helo_required
    . По умолчанию для данной опции задается значение по. Если вы измените его на
    yes
    , Postfix будет обрабатывать письмо только в том случае, если при обмене по протоколу SMTP отправитель передаст команду
    HELO
    или
    EHLO
    . Этот подход позволяет блокировать действия некорректно написанных программ, часто используемых для распространения спама, но также отвергает обычные письма, отправляемые посредством неправильно сконфигурированного сервера SMTP.

    • 

    smtpd_helo_restrictions
    . Данная опция позволяет Postfix более строго контролировать использование команды
    HELO
    или
    EHLO
    при SMTP-взаимодействии. Для опции
    smtpd_helo_restrictions
    предусмотрено несколько значений. Например,
    reject_unknown_hostname
    означает, что Postfix должен прекратить взаимодействие, если для указанного доменного имени не может быть обнаружена запись
    А
    или
    MX
    . Значение
    reject_non_fqdn_hostname
    требует, чтобы отправитель указал полное доменное имя узла. Более подробное описание опции
    smtpd_helo_restrictions
    приведено в документации на сервер Postfix.

    • 

    smtpd_sender_restrictions
    . Если в конфигурационном файле Postfix указана данная опция, это означает, что информация в поле
    From:
    заголовка должна соответствовать определенным критериям. Например, значение
    reject_unknown_sender_domain
    указывает на то, что если в поле
    From:
    не задано имя узла, письмо должно быть отвергнуто, а значение
    reject_non_fqdn_sender
    требует, чтобы отправитель включал в адрес полностью определенное доменное имя.

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

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

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

    Использование фильтров Procmail

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

    Роль Procmail в процессе доставки почты

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

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

    Procmail позволяет даже передавать письма для обработки другим программам. С помощью Procmail вы можете, например, реализовать шлюз, посредством которого принятые письма будут автоматически передаваться от почтового сервера серверу новостей. В результате у вас появится возможность читать письма с помощью программ, предусмотренных для просмотра материалов групп новостей. Чтобы защитить вашу сеть от вирусов и "троянских коней", распространяемых по почте, вы можете организовать обработку поступающих сообщений с помощью антивирусных программ. Эту задачу также позволяет решить Procmail. При необходимости можно создать фильтр, который будет воспроизводить звуковой сигнал, оповещая вас о поступлении писем, содержащих определенные ключевые слова.

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

    egrep
    .

    С помощью Procmail могут создаваться фильтры для всей системы или для отдельных пользователей. Например, фильтры, действующие в пределах системы, могут использоваться для блокирования спама и борьбы с вирусами. Отдельные пользователи могут применять Procmail для распределения сообщений по папкам и выполнения других подобных действий. Конфигурация Procmail для использования в рамках системы задается с помощью файла

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

    Внимание

    В большинстве версий Linux файл

    /etc/procmailrc
    используется тогда, когда Procmail запускается по инициативе пользователя root. Поэтому надо внимательно следить за тем, чтобы команды, выполняемые Procmail, не нанесли вреда системе. Кроме того, перенаправляя почту, необходимо принимать меры для того, чтобы создаваемые файлы были доступны для чтения пользователям, которым они предназначены. При работе с файлами
    .procmailrc
    , расположенными в пользовательских каталогах, подробные проблемы не возникают, так как в этом случае Procmail выполняется с привилегиями обычного пользователя.

    В конфигурационном файле Procmail содержатся записи трех типов.

    • Комментарии. Как и во многих других конфигурационных файлах, строки, содержащие комментарии, начинаются с символа

    #
    .

    • Записи, определяющие переменные окружения. В процессе работы Procmail использует значения переменных окружения, например

    $HOME
    (расположение рабочего каталога пользователя) и
    $MAILDIR
    (каталог, в котором содержатся пользовательские папки для хранения почтовых сообщений). Значения переменных окружения устанавливаются в конфигурационном файле так же, как и в оболочке. Например, запись
    MAILDIR = $HOME/Mail
    задает для переменной окружения
    $MAILDIR
    значение, указывающее на подкаталог
    Mail
    , находящийся в рабочем каталоге пользователя.

    • Рецепты. Правила фильтрации Procmail называются рецептами (recipe). Основная работа по построению фильтра сводится к созданию рецепта. Каждый рецепт содержит правила, определяющие обработку сообщения, соответствующего некоторому регулярному выражению. Таким образом, полный набор правил состоит из многих рецептов. Рецепты разделяются на две категории: рецепты с доставкой (delivering) и рецепты без доставки (nondelivering). Рецепты с доставкой ориентированы на включение сообщения в состав почтового ящика, блокирование сообщения или обработку его с помощью другой программы. Рецепты без доставки определяют вложенные рецепты, т.е. приводят к повторной обработке сообщения с помощью Procmail.

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

    $DEFAULT
    . Обычно это почтовый ящик, используемый по умолчанию, например
    /var/spool/mail/имя_пользователя
    .

    Создание рецепта

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

    :0 [флаги] [:[файл_блокировки]]

    [условия]

    действие

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

    Идентификационная строка

    Каждый рецепт начинается с символов

    :0
    . Цифра 0 не имеет специального значения, и рецептов, начинающихся с
    :1
    или больших номеров, не существует. После
    :0
    вы можете задать один или несколько флагов, которые изменяют поведение Procmail. Наиболее часто используются следующие флаги.

    • 

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

    • 

    В
    . Этот флаг задает сравнение тела сообщения с шаблоном.

    • 

    D
    . По умолчанию при сравнении с шаблоном не учитывается регистр символов. Флаг
    D
    отменяет это соглашение.

    • 

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

    • 

    w
    . Этот флаг сообщает о том, что Procmail должен ожидать завершения действия, указанного в рецепте. Если действие не окончилось успешно, сообщение остается в очереди для обработки посредством других рецептов.

    • 

    W
    . Данный флаг действует подобно
    w
    , но подавляет сообщения об ошибках.

    После флагов можно указать двоеточие и имя файла блокировки. Файл блокировки — это специальный файл, который сообщает о том, что в данный момент происходит работа с другим файлом. При наличии файла Procmail откладывает обработку сообщения до тех пор, пока этот файл не будет удален. Файл блокировки удобно использовать в тех случаях, когда в очереди содержится много сообщений; ,без него может возникнуть ситуация, когда сообщения, принятые одно за другим, будут записаны в неверном порядке. По умолчанию имя файла блокировки строится на основе имени файла, в который помещается почта (этот файл указывается в строке действия). Если в строке действия задается обработка сообщения другой программой, вы можете указать имя файла блокировки после двоеточия.

    Условия

    Условия в составе рецепта состоят из любого (возможно, нулевого) числа строк, обычно начинающихся с символа

    *
    . Как правило, в составе условий задаются регулярные выражения — строки символов, с которыми Procmail сравнивает входные данные (заголовок и тело сообщения). Большинство символов используется литерально, но некоторые символы имеют специальные значения. Специальные символы и выполняемые ими действия описаны ниже.

    • 

    ^
    . Указывает на начало строки. Этот символ указывается во многих условиях Procmail после символа
    *
    .

    • 

    $
    . Данный символ указывает на конец строки.

    • 

    .
    . Точке соответствует любой символ, кроме символа новой строки. Например, выражению удовлетворяют
    dog
    ,
    dig
    ,
    dug
    и любая другая трехсимвольная последовательность, которая начинается с
    d
    и заканчивается
    g
    .

    • 

    а*
    . Данному выражению соответствует любое (в том числе нулевое) число символов, указанных перед звездочкой, следующих друг за другом. Очевидно, что вместо а вы можете подставить любой символ. Например, если вам надо найти последовательность, начинающуюся с цифр
    802
    , за которыми следует произвольное количество неизвестных символов, а затем
    1618
    , то сделать это поможет выражение
    802.*1618
    .

    • 

    a+
    . Это выражение выполняет те же действия, что и
    a*
    , но количество символов в последовательности не может быть нулевым.

    • 

    a?
    . Данное выражение означает, что указанный символ может отсутствовать.

    • 

    последовательность1|последовательность2
    . Чтобы указать на то, что в строке может присутствовать одна из двух последовательностей символов, надо разделить эти последовательности символом
    |
    . При необходимости вы можете задать выбор более чем из двух альтернативных вариантов, использовав несколько символов
    |
    .

    • 

    (последовательность)*
    . Это выражение похоже на
    a*
    , но оно означает многократное повторение не одного символа, а целой последовательности.

    • 

    [символы]
    . Набор символов, помещенных в квадратные скобки, означает, что в строке должен присутствовать любой из них. Например, выражению
    [aeiou]
    соответствуют символы
    а
    ,
    е
    ,
    i
    ,
    о
    или
    u
    . Если два символа разделены дефисом (
    -
    ), они задают диапазон символов. Например, выражению
    [m-q]
    соответствуют символы
    m
    ,
    n
    ,
    о
    ,
    p
    или
    q
    .

    • 

    \
    . Обратная косая черта отменяет специальное значение символа. Например, выражение
    \.
    соответствует обычной точке.

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

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

    • 

    !
    . Данный символ инвертирует результат сравнения. Если условие начинается с символа
    !
    , то, для того, чтобы письмо соответствовало рецепту, оно не должно соответствовать данному условию. Например, вы можете создать рецепт, которому соответствуют все сообщения, кроме адресованных пользователю
    postmaster
    .

    • 

    <
    . Условие применяется в том случае, если длина сообщения меньше указанного числа байтов.

    • 

    >
    . Условие применяется в том случае, если длина сообщения больше указанного числа байтов.

    Действие

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

    sendmail
    , Exim, Postfix и другими серверами, использующими формат
    mbox
    . Если же вы работаете с
    qmail
    или другим сервером, поддерживающим формат
    maildir
    , описание действия Procmail необходимо завершать косой чертой (
    /
    ), которая указывает на то, что Procmail должен сохранить сообщение в формате
    maildir
    . Procmail также поддерживает еще один формат хранения сообщений, для использования которого описание действия должно заканчиваться косой чертой и точкой.

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

    • 

    !
    . Если описание действия начинается с восклицательного знака, Procmail интерпретирует содержимое строки как список почтовых адресов, по которым следует перенаправить сообщение. Вы можете использовать данную возможность для автоматического создания сообщений, предназначенных для группы пользователей.

    • 

    |
    . В оболочках UNIX вертикальная черта используется для организации конвейерной обработки данных. В Procmail данный символ имеет аналогичное назначение. Если описание действия начинается с вертикальной черты, Procmail запускает указанную программу и передает ей сообщение для обработки. Вы можете использовать данную возможность для выполнения более сложных действий над сообщениями.

    • 

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

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

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

    Пример использования рецептов

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

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


    Листинг 19.3. Пример конфигурационного файла Procmail

    MAILDIR = $HOME/Mail


    # Поиск рекламных сообщений. Проверка не затрагивает письма,

    # адресованные пользователю postmaster или отправленные им

    :0

    *! (From|To) : . *postmaster

    {

     : 0 В

     * .*301.*S.*1618 /dev/null


     :0

     * From: .*badspammer\.net

     /dev/null


     :0

     * Subject:.*\$\$\$

     /dev/null

    }


    # Проверка по ключевым словам rug и david и

    # перенаправление писем адресату

    :0 с

    * From: . *david@pangaea\.edu

    * Subject: . *rug

    ! amy@threeroomco.com


    # Сообщения списков рассылки помещаются в отдельную папку

    :0:

    * То: . *list@mailinglist\ .example\ .com

    $MAILDIR/mailinglist

    Листинг 19.3 иллюстрирует некоторые важные особенности рецептов Procmail.

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

    postmaster
    . (Это достигается посредством оператора отрицания, указанного в условиях включающего рецепта.) Аналогичный результат можно получить, включив условие
    *! \ То: .*postmaster
    в состав каждого из фильтров, предназначенных для блокирования спама. В данном простом примере это может несколько сократить объем конфигурационного файла. В более сложных фильтрах при использовании вложенных рецептов объем файла уменьшается. Кроме того, применение вложенных фильтров уменьшает вероятность ошибки, так как некоторые условия при этом указываются однократно.

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

    В
    ) на наличие строки, содержащей последовательности
    301, S
    и
    1618
    . Этот рецепт предназначен для перехвата писем, содержащих указание на раздел
    301
    и номер
    S.1618
    , которые часто используются спамерами для создания иллюзии официального сообщения. Второй из рецептов, предназначенных для фильтрации спама, блокирует все письма из домена
    badspammer.net
    , а третий фильтр блокирует сообщения, содержащие в поле
    Subject:
    последовательность
    $$$
    . Обратите внимание на использование обратной косой черты для отмены специального значения символов. Все три рассматриваемых здесь рецепта направляют сообщения в файл
    /dev/null
    , т.е. удаляют их. После копирования в файл
    /dev/null
    письма уже не могут быть восстановлены. Файл блокировки для этих рецептов не требуется, так как сообщения не сохраняются ни в одной папке.

    • Копирование сообщений. Вместо того чтобы записывать сообщение в файл, второй рецепт, приведенный в рассматриваемом примере, передает его другому пользователю. На это указывают флаг

    с
    и восклицательный знак в начале описания действия. Сообщение должно удовлетворять двум критериям: отправителем его должен быть пользователь
    david@pangaea.edu
    , и оно должно содержать слово
    rug
    в поле заголовка
    Subject:
    . Если хотя бы одно из условий не выполняется, сообщение не копируется.

    • Сортировка сообщений. Последний рецепт распределяет сообщения по папкам. Письма, адресованные

    list@mailinglist.example.com
    , помещаются в отдельную папку, расположенную в подкаталоге рабочего каталога пользователя, предназначенного для работы с почтой. Во многих списках рассылки поле заголовка сообщения используется для идентификации самого списка, а информация о получателе сообщения включается в поле
    То:
    заголовка конверта. Для того чтобы выбрать наиболее удобный способ распределения писем по папкам, вам следует выяснить, какие данные содержатся в заголовках писем, распространяемых посредством списков рассылки.

    Рецепты, приведенные в листинге 19.3, предельно просты, и их вряд ли можно использовать для решения конкретных задач, однако на их основе вы можете создать реальные рецепты. Кроме того, при необходимости вы можете внести изменения в фильтры, полученные из других источников.

    Использование существующих наборов фильтров

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

    • SpamBouncer. Этот пакет представляет собой набор фильтров Procmail, предназначенных для блокирования спама. Фильтры, входящие в состав SpamBouncer, достаточно сложны, но при необходимости вы можете адаптировать некоторые из них для решения собственных задач. Подробно эти фильтры описаны в документации, поставляемой в составе пакета. Чтобы скопировать SpamBouncer, надо обратиться на его Web-страницу, расположенную по адресу

    http://www.spambouncer.org
    .

    • SmartList. Этот пакет, реализующий список рассылки, создан на основе Procmail. Дополнительную информацию о нем вы можете получить из документа SmartList FAQ, доступного по адресу

    http://www.hartzler.net/smartlist/SmartList-FAQ.html
    .

    • Советы и рецепты Тимо. Тимо Салми (Timo Salmi) поддерживает Web-страницу (

    http://www.uwasa.fi/~ts/info/proctips.html
    ), посредством которой он распространяет информацию о простых рецептах Procmail. Информацию, представленную на этой странице, нельзя рассматривать как готовый к использованию пакет, такой как SpamBouncer или SmartList, однако вы можете найти на ней "заготовки" для своих фильтров.

    • Примеры рецептов Procmail с комментариями. Web-узел

    http://handsonhowto.com/pmail102.html
    содержит примеры рецептов Procmail, снабженные комментариями, которые поясняют их работу.

    Дополнительную информацию о фильтрах и рецептах, пригодных для использования, вы получите, выполнив в Internet поиск по ключевым словам

    Procmail recipes
    . Многие полезные ссылки можно найти на Web-узле Procmail по адресу
    http://www.procmail.org
    .

    Простые наборы фильтров можно разместить в рабочем каталоге пользователя в файле

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

    Внимание

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

    Совет

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

    telnet
    (для этого надо при установлении соединения указать порт 25).

    Запуск Procmail

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

    • 

    sendmail
    . Чтобы настроить сервер для использования Procmail, необходимо включить в конфигурационный файл m4 три записи. Первая из них,

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

    сообщает

    sendmail
    о том, где расположены двоичные файлы Procmail. Записи
    FEATURE(local_procmail)
    и
    MAILER(procmail)
    указывают
    sendmail
    на необходимость использования Procmail при доставке почты.

    • Exim. Около двух третей конфигурационного файла

    exim.conf
    , используемого по умолчанию, занимает раздел
    procmail_pipe
    . Этот раздел посвящен использованию Procmail для доставки почты. Убедитесь, что данный раздел присутствует в конфигурационном файле и что в нем указан требуемый двоичный файл.

    • Postfix. В конфигурационном файле

    main.cf
    , используемом по умолчанию, для вызова Procmail применяется опция
    mailbox_command
    . Если вы не укажете эту опцию, Postfix будет доставлять почту, минуя Procmail.

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

    .forward
    , содержащий следующую строку:

    "|IFS=' ' &&p=/usr/bin/procmail&&test -f $p&&exec $p \

    -Yf-||exit 75 #имя_пользователя"

    Следите за тем, чтобы одинарные и двойные кавычки были указаны точно так, как в этом примере.

    Резюме

    Электронная почта — одна из наиболее важных служб Internet. Linux обеспечивает работу самых различных почтовых серверов, как всем известного

    sendmail
    , так и новых продуктов, например Exim и Postfix. Независимо от того, какой сервер SMTP вы используете, можете настроить его для выполнения некоторых стандартных действий, скажем, для получения писем и перенаправления их другим системам. При настройке сервера необходимо уделять внимание различным деталям, например, указывать набор компьютеров, с которых сервер должен получать письма для передачи другим системам, принимать меры для блокировки спама и т.д. После получения сообщения сервером SMTP оно может быть обработано с помощью Procmail. Procmail позволяет отвергать рекламные сообщения, передавать письма другим программам, пересылать копии сообщений другим пользователям и выполнять прочие, самые разнообразные задачи. Procmail обеспечивает большую гибкость в работе, в частности, правила фильтрации может создавать не только системный администратор, но и любой пользователь.

    Глава 20

    Поддержка Web-сервера

    Многие пользователи не видят различий между системой World Wide Web и Internet в целом, хотя каждый специалист знает, что функционирование Internet обеспечивается большим количеством серверов, поддерживающих различные протоколы. Если же говорить о наиболее популярной службе Internet, то ею, несомненно, окажется Web. Наличие Web-сервера — одно из условий успешной работы практически каждой организации. Web- сервер, по сути, является "лицом" компании в среде Internet.

    В системе Linux работа Web-сервера может обеспечиваться различными программами, однако наибольшей популярностью среди администраторов пользуется продукт Apache. По этой причине в данной главе основное внимание уделяется этому серверу. Кроме того, здесь рассматриваются Web-серверы, выполняющиеся как процессы ядра, формы, сценарии, защита при обмене данными, виртуальные домены и прочие вопросы, связанные с работой Web-сервера. В этой главе также обсуждаются подготовка материалов для представления на Web-узле и анализ трафика, связанного с работой Web-сервера.

    Организовать выполнение основных функций Web-сервера в системе Linux не трудно, но разобраться с опциями, предназначенными для поддержки расширенных возможностей сервера, достаточно сложно. Описать эти опции в одной главе невозможно. Если вам потребуется подробная информация о работе Web-сервера, вам следует обратиться к документации на программный продукт, который вы собираетесь использовать, или к изданиям, специально посвященным этому вопросу: Энгельскелла (Engelschall) Apache Desktop Reference (Addison Wesley, 2001) или Олда (Auld) Linux Apache Server Administration (Sybex, 2001). Есть также книги, в которых описываются специальные функции Web-сервера. В качестве примера можно привести книгу Мелцера (Meltzer) и Микалски (Michalski), Writing CGI Applications with Perl (Addison Wesley, 2001).

    Использование Web-сервера

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

    Web-сервер — это программа, реализующая обмен данными посредством HTTP (Hypertext Transfer Protocol — протокол передачи гипертекстовой информации). Web-сервер принимает запросы от клиентов через некоторый порт (как правило, это порт с номером 80). HTTP-клиент (обычно его называют Web-броузером) передает Web-серверу запрос на получение документа. Получив запрос, Web-сервер читает документ с жесткого диска, или, если запрос предполагает вызов CGI-сценария, получает документ, сгенерированный этим сценарием. Затем документ передается клиенту. В протоколе HTTP предусмотрена также возможность передачи Web-серверу данных для обработки.

    Web-сервер используется для организации Web-узла — набора документов, к которым пользователи могут обращаться, указывая URL (Uniform Resource Locator — унифицированный локатор ресурса). (Следует различать понятия Web-узел и узел сети. Если Web-узел представляет собой набор документов, то узел сети — это лишь компьютер или другое устройство, подключенное к сети.) Чаще всего URL начинаются с

    http://
    , но в некоторых случаях в начале указываются другие протоколы, например
    ftp://
    . Web-серверы поддерживают
    http://
    и
    https://
    ; другие протоколы поддерживаются другими серверами.

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

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

    Следует хорошо представлять себе различия между Web-узлом и Web-сервером. Web-узел, как было сказано выше, — это набор документов, представленных в Web, при обращении к которым пользователи указывают URL. В этих URL содержится доменное имя, которое часто отражает название организации. В отличие от Web-узла, Web-сервер — это набор программных или аппаратных средств, обеспечивающих поддержку Web-узла. При желании можно организовать работу Web-узла, не устанавливая в локальной сети Web-сервер. Для этого надо воспользоваться услугами сторонней организации, предоставляющей дисковое пространство своего Web-сервера для размещения на нем требуемых документов и программ. Как вы узнаете из данной главы, Web-сервер можно настроить так, чтобы его действия зависели от имени, указанного в запросе. Чтобы при указании имени, принадлежащего вашему домену, обращение осуществлялось к внешнему серверу, на котором размещены ваши документы, вам надо специальным образом настроить сервер DNS (настройка сервера DNS описывалось в главе 18). Например, если вы разместили документы на Web-сервере по адресу 10.102.201.1 и хотите связать с этим сервером имя

    www
    в вашем домене, вам надо включить в конфигурационный файл DNS следующую запись:

    www IN A 10.102.201.1

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

    Размещение данных на внешнем сервере имеет ряд преимуществ по сравнению с поддержкой собственного Web-сервера. Например, пропускная способность линии, посредством которой ваша локальная сеть подключена к Internet, может быть недостаточной для организации обмена данными с Web-сервером. (Так, например, линия с пропускной способностью 200 Кбод, которая может находиться в нерабочем состоянии до пяти часов в месяц, хороша для домашнего использования, но не подходит для большой компании, такой как IBM.) Размещая данные на сервере другой организации (например, на сервере провайдера), вы избавлены от необходимости поддерживать собственный Web-сервер. Недостатком такого подхода является необходимость платить деньги за аренду дискового пространства на сервере (от нескольких долларов до нескольких тысяч долларов в месяц, в зависимости от объема данных и трафика). Кроме того, некоторые внешние серверы не обеспечивают необходимых ресурсов. Например, может оказаться, что сервер не поддерживает CGI или SSL.

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

    http://www.abigisp.net/~имя/
    . Такой подход приемлем для частных лиц и небольших организаций. Однако при этом возможности по представлению данных в Web чрезвычайно ограничены, кроме того, для коммерческой организации нежелательно, чтобы в составе URL указывалось имя провайдера.

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

    Программы, реализующие Web-сервер в системе Linux

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

    • Apache. Этот продукт поставляется в составе каждого дистрибутивного пакета Linux. Как правило, процедура установки системы запрашивает пользователя, следует ли инсталлировать сервер Apache. По данным Netcraft (

    http://www.netcraft.com
    ), в марте 2002 г. 65% всех работающий в Internet Web-серверов составляли серверы Apache. По этой причине основное, внимание в данной главе уделяется данному продукту. Apache представляет собой полнофункциональный Web-сервер и реализует расширенные возможности, например поддерживает сценарии CGI и SSL-взаимодействие. Web-узел Apache расположен по адресу
    http://httpd.apache.org
    .

    • Roxen. Этот продукт также представляет собой полнофункциональный Web-сервер; во многом он напоминает Apache. Его настройка осуществляется посредством Web-интерфейса, что привлекает некоторых начинающих администраторов. Дополнительную информацию о Roxen можно получить, обратившись по адресу

    http://www.roxen.com/products/webserver/
    .

    • 

    thttpd
    . Данный сервер отличается небольшим размером кода. Если объем Apache составляет около 300 Кбайт (в зависимости от набора используемых компонентов эта цифра может изменяться), то объем
    thttpd
    — всего 50 Кбайт. Данный сервер работает быстро и эффективно. Несмотря на размер, он поддерживает сценарии CGI, но не обеспечивает SSL-взаимодействие. Более подробные сведения об этом сервере можно получить по адресу
    http://www.acme.com/software/thttpd/thttpd.html
    .

    • Zeus. Большинство Web-серверов, предназначенных для работы в системе Linux, бесплатно распространяются в исходных кодах, но Zeus является исключением. Это коммерческий продукт; его цена составляет 1700 долларов. Согласно информации, опубликованной на Web-узле Zeus (

    http://www.zeus.co.uk/products/zws/
    ), данный сервер обеспечивает лучшую масштабируемость по сравнению с другими серверами. Это проявляется при интенсивных обращениях клиентов к Web-серверу.

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

    • Нетрадиционные серверы. Некоторые программы используют протокол HTTP для выполнения специальных действий, не поддерживаемых обычными Web-серверами. Например, инструменты удаленного администрирования, которые рассматривались в главе 16, формально могут считаться Web-серверами. Взаимодействие с ними можно организовать посредством обычных Web-броузеров, но они принимают обращения от клиентов через порт, отличный от порта 80. Подобные серверы в данной главе рассматриваться не будут.

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

    Как правило, требованиям большинства администраторов вполне удовлетворяет сервер Apache, поставляемый в комплекте со всеми версиями Linux. Если по каким-то причинам вам необходимо минимизировать объем памяти, занимаемый сервером, рассмотрите возможность использования сервера

    thttpd
    . Если вам не нужны расширенные возможности, предоставляемые Apache, то имеет смысл выбрать тот сервер, для инсталляции, настройки и поддержки которого требуется меньше усилий. Однако благодаря популярности Apache процедура его настройки многократно проверена, и при этом обычно не возникает проблем, потому большинство администраторов выбирают данный сервер для решения своих задач.

    Если вам необходим максимально производительный сервер, это обеспечит сервер, использующий функции ядра, например kHTTPd. Этот продукт позволяет обработать больше запросов, не увеличивая объем ресурсов компьютера. Повысить эффективность обработки запросов позволяют также серверы

    thttpd
    и Zeus. Следует заметить, что в подавляющем большинстве случаев производительность сервера ограничивается не ресурсами компьютера, а пропускной способностью линии связи. Если число обращений к вашему серверу превышает возможности линии, установка более эффективно работающих программ не решит проблему. В этом случае вам надо искать способы уменьшения нагрузки на сеть (например, за счет сокращения объема графических материалов), увеличения пропускной способности линии либо рассмотреть возможность размещения Web-сервера в другой сети.

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

    Настройка основных функций Apache

    Независимо от того, какие задачи должен решать ваш Web-сервер, конфигурирование его надо начать с настройки базовых функций Apache. Лишь после того, как сервер сможет предоставить клиентам статические документы (т.е. документы, не предполагающие использование сценариев), вы сможете приступить к созданию конфигурации, ориентированной на поддержку расширенных возможностей. Первоначальная настройка Apache сводится к установке значений нескольких основных опций конфигурационного файла. Кроме того, вам необходимо иметь хотя бы общее представление о модулях Apache, которые представляют собой расширения, предназначенные для решения специфических задач. В большинстве дистрибутивных пакетов сервер Apache по умолчанию настроен так, что для обеспечения его работы достаточно внести в конфигурационные файлы лишь незначительные изменения.

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

    В большинстве пакетов основной конфигурационный файл Apache носит имя

    httpd.conf
    . В зависимости от версии системы этот файл может находиться в разных каталогах, но формат его остается неизменным. В системах Caldera и SuSE файл
    httpd.conf
    содержится в каталоге
    /etc/httpd
    ; в Debian и Slackware он размещается в
    /etc/apache
    (Slackware предоставляет файл-образец
    /etc/apache/httpd.conf.default
    ; для обеспечения работы сервера надо лишь переименовать данный файл и внести в него необходимые изменения); в Red Hat и TurboLinux файл
    httpd.conf
    размещается в каталоге
    /etc/httpd/conf/
    .

    Как обычно, строки файла

    httpd.conf
    , начинающиеся с символа
    #
    , содержат комментарии. Опции, определяющие конфигурацию сервера, задаются в следующем виде:

    Директива Значение

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

    <Directory /home/httpd/html>

     Options FollowSymLinks

     AllowOverride None

    </Directory>

    В последней строке содержится имя той же директивы, которая указана в начале, но для нее не задается никакое значение. Имени директивы, завершающей блок, предшествует косая черта.

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

    httpd.conf
    .

    • 

    access.conf
    . Ссылка на этот файл формируется с помощью директивы
    AccessConfig
    и содержится в файле
    httpd.conf
    . В файле
    access.conf
    чаще всего задаются директивы
    <Directory>
    , определяющие особенности доступа к указанным в них каталогам. В настоящее время этот файл обычно остается пустым, а иногда в качестве значения
    AccessConfig
    задается
    /dev/null
    , что запрещает использование
    access.conf
    .

    • 

    mime.types
    . Для того чтобы сообщить Web-броузеру о том, как должны обрабатываться данные, Web-сервер использует стандарт MIME (Multipurpose Internet Mail Extensions — многоцелевые почтовые расширений Internet). Например, MIME-тип
    text/plain
    означает, что данные представляют собой обычный текст, а
    image/jpeg
    определяет графические данные в формате JPEG (Joint Photographic Experts Group — объединенная группа экспертов по обработке фотоснимков). Файл
    mime.types
    содержит информацию о соответствии между MIME-типами и расширениями файлов. Например, имена файлов, оканчивающиеся
    .txt
    и
    .asc
    , связываются с MIME-типом
    text/plain
    . Если такое соответствие задано неправильно, Web-броузер будет испытывать затруднения при обработке некоторых типов файлов. Файл, поставляемый в составе пакета, обеспечивает обработку практически любых типов данных, которые могут быть помещены на Web-страницу. Если же вам надо использовать редко встречающиеся типы, вам придется добавить в этот файл новые записи.

    • 

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

    Способы запуска сервера Apache

    В главе 4 были описаны различные способы запуска серверов на выполнение. Apache может быть запущен любым из этих способов; с помощью суперсервера, сценария запуска SysV либо локального сценария. В большинстве дистрибутивных пакетов предусмотрен запуск сервера с помощью сценария SysV или локального сценария, так как эти способы обеспечивают постоянное присутствие сервера в памяти и, следовательно, уменьшают задержку при генерации ответа на запрос клиента. При необходимости вы можете также обеспечить запуск Apache посредством суперсервера; программа инсталляции системы Debian даже задает вопрос о том, каким способом должен запускаться сервер. Однако при использовании суперсервера скорость обработки запросов снизится, так как, получив запрос, суперсервер должен будет загрузить Apache.

    Совет

    Если по каким-либо причинам, например по соображениям безопасности, вам придется организовать запуск Web-сервера с помощью суперсервера, то вместо Apache желательно использовать программу, которая занимает меньше места в памяти и, следовательно, быстрее загружается. Так, например, вы можете установить в системе

    thttpd
    или Web-сервер, выполняющийся как процесс ядра.

    Если вы собираетесь изменить способ запуска Apache, вам следует скорректировать значение опции

    ServerType
    . Эта опция находится в конфигурационном файле Apache и может принимать значение
    standalone
    или
    inetd
    . Если вы неправильно укажете значение этой опции, Apache будет работать некорректно либо вовсе не будет обрабатывать запросы. Так, например, если вы захотите отказаться от сценария SysV и перейти к запуску Apache посредством
    inetd
    , вам следует сначала внести изменения в конфигурационный файл суперсервера, затем с помощью сценария SysV завершить выполнение Apache, запретить использование сценария SysV, потом отредактировать файл
    /etc/inetd.conf
    и, наконец, перезапустить
    inetd
    . Если вы забудете выполнить хотя бы одно из описанных здесь действий, сервер будет работать некорректно или продолжит работу с использованием старой конфигурации.

    На заметку

    В некоторых пакетах исполняемый файл Apache называется

    apache
    , в других — httpd. Если вы собираетесь изменить сценарий запуска или завершить работу сервера, необходимо правильно указать имя программы.

    Опции общего назначения

    Конфигурация, устанавливаемая по умолчанию, во многих случаях обеспечивает работоспособность сервера. После инсталляции сервера и его запуска Apache готов предоставить пользователям файлы из каталога по умолчанию (обычно это каталог

    /home/httpd/html
    ). В этот каталог при установке Apache помещаются файлы, содержащие в основном информацию о том, что сервер инсталлирован, но настройка его еще не закончена. Впоследствии вы, вероятно, замените их теми файлами, которые и будут составлять содержимое Web-узла.

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

    • 

    ServerType
    . Эта директива уже рассматривалась ранее. Она может принимать значение
    standalone
    или
    inetd
    .

    • 

    User
    и
    Group
    . В системе Linux каждый сервер запускается от имени конкретного пользователя и группы. Эти директивы позволяют указать пользователя и группу, с полномочиями которых будет выполняться сервер Apache. В большинстве дистрибутивных пакетов Apache запускается от имени пользователя
    nobody
    либо с помощью учетной записи, специально созданной для данной цели и предусматривающей минимальные привилегии пользователя. Такой подход снижает вероятность того, что злоумышленник сможет воспользоваться недостатками в защите сервера для незаконного проникновения в систему. Рекомендуется принять значения этих опций, установленные при инсталляции системы.

    На заметку

    В целях повышения безопасности системы большинство двоичных файлов Apache скомпилированы так, чтобы их нельзя было запустить от имени пользователя

    root
    .

    • 

    ServerTokens
    . Сервер Apache предоставляет клиентской программе информацию о платформе, на которой он выполняется. В большинстве пакетов по умолчанию для этой опции задается значение
    ProductOnly
    , которое запрещает передавать клиенту сведения о системе. При желании вы можете задать значение
    OS
    или
    Full
    (эти значения расположены в порядке возрастания объема информации, передаваемой клиенту), но в целях повышения безопасности рекомендуется принять значение
    ProductOnly
    , установленное при инсталляции.

    Внимание

    Не следует считать, что, установив значение

    ProductOnly
    опции
    ServerTokens
    , вы лишите взломщика возможности получить данные о системе. Он по-прежнему может анализировать трафик и не только выяснить тот факт, что вы используете Linux, но и узнать версию системы. Кроме того, сведения о платформе могут предоставлять другие серверы.

    • 

    MinSpareServers
    и
    MaxSpareServers
    . Если Apache должен постоянно присутствовать в сети, для более эффективного обслуживания клиентских запросов в системе обычно запускается несколько экземпляров сервера. Каждый экземпляр обрабатывает отдельный запрос. Директивы
    MinSpareServers
    и
    MaxSpareServers
    позволяют задать минимальное и максимальное число экземпляров сервера, не участвующих в обработке запросов. Если число экземпляров сервера меньше, чем значение директивы
    MinSpareServers
    , то даже если они не выполняют обработку запросов, главный процесс Apache порождает новые процессы. Аналогично, если число неиспользуемых экземпляров сервера становится больше, чем значение директивы
    MaxSpareServers
    , лишние процессы завершаются. Если значения этих директив слишком малы, то в моменты интенсивных обращений к серверу время, необходимое для получения ответа на запрос, будет увеличиваться. Если же значения директив окажутся слишком большими, то памяти компьютера может оказаться недостаточно для размещения процессов сервера. При установке сервера по умолчанию задаются значения 5 и 10. Если нагрузка на сервер небольшая, вы можете уменьшить значения
    MinSpareServers
    и
    MaxSpareServers
    и проверить, как система отреагирует на это. Если же клиенты часто обращаются к серверу, вам, возможно, потребуются более высокие значения данных директив. Заметьте, что в некоторый момент времени общее число процессов Apache может превысить значение
    MaxSpareServers
    , так как некоторые из них заняты обработкой запросов клиентов и не рассматриваются как свободные. Если количество запросов к серверу велико, для поддержки всех экземпляров сервера может потребоваться большой объем области подкачки. При больших значениях
    MaxSpareServers
    требования к памяти, а следовательно, и к объему области подкачки еще более возрастают.

    • 

    MaxClients
    . Данная директива задает максимальное количество клиентов, которые могут одновременно поддерживать соединение с сервером. По умолчанию задается значение порядка 150. Учитывая трафик, связанный с обращением к вашему серверу, вы можете увеличить или уменьшить его. Если ваш Web-узел пользуется большой популярностью у клиентов и вы задали неоправданно большое значение
    MaxClients
    , это может привести к снижению производительности Apache. Если же значение этой директивы слишком мало, то некоторые клиенты не смогут установить соединение с сервером. Большие значения
    MaxClients
    приведут к тому, что при увеличении трафика требования к объему памяти и области подкачки возрастут.

    На заметку

    Число соединений, заданное с помощью директивы

    MaxClients
    , не то же самое, что число Web-броузеров, поддерживаемых Apache. Каждый Web-броузер может устанавливать несколько соединении с сервером, и все они учитываются при сравнении с
    MaxClients
    .

    • 

    Listen
    . По умолчанию сервер Apache принимает обращения через все активные интерфейсы, используя порт с номером 80. Данная директива позволяет изменить номер порта или ограничить число интерфейсов, через которые можно обратиться к серверу. Например, выражение
    Listen 192.168.34.98:8080
    сообщает Apache, что обращения клиентов должны приниматься только через интерфейс, с которым связан адрес
    192.168.34.98
    с использованием порта
    8080
    . Выражение Listen
    8000
    означает, что взаимодействие с клиентами может осуществляться через все интерфейсы посредством порта с номером
    8000
    .

    • 

    BindAddress
    . Если компьютер, на котором выполняется сервер Apache, содержит несколько сетевых интерфейсов, то, используя данную директиву, вы можете связать Apache лишь с одним из интерфейсов. Например, если в конфигурационном файле задано выражение
    BindAddress 192.168.34.98
    , сервер будет использовать лишь интерфейс 192.168.34.98. При установке Apache в конфигурационный файл включается выражение
    BindAddress *
    , посредством которого Apache связывается со всеми интерфейсами.

    Совет

    Если вы хотите, чтобы сервер принимал обращения только с локального компьютера, вам надо задать опцию

    BindAddress 127.0.0.1
    . При этом взаимодействие с другими компьютерами поддерживаться не будет. Для обращения к локальному серверу можно использовать URL
    http://127.0.0.1
    или
    http://localhost
    .

    • 

    Port
    . Данная директива указывает Apache, какой порт должен использоваться для взаимодействия с клиентами. По умолчанию принимается номер порта 80.

    • 

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

    • 

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

    • 

    DefaultType
    . Если Apache не может определить MIME-тип данных ни на основании расширения файла, ни с помощью "магической" последовательности, он возвращает MIME-тип, указанный в качестве значения данной директивы. Обычно это
    text/plain
    , но при необходимости вы можете задать другое значение. Изменять
    DefaultType
    имеет смысл в том случае, если на Web-узле находится много файлов, содержащих данные определенного типа, и есть опасность, что MIME-тип некоторых файлов не будет распознан.

    • 

    HostnameLookups
    . Данная директива может принимать значение
    On
    или
    Off
    . Если задано значение
    On
    , Apache будет преобразовывать адреса клиентов, обращающихся к серверу, в доменные имена и записывать их в файл протокола. Это упрощает анализ информации, содержащейся в файле. Однако преобразование адреса занимает дополнительное время и сетевые ресурсы, поэтому системные администраторы часто отказываются от такой возможности.

    • 

    LogLevel
    . Сервер Apache записывает информацию о своих действиях в файл протокола. Объем этой информации вы можете указывать, задавая значение
    debug
    ,
    info
    ,
    notice
    ,
    warn
    ,
    error
    ,
    crit
    ,
    alert
    или
    emerg
    директивы
    LogLevel
    . (Здесь значения директивы перечислены в порядке убывания объема данных, записываемых в файл протокола.) По умолчанию используется значение
    warn
    .

    • 

    CustomLog
    . Для данной директивы задаются два значения: имя файла протокола и формат информации, записываемой в этот файл. В данном случае речь идет о файле протокола, в который помещаются сведения о клиентах, обращающихся к серверу за получением Web-страниц. Формат может быть задан с помощью ключевых слов
    common
    ,
    agent
    ,
    referer
    и
    combined
    . Для обеспечения большей степени гибкости в конфигурационном файле
    httpd.conf
    предусмотрены средства, позволяющие администратору определить собственный формат записи данных. Чтобы создать несколько файлов протоколов, надо включить в конфигурационный файл несколько директив
    CustomLog
    .

    Помимо опций общего назначения, описанных выше, в файле

    httpd.conf
    содержатся также дополнительные опции. Многие из них не будут рассматриваться в данной книге. Если вам потребуется более подробная информация о настройке сервера, обратитесь к документации по Apache или к книгам, посвященным данному продукту.

    Описание каталогов

    В состав URL входит от двух до четырех компонентов.

    • Протокол. Первый компонент URL (например,

    http://
    или
    ftp://
    ) определяет протокол, используемый для взаимодействия. В данной главе в основном обсуждаются серверы, поддерживающие протокол HTTP (в этом случае начинается с символов
    http://
    ). Для обращения к защищенным узлам используются URL, начинающиеся с
    https://
    .

    • Имя узла. Имя узла, входящее в состав URL, представляет собой доменное имя компьютера, на котором выполняется Web-сервер. Например, в URL

    http://www.threeroomco.com/thepage/index.html
    именем узла является
    www.threeroomco.com
    . (Одному компьютеру может соответствовать несколько доменных имен. Такая ситуация возникает в том случае, если в конфигурационном файле сервера DNS для этого компьютера задано несколько записей
    А
    или
    CNAME
    . (Настройка сервера DNS описывались в главе 18).

    • Имя файла. В большинстве случаев HTTP-запрос предполагает передачу файла. В составе URL за именем узла следует имя файла (с указанием имени каталога). Например, в URL

    http://www.threeroomco.com/thepage/index.html
    ссылкой на файл является компонент
    thepage/index.html
    . Несмотря на то что имя файла отделяется от имени узла косой чертой, этот символ не является обозначением корневого каталога системы Linux. Путь к файлу начинается от корневого каталога документов, определенного для Web-узла. Если имя файла в составе URL не указано, сервер возвращает клиенту Web-страницу по умолчанию, заданную с помощью директивы
    DirectoryIndex
    .

    • Дополнительная информация. Некоторые URL содержат дополнительную информацию. Например, позиции в составе Web-документа может быть присвоено имя. Это имя указывается в URL после имени файла и отделяется от него символом

    #
    . URL, в начале которого указан протокол FTP, может содержать пользовательское имя и пароль.

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

    • 

    ServerRoot
    . С помощью этой директивы задается корень поддерева файловой системы, используемого для хранения двоичных файлов Apache. В большинстве случаев при инсталляции сервера устанавливается значение
    "/usr"
    этой опции. Изменять его не следует.

    • 

    DocumentRoot
    . В каталоге, указанном с помощью этой директивы, хранятся файлы, содержащие статические Web-страницы. По умолчанию для данной опции задается
    "/home/httpd/html"
    или другое подобное значение. (В файле
    httpd.conf
    имя каталога обычно помещается в кавычки.)

    Внимание

    Значение директивы

    DocumentRoot
    не следует завершать косой чертой. Несмотря на то что в системе Linux такая ссылка на каталог является корректной, для Apache она приведет к возникновению ошибки.

    • 

    UserDir
    . Если первый из каталогов, предшествующих имени файла в составе URL, начинается с символа
    ~
    , Apache интерпретирует его имя как имя пользователя и старается найти файл в рабочем каталоге соответствующего пользователя. Директива
    UserDir
    указывает имя подкаталога, в котором следует искать файл. Предположим, что для данной директивы задано значение
    public_html
    и удаленный пользователь ввел в поле адреса броузера URL
    http://www.threeroomco.compilation/~abrown/photos.html
    . Тогда Apache попытается вернуть пользователю файл
    photos.html
    , расположенный в подкаталоге
    public_html
    рабочего каталога пользователя
    abrown
    . Если задано значение
    disabled
    данной директивы, обращение к файлам, находящимся в рабочих каталогах пользователей, запрещено. Если вы хотите запретить доступ лишь к части пользовательских каталогов, вам надо после ключевого слова
    disabled
    указать имена пользователей, рабочие каталоги которых закрыты для обращения. Данная директива часто помещается в состав директивы
    <IfModule>
    , которая проверяет, загружен ли модуль Apache, предназначенный для поддержки пользовательских каталогов. (Модули Apache будут рассматриваться в следующем разделе.)

    • 

    DirectoryIndex
    . Некоторые URL не содержат имя файла; в них указано лишь имя каталога (в некоторых случаях оно завершается косой чертой). Когда сервер Apache получает подобный URL, он сначала старается найти файл индекса, имя которого задается с помощью директивы
    DirectoryIndex
    . В большинстве случаев по умолчанию принимается имя
    index.html
    , установленное в качестве значения данной опции при инсталляции сервера. При необходимости вы можете задать другое имя файла. Если пользователь введет URL
    http://www.threeroomco.com/public/
    , Apache вернет файл
    index.html
    , находящийся в подкаталоге public каталога, указанного с помощью директивы
    DocumentRoot
    . Если вы укажете несколько файлов индекса, Apache станет поочередно искать все файлы.

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

    Загрузка модулей Apache

    Одно из преимуществ Apache состоит в том, что этот Web-сервер является расширяемым. Программист может написать новый модуль, реализующий дополнительные возможности, при этом исходный код Apache остается неизменным. Более того, для использования нового модуля не нужно даже перекомпилировать сервер. Посредством модулей реализуются управление доступом, разбор дополнительной информации, передаваемой клиентами, и многие другие функции. Основная часть стандартных функций Apache также реализована в виде модулей.

    Просмотрев содержимое конфигурационного файла

    httpd.conf
    , вы найдете в нем ссылки на модули, формируемые посредством директивы
    LoadModule
    . Пример подобной ссылки приведен ниже.

    LoadModule mime_module lib/apache/mod_mime.so

    В качестве значения данной директивы задается внутреннее имя модуля (в данном примере

    mime_module
    ) и имя файла, в котором содержится сам модуль (
    lib/apache/mod_mime.so
    ). В данном случае имя файла указывается относительно каталога, заданного посредством директивы
    ServerRoot
    , но при желании вы можете указать полный путь.

    Модули, которые используются часто, можно непосредственно встраивать в двоичные файлы Apache. Чтобы определить, какие модули уже содержатся в исполняемых файлах, надо задать команду

    httpd -l
    (или
    apache -l
    ). В некоторых случаях модули, встроенные в состав Apache или загруженные посредством
    LoadModule
    , необходимо активизировать, включив для этого в конфигурационный файл директиву
    AddModule
    .

    AddModule mod_mime.с

    В качестве значения директивы

    AddModule
    задается имя файла с исходным кодом модуля. Для важных модулей в конфигурационном файле Apache содержится как директива
    LoadModule
    , так и директива
    AddModule
    .

    Как правило, администраторам не приходится включать новые модули; стандартная конфигурация Apache позволяет решать большинство задач, связанных с организацией функционирования Web-узла. Более того, чтобы уменьшить риск незаконного проникновения в систему, иногда приходится исключать некоторые модули. Удаляя модули, следует соблюдать осторожность, так как, не зная структуры Apache, нельзя заранее сказать, как отсутствие некоторых из них повлияет на работоспособность сервера.

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

    http://modules.apache.org
    . Выполнив поиск по ключевым словам, вы получите информацию о модулях, созданных сторонними организациями, и адреса Web-узлов этих организаций.

    Настройка kHTTPd

    В системах, подобных UNIX, и, в частности, в Linux, можно выделить два типа процессов: процессы ядра (kernel space processes) и пользовательские процессы (user space processes). Процесс ядра запускается очень быстро, а для запуска пользовательского процесса требуется относительно много времени, кроме того, пользовательский процесс часто должен осуществлять обмен важными данными с ядром. На практике такая особенность пользовательских процессов приводит к возникновению проблем, так как основная обработка информации осуществляется в пространстве пользовательского процесса. Задержка, связанная с запуском процесса, оправдывается повышением уровня безопасности и стабильности. Процессы ядра пользуются привилегиями при взаимодействии с аппаратными средствами, файловой системой и другими ресурсами, поэтому ошибка в программе или несанкционированное вмешательство извне могут привести к разрушению системы.

    Пытаясь найти способы увеличения производительности, специалисты заметили, что, несмотря на то, что Web-сервер представляет собой пользовательский процесс, большая часть его функций выполняется процессами ядра, в результате работа сервера в основном представляет собой последовательность обращений к ядру. На рис. 20.1 условно показано взаимодействие Web-сервера (в качестве примера которого выбран сервер Apache) с ядром. Реально обмен с ядром происходит гораздо сложнее, чем показано на рисунке, например, для чтения файла и передачи данных по сети необходимо выполнить целый ряд операций. При этом расходуется время процессора, память и другие ресурсы.

    Рис. 20.1. Web-сервер, выполняющийся как пользовательский процесс, интенсивно взаимодействует с ядром

    Для того чтобы оптимизировать обслуживание HTTP-запросов, были созданы простые Web-серверы, выполняющиеся как процессы ядра. В результате исчезла необходимость постоянного взаимодействия ядра и пользовательского процесса, и скорость обработки запросов клиента существенно увеличилась. Начиная с версии 2.4.x в состав ядра входят компоненты, реализующие Web-сервер kHTTPd. Подробная информация о таких компонентах находится по адресу

    http://www.fenrus.demon.nl
    . Настройка сервера, выполняющегося в виде пользовательского процесса, осуществляется путем записи данных в конфигурационные файлы, находящиеся в каталоге
    /proc/sys/net/khttpd
    . Для того чтобы обеспечить работу такого сервера, необходимо предпринять следующие действия.

    1. Включите поддержку kHTTPd при конфигурации ядра Linux. Для этого используется опция Kernel HTTPd Acceleration, находящаяся в меню Networking Options. Вы можете сформировать требуемый компонент в виде модуля или непосредственно включить его в состав ядра.

    2. Измените конфигурацию Apache так, чтобы этот сервер использовал для приема обращений клиентов порт 8080 или любой другой, отличный от порта 80.

    3. Перезагрузите систему или загрузите модуль ядра kHTTPd. В зависимости от конфигурации он либо загрузится автоматически, либо вам придется использовать команду

    insmod khttpd
    .

    4. Укажите серверу kHTTPd на то, что он должен принимать запросы клиентов через порт 80. Для этого надо выполнить команду

    echo 80 > /proc/sys/net/khttpd/serverport
    .

    5. Введите команду

    echo 8080 > /proc/sys/net/clientport
    . В результате ее выполнения kHTTPd будет передавать запросы, которые не может обработать самостоятельно, серверу Apache, используя порт 8080. (Если на шаге 2 вы указали порт, отличный от 8080, то должны задать тот же порт в составе данной команды.)

    6. Сообщите kHTTPd, в каком каталоге следует искать незакодированные статические файлы. Для этого выполните команду

    echo /home/httpd/html > /proc/sys/net/khttpd/documentroot
    . Вместо каталога
    /home/httpd/html
    вы можете указать другой каталог, следите лишь за тем, чтобы он совпадал с каталогом, который был задан в файле
    httpd.conf
    в качестве значения директивы
    DocumentRoot
    .

    7. Если на вашем Web-узле содержатся PHP3 или защищенные HTML-документы, повторите предыдущее действие, но поместите имя каталога в файл

    /proc/sys/net/khttpd/dynamic
    .

    8. Введите команду

    echo 1 > /proc/sys/net/khttpd/start
    , в результате которой сервер kHTTPd начнет работу. Указанный здесь файл является своеобразным аналогом сценария запуска SysV.

    При желании вы можете создать сценарий SysV или локальный сценарий, который автоматизировал бы выполнение этапов 4-8 описанной выше процедуры. Независимо от того, будет ли сервер запущен вручную или с помощью сценария, он будет поддерживать простые запросы, предполагающие передачу клиентам статических файлов, находящихся в указанном каталоге. Запрос который не может быть обработан средствами kHTTPd (например, запрос, предполагающий запуск CGI-сценария), будет передан Web-серверу, выполняющемуся как пользовательский процесс. При этом будет использован номер порта, указанный на этапах 2 и 5. Такая передача запроса связана с большими накладными расходами, поэтому если Web-узел предполагает в основном выполнение CGI-сценариев, использовать для его поддержки сервер kHTTPd нецелесообразно. Более того, применять kHTTPd имеет смысл только в том случае, если сервер Apache не справляется с нагрузкой. Если же интенсивность обращений к серверу не велика, предпочтительнее использовать один из серверов, выполняющихся как пользовательский процесс. Следует также помнить, что kHTTPd официально считается экспериментальным продуктом, поэтому он не может обеспечить такой надежности, как Apache или другие подобные серверы. Поскольку kHTTPd выполняется как процесс ядра, ошибка в программе может нанести системе гораздо больше вреда, чем ошибка в сервере, выполняющемся как пользовательский процесс. Таким образом, если у вас нет веских оснований применять kHTTPd, лучше использовать вместо него хорошо отлаженный и зарекомендовавший себя в работе сервер Apache.

    Сервер kHTTPd — не единственный продукт подобного типа, реализованный как процесс ядра. В системе Red Hat применяется сервер TUX, кроме того, в настоящее время ведется работа над созданием других серверов, предназначенных для выполнения в виде процессов ядра Linux.

    Поддержка форм и сценариев

    Несмотря на то что статические данные часто используются на Web-узлах, типы информации, с которыми может работать Web-сервер, не исчерпываются ими. Многие Web-серверы динамически генерируют Web-страницы. Например, поисковые серверы позволяют пользователю ввести данные в поле редактирования и передать их после щелчка на кнопке, а затем формируют Web-страницу, содержащую результаты поиска. Если вы хотите создать Web-узел, выполняющий подобные действия, вам надо уметь сконфигурировать его соответствующим образом. В этом разделе будут кратко рассмотрены принципы динамического создания Web-страниц и опции Apache, используемые для активизации соответствующих средств сервера. Чтобы получить более подробную информацию, обратитесь к документам, в которых описаны эти вопросы.

    Статические данные, формы и CGI-сценарии

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

    • HTML-файлы. В настоящее время основная часть данных в Internet представлена в формате HTML (Hypertext Markup Language язык разметки гипертекста). HTML-файлы имеют расширение

    .htm
    либо
    .html
    и содержат текстовую информацию с элементами разметки. Элементы разметки выполняют форматирование текста. Например, элемент
    <P>
    помечает начало абзаца, а
    </P>
    — конец абзаца. В языке HTML также предусмотрена возможность связывания Web-страниц с другими документами, расположенными в Internet (в частности, в Web). Такое связывание осуществляется посредством гипертекстовых ссылок. После щелчка на гипертекстовой ссылке ресурс, на который она указывает, автоматически воспроизводится либо сохраняется на диске. Конкретные действия по обработке ресурса зависят от настройки Web-броузера.

    • Текстовые файлы. Файлы такого типа чаще всего имеют расширение

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

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

    • Документы в различных форматах. Иногда на Web-страницах содержатся ссылки на файлы PDF, Microsoft Word, архивы

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

    Статические файлы содержатся в каталогах, заданных посредством директив

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

    При обработке динамических данных информация передается как от сервера клиенту, так и от клиента серверу. Работая в Internet, вы наверняка встречались с динамическими данными. Соответствующие примеры приведены ниже.

    • Поисковые серверы. Если вы укажете в поле адреса броузера URL поискового сервера, этот сервер предоставит Web-страницу, содержащую форму ввода. Форма позволяет вводить данные (в случае поискового сервера — ключевые слова). После щелчка на кнопке Search (или при активизации другого интерактивного элемента, запускающего процедуру поиска) введенные вами ключевые слова передаются Web-серверу, который осуществляет поиск и создает Web-страницу для представления результатов.

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

    • Web-узлы, настраиваемые с учетом интересов пользователей. Некоторые Web-узлы предоставляют пользователям специальные средства регистрации и передают данные, специально сформированные для этого пользователя. Например, обратившись на узел Slashdot (

    http://slashdot.org
    ), вы можете зарегистрироваться и указать при регистрации тип и объем интересующих вас данных. При работе с подобными Web-узлами на стороне клиента создается запись cookie, которая идентифицирует клиент при последующих обращениях. (Записи cookie часто создаются и при взаимодействии с серверами электронной коммерции.)

    Приведенные выше примеры представляют лишь частные случаи применения динамических Web-узлов. Возможности подобных узлов ограничены лишь воображением разработчиков и их готовностью реализовать свои планы. С точки зрения Web-сервера основное различие между динамическими и статическими Web-узлами состоит в том, что на динамическом узле HTML-документ (или документ в другом формате) создается в процессе работы сервера на основании данных, полученных от клиента. Для реализации динамических Web-узлов используются следующие средства.

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

    • CGI-Сценарии. CGI (Common Gateway Interface — интерфейс общего шлюза) определяет порядок взаимодействия программ, осуществляющих динамическую генерацию HTML-документов, с Web-сервером. CGI-сценарии могут быть написаны практически на любом языке. Для их создания используются не только компилируемые, но и интерпретируемые языки, например Perl. Web-сервер запускает CGI-сценарий на выполнение в том случае, если это предусмотрено в URL. В процессе выполнения сценарий получает от Web-сервера данные, введенные пользователем, при необходимости вызывает другие программы и генерирует Web-страницу, передаваемую в ответ на запрос клиента.

    • SSI (Server Side Includes — включаемые средства на стороне сервера) также предназначены для динамической генерации содержимого документа, но, в отличие от CGI-сценариев, которые формируют всю Web-страницу, SSI лишь изменяют шаблоны. SSI не обеспечивают такой гибкости, как CGI, но их удобно использовать для внесения небольших изменений в состав статических Web-страниц, например, для включения информации о текущей дате.

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

    Поддержка CGI-сценариев

    Если вы собираетесь использовать CGI-сценарии, то должны сообщить серверу Apache о своем намерении. При получении URL, содержащего имя сценария, сервер должен запустить этот сценарий, а также организовать обработку данных, переданных клиентом, формирование Web-страницы и передачу ее броузеру. При использовании CGI-сценария Apache выполняет роль посредника между клиентом и сценарием на стороне сервера. Настроить сервер для выполнения подобных функций не сложно. Вы должны лишь разрешить поддержку CGI-сценариев и сообщить Apache типы запросов, при получении которых следует запускать сценарии.

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

    LoadModule cgi_module lib/apache/mod_cgi.so

    Если компоненты, предназначенные для поддержки CGI-сценариев, включены в состав двоичных файлов Apache, вам надо активизировать их посредством директивы

    AddModule
    . (В некоторых случаях активизировать надо и компоненты, реализованные в виде модулей.)

    AddModule mod_cgi.с

    В результате сервер Apache получает возможность запускать CGI-сценарии и взаимодействовать с ними. Вам осталось лишь разрешить поддержку CGI для конкретных файлов и каталогов. Сделать это можно несколькими способами.

    • 

    ScriptAlias
    . Данная директива решает две задачи. Во-первых, она сообщает серверу Apache о том, что файлы, содержащиеся в указанном каталоге, должны интерпретироваться как CGI-сценарии. Во-вторых, посредством этой директивы задается соответствие между каталогом, расположенным на диске, и каталогом, который указывается в URL. Например, выражение
    ScriptAlias /scripts/ "/home/httpd/cgi-bin/"
    отображает физический каталог
    /home/httpd/cgi-bin/
    в каталог
    /scripts
    в составе URL. В результате, если пользователь укажет URL
    http://www.threeroomco.com/scripts/test.pl
    , сервер запустит на выполнение сценарий
    test.pl
    , содержащийся в каталоге
    /home/httpd/cgi-bin/
    . Часто при инсталляции Apache опции
    LoadModule
    и
    AddModule
    по умолчанию включаются в конфигурационный файл; вероятнее всего, вы встретите их, просматривая содержимое файла
    httpd.conf
    . Для работы с CGI-сценариями часто бывает нужен модуль
    mod_alias
    . Соответствующая директива обычно по умолчанию включается в состав конфигурационного файла. При возникновении проблем, проверьте, загружен ли данный модуль.

    • 

    Options +ExecCGI
    . Разрешить выполнение CGI-сценариев можно, указав значение
    +ExecCGI
    директивы Options. Данная опция не должна указываться для всей системы, ее имеет смысл применять только к отдельным каталогам (т.е. она должна присутствовать только в составе директивы
    <Directory
    >).

    • 

    .htaccess
    . Контролировать доступ к отдельному каталогу можно, размещая в нем файл
    .htaccess
    . Если в файле
    .htaccess
    содержится запись
    Options +ExecCGI
    , Apache будет запускать CGI-сценарии, находящиеся в этом каталоге. Чтобы это произошло, в файле
    httpd.con
    f должна находиться запись
    AllowOverride Options
    ; эта запись должна воздействовать как минимум на каталог, содержащий файл
    .htaccess
    .

    Внимание

    Наличие записей

    Options +ExecCGI
    и
    AllowOverride Options
    представляет угрозу для системы. При неправильном использовании этих средств пользователи получают возможность создавать сценарии, предоставляющие полный доступ к системе. По этой причине в большинстве дистрибутивных пакетов использование файла
    .htaccess
    запрещено.

    Часто при настройке Apache в конфигурационный файл включается директива

    ScriptAlias
    , отображающая каталог
    /home/httpd/cgi-bin
    файловой системы в каталог
    /cgi-bin
    в составе URL. Такая настройка удобна для администратора. Чтобы установить CGI-сценарий и сделать его доступным для пользователя, достаточно разместить соответствующий файл в каталоге
    /home/httpd/cgi-bin
    . При этом необходимо обратить внимание на права доступа к файлу. Поскольку сценарий предназначен для выполнения, для файла, содержащего код этого сценария, должен быть установлен соответствующий признак. Если вы написали сценарий самостоятельно или скопировали его с Web- или FTP-узла, то после размещения его в каталоге
    /home/httpd/cgi-bin
    надо выполнить команду
    chmod a+x имя_сценария
    .

    Создание CGI-сценариев

    Подобно другим сценариям, CGI-сценарии представляют собой программный код, предназначенный для выполнения. Данная глава не является руководством по написанию CGI-сценариев; в этом разделе приведены лишь некоторые общие рекомендации по работе с ними. Если вам потребуется дополнительная информация о создании CGI-сценариев, обратитесь к Web-странице по адресу

    http://httpd.apache.org/docs/howto/cgi.html
    либо к одной из книг, посвященных этой теме.

    CGI-сценарии принимают входные данные через стандартный ввод и выводят сгенерированную Web-страницу через стандартный вывод. Вывод текста, который должен быть передан клиенту, ничем не отличается от обычного вывода на консоль. Необходимо лишь помнить, что клиент просматривает информацию посредством Web-броузера, поэтому ваш CGI-сценарий должен генерировать информацию в формате HTML либо в другом формате, поддерживаемом Web-клиентом. (Например, вы можете сформировать ответ в виде графического файла.)

    Помимо HTML-кода, CGI-сценарий должен создать поле заголовка

    Content-Type
    и в качестве его значения указать MIME-тип данных, передаваемых клиенту. Это поле имеет следующий вид:

    Content-type: text/html\r\n\r\n

    В данном примере указан MIME-тип

    text/html
    , означающий, что в ответ на запрос клиента CGI-сценарий сгенерировал HTML-документ. Символы
    \r\n\r\n
    соответствуют двум переводам строки, в результате поле заголовка будет отделено от остальных данных пустой строкой. Код сценария зависит от используемого вами языка программирования. Простейший пример CGI-сценария, написанного на языке Perl, приведен в листинге 20.1. Как видно из листинга, в процессе выполнения сценарий выводит строку текста. Записав файл с этим кодом в каталог, предназначенный для размещения CGI-сценариев, установите права доступа. Если после этого вы зададите URL сценария в поле адреса броузера, то увидите строку "Hello, Web".


    Листинг 20.1. Простой CGI-сценарий, написанный на языке Perl

    #!/usr/bin/perl

    print "Content-type: text/html\r\n\r\n";

    print "Hello, Web";

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

    =
    , а пары имя-значение разделяются символами
    &
    . Пример строки параметров, передаваемой CGI-сценарию, приведен ниже.

    city=Oberlin&state=OH&zip=44074

    Перед тем как использовать полученные данные, надо произвести разбор строки параметров. В языке Perl предусмотрены мощные средства работы со строками. Этот факт стал одной из причин популярности Perl среди разработчиков CGI-сценариев.

    Повышение уровня защиты при использовании CGI-сценариев

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

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

    User
    и
    Group
    в файле
    httpd.conf
    . CGI-сценарии выполняются с полномочиями пользователя, указанного посредством этих директив, поэтому, используя учетную запись, предусматривающую минимальные права, вы ограничите возможности злоумышленника, если тому удастся получить контроль над CGI-сценарием. Идеальный вариант — создать учетную запись и группу, специально предназначенные для обеспечения работы сервера Apache; регистрация в системе с помощью этой учетной записи должна быть запрещена. Однако подобная мера не гарантирует безопасность системы. Недостатки в сценарии могут стать базой, используя которую взломщик продолжит действия по проникновению в систему.

    Чтобы уменьшить опасность для системы, можно использовать готовые сценарии, поставляемые в составе библиотек. Такой подход, с одной стороны, упростит процедуру создания Web-узла, а с другой стороны, позволит избежать грубых ошибок в сценарии. Библиотеки сценариев размещены на различных Web-узлах, например, вы можете обратиться по адресу

    http://www.cpan.org
    .

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

    Поддержка защищенных Web-узлов

    При использовании сценариев часто осуществляется шифрование передаваемых данных. Действия по кодированию и декодированию информации при обмене между Web-сервером и Web-броузером определяется протоколом SSL (Secure Sockets Layer — уровень защищенного гнезда). Протокол SSL часто используется на узлах электронной коммерции для защиты важных данных. Для поддержки SSL-кодирования при работе Apache требуется дополнительное программное обеспечение, например,

    mod_ssl
    (
    http://www.modssl.org
    ) или программы, разработанные в рамках проекта Apache-SSL (
    http://www.apache_ssl.org
    ). Для поддержки SSL можно также использовать продукты,

    распространяемые на коммерческой основе.

    Задачи, решаемые с помощью SSL

    SSL — это технология кодирования, подобная той, которая используется при обеспечении работы протокола удаленной регистрации SSH. (Строго говоря, эти протоколы применяют одни и те же средства шифрования, так как работа популярного пакета OpenSSH основана на использовании пакета OpenSSL, который также применяется некоторыми реализациями Apache, поддерживающими SSL.) SSL позволяет решить следующие две проблемы, возникающие при обмене между Web-клиентом и Web-сервером.

    • Шифрование. SSL позволяет обеим взаимодействующим сторонам выполнять шифрование данных, обеспечивая тем самым их сохранность. Это необходимо в тех случаях, когда Web-клиент должен обмениваться с Web-сервером важной информацией, например передавать номера платежных карточек и банковских счетов. Для кодирования применяется технология открытого ключа, согласно которой каждая из взаимодействующих сторон использует два ключа. Шифрование осуществляется с помощью открытого, или общего, ключа, предоставляемого другой взаимодействующей стороной, а для расшифровки применяется собственной закрытый, или личный, ключ. Таким образом, передавая данные, участник сетевого взаимодействия уверен, что расшифровать их сможет только тот, для кого они предназначены.

    • Аутентификация. Даже при использовании шифрования передача важных данных по Internet связана с определенным риском. Может оказаться, что принимающий узел — не тот, за кого он себя выдает. Например, если вы ввели в поле адреса броузера URL

    http://www.abigretailer.com
    , можете ли вы быть уверены, что ваш запрос попадет на тот узел, на который вы его отправляете? Не исключено, что злоумышленнику удалось изменить настройку сервера DNS или маршрутизатора и перенаправить запрос на свой компьютер. SSL предоставляет средства аутентификации участников взаимодействия. Идентификация осуществляется посредством сертификатов, предоставляемых организацией, специализирующейся на этом. Сертификат, полученный от сертифицирующей организации (CA — certificate authority), представляет собой цифровой код, используемый для создания общего ключа. Если один участник взаимодействия передал свой сертификат, полученный от CA, то другой участник может быть уверен, что его партнер по обмену данными — именно тот, за кого он себя выдает. (В последнее время стало ясно, что даже сертификаты не позволяют гарантированно идентифицировать участников взаимодействия. Так, в 2001 г. сертификаты Microsoft были по ошибке выданы организациям, не имеющим к корпорации никакого отношения.)

    На заметку

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

    http://www.apache-ssl.org/#Digital_Certificates
    . Пользователям, обращающимся к Web-узлам посредством броузеров, сертификаты не нужны, так как Web-серверы практически никогда не проверяют идентичность пользователей.

    При работе посредством протокола SSL используется порт, отличный от порта 80. По умолчанию для взаимодействия по защищенному протоколу HTTP (HTTPS) применяется порт 443. Чтобы Web-броузер указал в запросе этот порт, URL, введенный пользователем, должен начинаться с символов

    https://
    . Настраивая Apache для поддержки SSL, вы можете установить один сервер, который будет по-разному реагировать на обращения через порты с номерами 80 и 443, либо использовать два сервера различных типов. Первый подход реализовать проще, но может возникнуть ситуация, при которой целесообразнее использовать два сервера (например, Apache для обработки SSL-запросов и
    thttpd
    для поддержки обычного HTTP-взаимодействия).

    Настройка средств поддержки SSL

    Для того чтобы сервер Apache мог поддерживать SSL-соединения, надо сконфигурировать SSL-пакет. В настоящее время в системе Linux чаще всего используются два таких пакета.

    • SSLeay (

    http://www2.psy.uq.edu.au/~ftp/Crypto/ssleay/
    )

    • OpenSSL (

    http://www.openssl.org
    )

    Вскоре после своего появления OpenSSL приобрел статус стандарта в системе Linux. Он содержится в составе многих дистрибутивных пакетов Linux, включая Debian, Mandrake, Red Hat и SuSE. Пакеты SSLeay и OpenSSL выполняют одинаковые функции, но исполняемые файлы носят разные имена (

    ssleay
    и
    openssl
    ) и для их настройки используются различные конфигурационные файлы.

    После инсталляции OpenSSL вам необходимо получить сертификат. Для работы в Internet потребуется сертификат, выданный CA, но для тестирования сервера можно создать сертификат самостоятельно. Некоторые сценарии установки Apache SSL создают сертификат автоматически. Если в процедуре инсталляции не предусмотрено формирование сертификата, вы можете использовать следующую команду:

    # openssl req $@ -new -x509 -nodes \

     -config /usr/share/doc/apache-ssl/examples/ssleay.cnf \

     -out /etc/apache-ssl/apache.pem \

     -keyout /etc/apache-ssl/apache.pem

    На заметку

    В данном примере предполагается, что настройка средств поддержки SSL осуществляется посредством конфигурационного файла

    /etc/apache-ssl
    , а в составе пакета поставляется образец конфигурационного файла
    /usr/share/doc/apache-ssl/example/ssleay.cnf
    . При необходимости вы можете изменить имена файлов или каталогов. Обратная косая черта указывает на то, что продолжение команды находится на следующей строке. Если вся команда помещается в одной строке, символ
    \
    можно не использовать.

    В процессе выполнения утилита

    openssl
    запросит дополнительную информацию, например имя компьютера. Эта информация включается в состав сертификата, который содержится в файле
    /etc/apache-ssl/apache.pem
    .

    Впоследствии сгенерированный вами сертификат придется заменить сертификатом, который предоставит вам сертифицирующая организация. Если при использовании сертификата, созданного самостоятельно, пользователь, обратившийся к Web-узлу, увидит предупреждающее сообщение, то при наличии сертификата, выданного CA, такое сообщение не выводится. Предупреждающее сообщение, отображаемое броузером Opera в системе Linux, показано на рис. 20.2. В других броузерах формат сообщения будет отличаться от приведенного на рисунке.

    Рис. 20.2. При использовании сертификата, сгенерированного самостоятельно, пользователи, взаимодействующие с узлом, увидят предупреждающее сообщение о том, что сертификат не распознан или срок его действия истек

    Установка компонентов Apache, предназначенных для поддержки SSL

    Считается, что поддержка SSL в сервере Apache осуществляется за счет дополнительных модулей. На практике для установки SSL-модулей необходимо внести некоторые изменения в структуру сервера и повторно скомпилировать Apache. В некоторых инсталляционных пакетах SSL-модули включены по умолчанию, и код сервера скомпилирован с учетом использования SSL-компонентов. Если вы попытаетесь объединить компоненты обычного сервера Apache и пакета, сформированного для обеспечения поддержки SSL, такой сервер скорее всего работать не будет.

    Во многих случаях для управления сервером, созданным с учетом поддержки SSL, используется конфигурационный файл, отличный от файла, применяемого для настройки обычного сервера Apache. Например, в системе Debian сервер Apache, настроенный для поддержки SSL, использует конфигурационный файл /

    etc/apache-ssl
    , в то время как для стандартной конфигурации Apache в этой системе применяется файл
    /etc/apache
    . Конфигурационные файлы для SSL-серверов во многом совпадают с файлами для Apache без поддержки SSL, за исключением некоторых директив, значения которых вам, возможно, придется изменить. Часть этих директив описана ниже.

    • 

    ServerType
    . Сервер с поддержкой SSL не может запускаться посредством суперсервера, поэтому для директивы
    ServerType
    должно быть установлено значение
    standalone
    .

    • Использование портов. Для взаимодействия по протоколу SSL используется порт 443. При этом необходимо учитывать, что директива

    Listen
    позволяет связать сервер с определенным номером порта.

    • Загрузка модулей. В качестве значений директив

    LoadModule
    и
    AddModule
    могут быть указаны один или несколько модулей, имеющих отношение к поддержке SSL. Как правило, в конфигурационном файле, сформированном по умолчанию, значения этих директив установлены корректно.

    • 

    SSLRequireSSL
    . Включив данную директиву в состав
    <Directory>
    , вы запретите доступ к каталогу для клиентов, не поддерживающих SSL. (Значения данной директивы не указываются.) Использование
    SSLRequireSSL
    позволяет предотвратить передачу важных данных по незащищенному каналу. Очевидно, что, помимо данной опции, следует применять и другие средства, ограничивающие доступ к каталогу.

    • 

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

    • 

    SSLCACertificatePath
    . Эта директива указывает на каталог, содержащий сертификат. Например, в качестве значения
    SSLCACertificatePath
    может быть указано
    /etc/apache-ssl
    .

    • 

    SSLCertificateFile
    . В качестве значения данной директивы указывается файл, содержащий сертификат (например,
    /etc/apache-SSI/apache.pem
    ).

    Помимо указанных выше, для управления SSL-взаимодействием могут использоваться и другие директивы. Информацию о них можно получить, просмотрев комментарии в составе конфигурационного файла либо обратившись к документации на сервер Apache или к книгам по данной теме.

    Установив конфигурацию сервера, вы можете запускать его для поддержки SSL-взаимодействия. Чтобы обратиться к серверу, надо ввести в поле адреса броузера URL, начинающийся символами

    https://
    . Если вы самостоятельно сгенерировали сертификат, броузер отобразит предупреждающее сообщение, подобное тому, которое показано на рис. 20.2. Чтобы протестировать создаваемый вами узел, вы можете принять этот сертификат (некоторые броузеры позволяют задать условия дальнейшего использования сертификата).

    Внимание

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

    Организация виртуальных доменов

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

    Использование виртуальных доменов

    Наличие виртуальных доменов позволяет Web-серверу по-разному обрабатывать запросы, в зависимости от имен, указанных в них. (Чтобы к Web-серверу можно было обращаться по разным именам, необходимо создать несколько записей в конфигурационном файле DNS-сервера.) Примеры использования виртуальных доменов описаны ниже.

    • Если имя сервера изменилось (сервер был перенесен на другой компьютер в составе того же домена), вы можете настроить Apache так, чтобы при обращении по старому имени отображалось сообщение об ошибке и запрос перенаправлялся по новому имени. Со временем, когда большинство пользователей изменят закладки на своих броузерах, от применения виртуальных доменов можно будет отказаться.

    • Если две сотрудничающие компании или два отдела одной компании хотят создать свои Web-узлы, они могут разместить их на одном Web-сервере, сконфигурировав сервер для поддержки виртуальных доменов. В некоторых случаях (особенно если Web-узлы создаются для отделов одной организации) использовать подкаталоги удобнее, чем организовывать обращение к одному и тому же серверу по разным именам, но часто решение о создании виртуальных доменов оправдано.

    • Виртуальные узлы могут использовать соседи по студенческому общежитию. Такой подход применим только для тех пользователей, компьютеры которых постоянно соединены с Internet.

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

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

    Конфигурация виртуальных доменов

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

    Использование
    VirtualDocumentRoot

    VirtualDocumentRoot
    — одна из основных директив, используемых для настройки виртуальных доменов. Эта директива позволяет указать имя каталога, которое будет выполнять роль корневого каталога документов при указании в составе запроса определенного имени. В качестве значения
    VirtualDocumentRoot
    указывается имя каталога, которое может содержать различные переменные. (Назначение этих переменных описано в табл. 20.1.)


    Таблица 20.1. Переменные, используемые для создания имен каталогов

    Переменная Описание
    %%
    Символ
    %
    в имени каталога
    %p
    Номер порта, используемый сервером
    %N.M
    Часть имени, отделенная от других частей точками.
    N
    — это число, ссылающееся на компонент имени. 0 означает все доменное имя, 1 — первый компонент, 2 — второй компонент и т.д. Значение
    N
    также может быть отрицательным: — 1 определяет последний компонент имени, — предпоследний компонент и т.д.
    M
    принимает такие же значения, как и
    N
    , но ссылается не на компонент имени, а на символ в составе компонента. Если вы хотите использовать весь компонент имени, точку и
    M
    можно не указывать.

    Рассмотрим в качестве примера следующую запись:

    VirtualDocumentRoot /home/httpd/%0

    Она сообщает серверу о том, что он должен использовать подкаталог каталога

    /home/httpd
    , имя которого соответствует полному имени сервера, указанному в составе запроса. Например, если в запросе задан URL
    http://www.threeroomco.com/index.html
    , сервер будет искать файл
    /home/httpd/www.threeroomco.com/index.html
    . Такой способ очень удобен, но если вам необходимо поддерживать большое количество Web-узлов, то придется создавать много подкаталогов с достаточно длинными именами (в данном примере все подкаталоги должны присутствовать в каталоге
    /home/httpd
    ). При необходимости вы можете использовать в качестве имени каталога часть доменного имени. Пример подобного подхода иллюстрирует приведенная ниже запись.

    VirtualDocumentRoot /home/httpd/%-1/%-2

    Если в конфигурационном файле содержится такое выражение, то, получив запрос, в котором указан URL

    http://www.threeroomco.com/index.html
    , Apache вернет клиенту файл
    /home/httpd/com/threeroomco/index.html
    (если он имеется на сервере). Если вы хотите использовать в имени каталога лишь один символ из доменного имени, вам надо включить в состав конфигурационного файла запись наподобие следующей:

    VirtualDocumentRoot /home/httpd/%-2.1/%0

    Теперь при получении URL

    http://www.threeroomco.com/index.html
    Apache вернет клиенту файл
    /home/httpd/t/www.threeroomco.com/index.html
    . Переменная
    %-2.1
    определяет первый (
    .1
    ) символ в составе имени домена (
    -2
    ), предшествующего имени домена верхнего уровня.

    Независимо от значения директивы

    VirtualDocumentRoot
    , вам надо задать значение
    Off
    для директивы
    UseCanonicalName
    .

    UseCanonicalName Off

    Если директива

    UseCanonicalName
    будет иметь значение
    On
    , устанавливаемое по умолчанию при инсталляции сервера, Apache будет использовать для обработки относительных ссылок доменное имя компьютера, на котором он выполняется. Например, если в документе
    index.html
    содержится ссылка на Web-страницу
    products.html
    , Apache будет стараться извлечь ее, основываясь на своем каноническом имени. При наличии виртуальных доменов такое поведение недопустимо. Если задать значение
    Off
    директивы
    UseCanonicalName
    , то для обработки относительных ссылок Apache будет применять имя, соответствующее виртуальному домену.

    Использование
    <VirtualHost>

    Альтернативный подход к созданию виртуальных доменов предполагает непосредственное описание каждого из них. Для этого в конфигурационном файле Apache предусмотрены две специальные директивы.

    • 

    NameVirtualHost
    . Данная директива указывается в главном конфигурационном файле Apache и информирует сервер о том, что вы собираетесь использовать виртуальные узлы. В качестве значения этой директивы чаще всего указывается символ
    *
    ; при этом необходимо определять виртуальные домены для поддержки всех типов обращения к серверу. Кроме того, значением опции
    NameVirtualHost
    может быть IP-адрес, связанный с сетевым интерфейсом; в этом случае конфигурация основного сервера применяется ко всем запросам, за исключением запросов, переданных через этот интерфейс, и запросов, соответствующих определению виртуального узла.

    • 

    <VirtualHost>
    . Данная директива указывает на начало блока, содержащего определение виртуального домена. Для этой директивы задаются те же значения, что и для директивы
    NameVirtualHost
    . Признаком окончания блока служит директива
    </VirtualHost>
    . В состав блока включаются директивы, определяющие конфигурацию виртуального домена; здесь вы можете указать многие из тех директив, которые используются для настройки сервера, не поддерживающего виртуальные узлы.

    В составе блока, сформированного с помощью

    <VirtualHost>
    , обычно указываются директивы
    ServerName
    (она определяет имя, которому соответствует данный блок) и
    DocumentRoot
    . При необходимости вы также можете настроить другие характеристики сервера, например разрешить выполнение CGI-сценариев. В качестве примера рассмотрим следующий фрагмент конфигурационного файла, который описывает два виртуальных Web-узла:

    NameVirtualHost *


    <VirtualHost *>

     ServerName www.threeroomco.com

     DocumentRoot /home/httpd/threeroomco/html

     ScriptAlias /cgi-bin/ "/home/httpd/threeroomco/cgi-bin/"

    </VirtualHost>


    <VirtualHost *>

     ServerName www.pangaea.edu

     DocumentRoot /home/httpd/pangaea-u/html

    </VirtualHost>

    Если сервер настроен подобным образом, то при обращении к нему посредством имени

    www.threeroomco.com
    он будет предоставлять клиенту статические файлы, которые находятся в каталоге
    /home/httpd/threeroomco/html
    , или запускать на выполнение сценарии, содержащиеся в каталоге
    /home/httpd/threeroomco/cgi-bin
    . Если же в запросе указано имя
    www.pangaea.edu
    , то статические файлы будут извлекаться из каталога
    /home/httpd/pangaea-u/html
    , а выполнение CGI-сценариев будет запрещено.

    В отличие от

    VirtualDocumentRoot
    , использование директивы
    <VirtualHost>
    позволяет настроить каждый виртуальный узел и размещать документы в произвольных позициях файловой системы. С другой стороны,
    VirtualDocumentRoot
    предельно упрощает добавление новых доменов; для этого достаточно создать новый каталог. В большинстве случаев администраторы предпочитают использовать директиву
    <VirtualHost>
    , однако вы можете выбрать любой из этих способов, исходя из особенностей поставленной перед вами задачи.

    Создание содержимого Web-узла

    Несмотря на то что данная глава в основном посвящена особенностям настройки и выполнения Web-сервера, администратору, осуществляющему поддержку Web-сервера, необходимо представлять себе, как создаются документы, которые размещаются на Web- узле. Некоторые типы Web-страниц (точнее, средства для их динамической генерации) рассматривались в предыдущих разделах, однако основную часть данных, расположенных на Web-узлах, составляют HTML-документы. Для создания HTML-документов, а также файлов, которые могут использоваться ими (например, файлов с графическими данными), часто применяются специальные инструментальные средства. Научившись работать с этими инструментами и зная особенности интерпретации HTML-кода клиентскими программами, вы сможете без труда создать Web-узел, пригодный для просмотра с помощью наиболее популярных современных броузеров.

    Форматы данных, используемых при создании Web-узла

    Несмотря на наличие специализированных инструментальных средств, необходимо знать форматы основных данных, применяемых при создании Web-узлов. Как правило, основное содержимое Web-узла составляют статические Web-страницы, включающие текстовую и графическую информацию.

    Основу большинства Web-страниц составляет HTML-файл. Этот файл содержит текстовые данные, пригодные для редактирования с помощью обычного текстового редактора. Пример простого HTML-файла приведен в листинге 20.2. Данные, содержащиеся в HTML-файле, делятся на две категории: текст, предназначенный для отображения в окне броузера, и последовательности символов, помещенные в угловые скобки, называемые дескрипторами. Дескрипторы представляют собой элементы форматирования, а также выполняют некоторые другие функции. Большинство дескрипторов используются парами, каждая из которых состоит из открывающего и закрывающего дескрипторов. Открывающий и закрывающий дескрипторы имеют одно и то же имя, но перед именем закрывающего дескриптора указывается символ

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

    Назначение некоторых из дескрипторов, приведенных в листинге 20.2, очевидно, другие требуют более подробного рассмотрения. Ниже представлено описание дескрипторов, наиболее часто встречающихся в HTML-документах.


    Листинг 20.2. Пример HTML-файла

    <!DOCTYPE html public "-//IETF//DTD HTML 2.0//EN">

    <HTML>

     <HEAD>

      <TITLE>Пример Web"=страницы</TITLE>

     </HEAD>

     <BODY BGCOLOR="#FFFFFFF" TEXT="#000000">

      <CENTER><H1 ALIGN= "CENTER">Пример Web"=страницы</H1></CENTER>

      <IMG SRC="graphics/logo.jpg" ALT="Logo" WIDTH="197" HEIGHT="279">

      <P>Данная Web"=страница содержит <А HREF="http://www.threeroomco.com/anotherpage.html"> гипертекстовую ссылку. </A></P>

     </BODY>

    </HTML>

    • 

    <HTML>
    . Данный дескриптор сообщает о том, что документ является HTML-документом. Большинство броузеров не требует наличия этого дескриптора, но желательно указывать его, так как он предусмотрен спецификацией языка.

    • 

    <HEAD>
    . HTML-документ делится на заголовок и тело документа. В заголовке в основном содержится информация, не предназначенная для отображения (за исключением содержимого элемента
    <TITLE>
    ). Заголовок содержится между открывающим и закрывающим дескриптором
    <HEAD>
    .

    • 

    <TITLE>
    . Строка, заданная с помощью этого дескриптора, выводится в заголовке окна броузера. Эта же строка отображается в списке закладок.

    • 

    <BODY>
    . С помощью данного дескриптора формируется тело HTML-документа. В состав дескриптора
    <BODY>
    часто включают атрибуты, определяющие цвет текста и фона, и другие характеристики документа.

    • 

    <H1>
    . Заголовки позволяют делить текст документа на разделы и, как правило, отображаются шрифтом большего размера, чем обычный текст. Создавая код Web-страницы, вы можете включать в него заголовки различных уровней. Наивысшим считается уровень 1 (
    <H1>
    ), а самым низким — уровень 6 (
    <H6>
    ). В листинге 20.2 в дескрипторе
    <H1>
    содержится атрибут
    ALIGN
    , который сообщает Web-броузеру о том, что текст заголовка должен быть размещен по центру экрана. К сожалению, не все броузеры правильно обрабатывают атрибут выравнивания в составе заголовка, поэтому, чтобы обеспечить корректное отображение информации, его приходится дублировать дескриптором
    <CENTER>
    .

    • 

    <CENTER>
    . В листинге 20.2 заголовок, формируемый с помощью дескриптора
    <H1>
    , выравнивается по центру экрана не только посредством атрибута
    ALIGN
    , но и с помощью дескриптора
    <CENTER>
    . Во многих современных броузерах такая избыточность не нужна, но если вы хотите, чтобы документ корректно отображался в старых броузерах, вам следует задавать как дескриптор
    <CENTER>
    , так и атрибут
    ALIGN
    .

    • 

    <IMG>
    . Данный дескриптор позволяет включать на Web-страницу графические изображения. Пример использования дескриптора
    <IMG>
    приведен в листинге 20.2. Обычно в дескриптор
    <IMG>
    включают различные атрибуты. Атрибут
    SRC
    указывает на файл, содержащий изображение; если изображение хранится на том же сервере, значением атрибута является имя файла, а если файл с изображением находится на другом сервере, то в качестве значения
    SRC
    задается абсолютный URL этого файла. Атрибут
    ALT
    задает текст, описывающий изображение. Этот текст отображается броузерами, в которых запрещен вывод изображений, а также выводится на экран при помещении на изображение курсора мыши. Атрибуты
    WIDTH
    и
    HEIGHT
    задают ширину и высоту изображения, что позволяет броузеру отображать текст документа еще до того, как загрузка изображения закончится.

    • 

    <P>
    . Данный дескриптор определяет начало абзаца. Web-броузер автоматически переносит текст, достигший правого края окна, на новую строку.

    • 

    <А HREF>
    . С помощью дескриптора
    <А>
    создается гипертекстовая ссылка (при этом URL документа, на который указывается ссылка, задается в качестве значения атрибута
    HREF
    ). Текст ссылки выделяется в окне броузера цветом и подчеркиванием. После щелчка мышью на ссылке в окне броузера отображается документ, URL которого задан посредством атрибута
    HREF
    .

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

    Помимо HTML-файлов, Web-серверы могут предоставлять клиентским программам и другие типы документов. Так, например, в листинге 20.2 был приведен пример изображения, включаемого на Web-страницу с помощью дескриптора

    <IMG>
    . В документе можно создавать гипертекстовые ссылки, указывающие на текстовые и графические файлы, исполняемые программы, сценарии и другие типы данных. Необходимо лишь, чтобы сервер мог определить MIME-тип каждого из документов. Для этого используется файл
    mime.types
    , который рассматривался ранее в этой главе. Если сервер Apache не может определить MIME-тип файла, он передает данные как неформатированный текст. Это становится источником проблем при работе некоторых операционных систем, так как специальные символы, находящиеся в составе файла, могут разрушить изображение на экране.

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

    • GIF. Graphics Interchange Format (формат обмена графическими данными) приобрел популярность в 1980-х. В данном формате используется схема сжатия без потери информации. Это означает, что изображение, полученное после распаковки, будет в точности совпадать с исходным изображением. Для представления цвета в GIF-изображениях используется до 8 битов, т.е. такое изображение может содержать максимум 256 цветов.

    • PNG. Portable Network Graphic (переносимые сетевые графические данные) также использует схему сжатия без потери информации. В отличие от GIF, PNG позволяет представлять цвет посредством большего количества битов (обычно применяется 24-битовое представление, но PNG дает возможность использовать для этой цели до 64 битов). Недостатком PNG является тот факт, что данный формат поддерживается не всеми броузерами. Более подробную информацию о PNG можно получить по адресу

    http://www.libpng.org/pub/png/
    .

    • JPEG. В формате Joint Photographic Expert Group (объединенная группа экспертов по обработке фотоснимков) используется сжатие с потерей информации. В результате достигается большая степень сжатия по сравнению с форматами GIF и PNG, но распакованное изображение отличается от исходного. Для представления цвета в JPEG может применяться до 24 битов.

    Как правило, форматы, использующие сжатие без потери информации, лучше подходят для представления чертежей, рисунков и других подобных изображений. При переводе в формат JPEG такие изображения искажаются. Оцифрованные фотоснимки лучше представлять в форматах, позволяющих кодировать цвет посредством большого числа битов (например, PNG или JPEG). Потеря информации при JPEG-сжатии практически не влияет на качество фотоснимка.

    При создании JPEG-изображений графический пакет позволяет выбрать степень сжатия. Низкая степень сжатия приводит к тому, что размер файла оказывается очень большим. Высокая степень сжатия позволяет получить файл небольшого размера, но качество изображения становится недопустимо низким. Выбирая степень сжатия графических файлов, предназначенных для представления в Web, необходимо, с одной стороны, обеспечить приемлемое качество изображения, а с другой стороны, добиться, чтобы время его загрузки было не слишком большим.

    Инструментальные средства создания Web-страниц

    Несмотря на то что HTML-документы можно создавать с помощью обычных текстовых редакторов, многие Web-дизайнеры предпочитают использовать для этой цели специализированные инструменты с графическим пользовательским интерфейсом. Данные инструменты позволяют редактировать текст документа подобно текстовым процессорам WYSIWYG (what you see is what you get); при этом для выравнивания, создания абзацев, отображения текста полужирным шрифтом и выполнения других подобных действий используются кнопки, расположенные на панели инструментов. Поскольку при работе сервера Apache не имеет значения, каким способом были сформированы Web-страницы, нет никаких оснований отказываться от использования специализированных инструментальных средств. Единственным исключением является редактор Microsoft Front Page. Этот инструмент создает Web-страницы, ориентированные на конкретный сервер, поэтому при работе с Apache лучше отказаться от его использования.

    На заметку

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

    Ниже описаны некоторые инструменты, которые могут быть использованы при создании Web-страниц.

    • Текстовые процессоры. Многие современные текстовые процессоры предоставляют возможность экспортировать документы в формате HTML. (Поскольку средства форматирования текстовых процессоров мощнее, чем соответствующие средства, предусмотренные в языке HTML, при сохранении документа в виде HTML-файла внешний вид текста может несколько измениться.) Для тех, кто привык работать с текстовыми процессорами, они могут стать удобными инструментами подготовки Web-страниц. В системе Linux возможность экспортирования в HTML-формат предоставляют программы Applix Words, StarOffice и WordPerfect.

    • Web-броузеры. Многие популярные Web-броузеры, выполняющиеся в системе Linux, в частности Netscape, содержат средства для подготовки HTML-документов. Такие средства лучше подходят для создания Web-страниц, чем текстовые процессоры.

    • Независимые программы подготовки Web-страниц. Единственным назначением этих инструментов является создание HTML-документов. В качестве примеров подобных программ, работающих в системе Linux, можно привести ASHE (

    http://www.cs.rpi.edu/pub/puninj/ASHE/
    ), August (
    http://www.lls.se/~johanb/august/
    ), Bluefish (
    http://bluefish.openoffice.nl
    )и WebSphere (
    http://www-4.ibm.com/software/webservers/hpbuilder/
    ). Некоторые из этих инструментов очень просты, другие позволяют выполнять достаточно сложные действия.

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

    Особенности создания Web-страниц

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

    <CENTER>
    , другие игнорируют атрибут
    ALIGN
    в составе заголовка. Шрифт, указанный в документе, будет отображаться только в том случае, если он присутствует на компьютере, на котором выполняется Web-броузер, в противном случае содержимое документа будет воспроизведено с использованием шрифта по умолчанию. Цвет, заданный для отображения Web-страницы, должен сочетаться с цветами, выбранными пользователем. (Одна из ошибок, часто допускаемых Web-дизайнерами, связана с использованием цветов. Если задать цвет фона, не указав при этом цвет для отображения текста, могут возникнуть проблемы при выводе содержимого документа на экран. Предположим, например, что вы задали в документе белый цвет фона. Если при этом пользователь установил по умолчанию отображение белого текста на черном фоне, то прочитать текст документа в окне броузера будет невозможно. В листинге 20.2 заданы цвет фона и переднего плана, но не указан цвет для отображения гипертекстовых ссылок. Это также может стать источником проблем при выводе документа.)

    Поскольку броузеры по-разному интерпретируют HTML-код, желательно проверять созданные вами Web-страницы в различных броузерах. Как минимум вы должны выяснить, как отображаются ваши документы в наиболее популярных на сегодняшний день клиентских Web-программах: Netscape Navigator и Microsoft Internet Explorer. По возможности следует проверить качество воспроизведения документа в различных версиях этих броузеров. Следует также учитывать, что в последнее время среди пользователей Linux стали популярны броузеры Mozilla (

    http://www.mozilla.org
    , вариант Netscape Navigator, распространяемый в исходных кодах), Opera (
    http://www.opera.com
    ) и Konqueror (созданный в рамках проекта KDE). Особого внимания заслуживает броузер Lynx (
    http://lynx.browser.org
    ), отображающий лишь текстовую информацию. Если вы хотите, чтобы ваши Web-страницы были доступны всем пользователям, необходимо протестировать их с помощью данного броузера. Несмотря на то что Lynx в настоящее время практически не используется, он позволяет выявить большинство проблем, которые не очевидны при работе с другими броузерами. Обеспечив воспроизведение Web-страницы посредством клиентской программы, отображающей лишь текст, вы упростите работу с Web-документами пользователей с нарушениями зрения, применяющих синтезаторы речи. Необходимо также учитывать интересы пользователей, работающих с различными операционными системами. В системе Windows наиболее популярным является броузер Internet Explorer, в других системах, например MacOS, BeOS и OS/2, используются и другие клиентские программы. Некоторые из них работают на различных платформах, другие ориентированы на выполнение в конкретной операционной системе.

    Совет

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

    Анализ файлов протоколов

    Файлы протоколов — важный источник сведений о работе Web-сервера. Информация, содержащаяся в этих файлах, поможет вам администрировать Web-узел. Файлы протоколов включают информацию о клиентских программах, обращающихся к серверу, о документах, запрашиваемых клиентами, о времени обращений и другие сведения. Для анализа содержимого файлов протоколов вручную требуется много времени и усилий, поэтому большинство администраторов делают это с помощью специализированных инструментов, которые упрощают обработку данных. Наиболее часто для этой цели применяются программы Analog и Webalizer.

    На заметку

    В данном разделе рассматриваются стандартные файлы протоколов Apache, записью информации в которые управляет директива

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

    Формат файла протокола Apache

    Данные могут записываться в файл протокола Apache в различных форматах; конкретный формат задается с помощью директивы

    CustomLog
    . В данном разделе описывается формат
    combined
    , который объединяет в одном файле различные данные. Запись в формате
    combined
    выглядит следующим образом:

    192.168.1.1 - - [06/Nov/2002:16:45:49 -0500] "GET /index.html \

     HTTP/1.0" 200 8597 "-" "Mozilla (X11; I; Linux 2.0.32 i586)"

    Эта запись включает следующие компоненты.

    • Доменное имя или IP-адрес клиента. Первое поле записи содержит адрес или имя клиента, от которого был получен запрос.

    • Идентификатор пользователя. Следующие два поля содержат имя пользователя, инициировавшего запрос. В первом из этих полей содержится имя для сервера

    identd
    , а во втором — имя для HTTP-аутентификации. (В данном примере в этих полях указаны дефисы, указывающие на то, что сведения о пользователе не доступны.)

    • Дата и время. Apache записывает дату и время передачи запроса. В этой записи содержится локальное время с указанием временного пояса (в данном примере

    -0500
    ).

    • HTTP-запрос. HTTP-запрос включает команду, переданную клиентом (

    GET
    ), запрашиваемый документ (
    /index.html
    ) и версию протокола HTML (
    1.0
    ). С помощью этой информации можно определить, какие из документов, расположенных на вашем Web-узле, наиболее популярны среди пользователей.

    • Код ответа. В ответ Apache включает цифровой код, информирующий клиентскую программу о результатах обработки запроса. В данном примере указан код ответа

    200
    , это означает, что обработка запроса окончилась успешно. Коды, начинающиеся с цифры 3, означают перенаправление запроса, а коды, начинающиеся с цифры 4 или 5, свидетельствуют об ошибке.

    • Размер объекта. Число 8597 соответствует размеру ресурса, который Apache передал клиенту в ответ на запрос. При вычислении размера объекта заголовок ответа не учитывается.

    • Документ, ссылающийся на текущий ресурс. Если пользователь запросил новый ресурс щелчком на гипертекстовой ссылке в составе HTML-документа, броузер передает серверу в составе запроса URL этого документа. Полученные сведения Apache записывает в файл протокола. В приведенном выше примере в данном поле содержится дефис, означающий, что документ, ссылающийся на запрашиваемый ресурс, не определен. Это может быть в случае, если пользователь непосредственно ввел URL ресурса в поле адреса броузера.

    • Клиентская программа. Последнее поле записи содержит информацию о броузере, а также сведения об операционной системе, в которой он выполняется. (Заметьте, что броузер Netscape сообщает о себе с помощью идентификатора

    Mozilla
    .) На сведения, указанные в этом поле, нельзя полагаться, поскольку клиентскую программу можно настроить так, чтобы она сообщала о себе неверные данные. Кроме того, сведения о броузере могут быть заменены proxy-сервером.

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

    На заметку

    В большинстве версий Linux инструмент

    cron
    по умолчанию настраивается так, чтобы через определенные промежутки времени осуществлялась ротация файлов протоколов (переименование файлов протоколов и удаление с диска старых файлов). Соответствующая задача для
    cron
    обычно описывается в каталоге
    /etc/cron.d
    или
    /etc/cron.interval
    . Если в вашей системе ротация файлов не выполняется, вам надо создать соответствующую задачу в противном случае размеры файлов станут слишком большими, а это может привести к переполнению диска.

    Использование Analog

    Analog (

    http://www.analog.cx
    ) является наиболее популярным из инструментов, предназначенных для анализа файлов протоколов. Этот инструмент в основном отображает результаты анализа в текстовом виде, но может также представлять их в виде диаграмм. С примером отчета, сгенерированным Analog, можно ознакомиться, обратившись по адресу
    http://www.statslab.cam.ac.uk/~sret1/stats/stats.html
    . Инструмент Analog входит в состав некоторых дистрибутивных пакетов. Если в вашей системе Analog отсутствует, вы можете скопировать его с Web-узла.

    Настройка программы Analog

    Работой программы Analog управляет конфигурационный файл

    analog.cfg
    , который обычно размещается в каталоге /
    etc.
    Этот файл содержит опции, задавая значения которых вы можете представлять данные, генерируемые Analog, в удобном для вас виде. Например, опция
    SEARCHENGINE
    задает поисковые серверы, которые могут ссылаться на ваши документы. С помощью этой опции Analog может учитывать ссылки на содержимое Web-узла, находящиеся на поисковых серверах. При настройке программы Analog вам придется задать следующие опции:

    LOGFILE путь_к_файлу_протокола

    OUTFILE путь_к_файлу_содержащему_выходные_данные

    HOSTNAME "имя_организации"

    Первые две из приведенных выше опций особенно важны. Если вы не укажете их, Analog не сможет найти файл протокола, а выходная информация будет непосредственно передаваться в стандартный выходной поток. Analog генерирует выходные данные в формате HTML и включает в созданный им файл графические изображения. Таким образом, вы можете просмотреть результаты обработки файла протокола с помощью Web-броузера. (При настройке Analog необходимо указать лишь имя основного HTML-файла, например

    httpd/html/analog/index.html
    ; графические данные будут размещены в том же каталоге.) Опция
    HOSTNAME
    не оказывает существенного влияния на работу Analog. Ее значение лишь отображается в начале отчета.

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

    • Конфигурационный файл. При создании некоторых пакетов Analog считается, что файл

    analog.cfg
    должен находиться в том же каталоге, что и исполняемый файл Analog (т.е. в каталоге
    /usr/bin
    ), однако чаще всего конфигурационный файл размешается в каталоге
    /etc
    . Очевидно, что каталог
    /usr/bin
    — не самое подходящее место для конфигурационного файла, поэтому, чтобы обеспечить работу Analog с файлом, находящимся в каталоге
    /etc
    , необходимо выполнить команду
    ln -s /etc/analog.cfg /usr/bin
    .

    • Файлы поддержки языка. Для того чтобы программа Analog выполнялась корректно, она должна иметь доступ к файлам поддержки языка. Некоторые пакеты размещают эти файлы в

    /var/lib/analog/lang
    , но Analog ищет их в каталоге
    /usr/bin/lang
    . Чтобы разрешить это противоречие, надо выполнить команду
    ln -s /var/lib/analog/lang /usr/bin
    .

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

    /var/www/html/images
    , но в документах, сгенерированных при выполнении Analog, содержатся ссылки, которые указывают на файлы, находящиеся в подкаталоге images текущего каталога. Чтобы обеспечить доступ к графическим файлам, необходимо создать еще одну символьную ссылку, выполнив для этого команду
    ln -s /var/ww/html/ images
    .

    Указанные здесь изменения нужны лишь для некоторых пакетов. В частности, их необходимо выполнить при использовании пакета

    analog-5.01-1mdk
    в системе Mandrake.

    Запуск программы Analog

    Для запуска программы Analog на выполнение необходимо ввести команду

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

    В некоторых случаях возникает необходимость в периодическом запуске Analog (раз в неделю, раз в месяц или даже раз в день). Сделать это можно с помощью инструмента

    cron
    . При этом необходимо помнить, что Analog потребляет не очень большие, но все же значительные ресурсы, поэтому если запускать данную программу слишком часто (например, каждую минуту), это непременно скажется на производительности системы.

    Интерпретация выходных данных Analog

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

    • Обобщенная сводка. В этом разделе представлена общая информация, используемая для оценки состояния Web-сервера: среднее количество запросов, обрабатываемых в течение дня, среднее число запросов, при обработке которых возникли ошибки, общий объем переданных данных и средний объем данных, переданных в течение дня.

    • Ежемесячный отчет. В ежемесячном отчете указывается число документов, обработанных в течение месяца. Увеличение числа обращений в течение месяца и снижение производительности системы указывает на то, что вам необходимо перенести сервер на более мощный компьютер или увеличить пропускную способность соединения.

    • Ежедневный отчет. В этом разделе указывается число документов, обработанных в течение определенного дня недели (понедельник, вторник и т.д.).

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

    • Отчет о работе с доменами. Если ваш сервер поддерживает несколько доменов, просмотрев данный раздел, вы ознакомитесь с трафиком, связанным с каждым доменом.

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

    • Отчет о работе с операционными системами. Если в вашем файле протокола содержится информация об операционных системах, в которых работают клиенты, обращающиеся к серверу, эта информация учитывается в данном отчете. Следует заметить, что из-за наличия proxy-серверов приведенные здесь данные не всегда отражают реальную ситуацию.

    • Отчет о кодах состояния. В данный раздел Analog включает диаграмму, представляющую соотношение различных кодов состояния, передаваемых Web-сервером в составе ответов клиентам. Если коды 4.xx и 5.xx появляются во многих ответах, необходимо найти и устранить причину подобного поведения сервера.

    • Отчет о размерах файлов. Данный раздел содержит сведения о числе файлов разных размеров, которые Web-сервер предоставляет пользователям. Информация, приведенная в этом отчете, может быть использована для управления трафиком. Если вы обнаружите, что средний размер передаваемых файлов увеличивается, вам надо принять соответствующие меры, например увеличить степень сжатия графических изображений.

    • Отчет о типах файлов. В данном отчете сообщается о типах файлов (JPEG, HTML и т.д.), предоставляемых Web-сервером. Эта информация может быть использована для тех же целей, что и сведения, содержащиеся в отчете о размерах файлов.

    • Отчет о каталогах. На большинстве Web-узлов информация хранится в различных каталогах. Данный отчет предоставляет сведения о том, в каких каталогах находится информация, пользующаяся наибольшим успехом (решение о популярности того или иного каталога принимается на основании объема переданных данных).

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

    Информация, приведенная в различных отчетах, позволяет составить представление о работе Web-узла. Еще более полные сведения вы можете получить, собрав данные, сгенерированные Analog в течение определенного периода времени. Для этого надо организовать ротацию файлов протоколов Apache, причем в процессе ротации необходимо копировать выходные данные Analog в специальный подкаталог. Ротацию и копирование файлов Analog можно реализовать с помощью инструмента

    cron
    . Кроме того, вам придется создать главный HTML-документ, ссылающийся на данные Analog, скопированные в процессе ротации в выбранные вами каталоги. В результате вы получите информацию, собранную Analog в течение нескольких недель или месяцев.

    Несмотря на то что Analog является чрезвычайно полезным инструментом, следует все же признать, что обработка данных, сгенерированных в процессе выполнения этой программы, — трудоемкое занятие, требующее ненамного меньше усилий, чем непосредственный анализ файлов протоколов Apache. Для дальнейшей обработки данных, сгенерированных Analog, и представления их в форме, удобной для восприятия, используются дополнительные инструменты. В качестве примера такого инструмента можно привести Report Magic (

    http://www.reportmagic.com
    ).

    Использование Webalizer

    Инструмент Webalizer (

    http://www.webalizer.org
    ) предоставляет администратору приблизительно такие же возможности, как и Analog. Подобно Analog, Webalizer читает содержимое конфигурационных файлов и создает выходной HTML-файл, представляя сведения о Web-узле в удобном для восприятия виде. Webalizer поставляется в составе некоторых дистрибутивных пакетов. Если же в вашей системе этот инструмент отсутствует, вы можете скопировать его с Web-узла, содержащего сведения о данном инструменте и его код. Пример выходного файла, сгенерированного Webalizer, расположен по адресу
    http://www.webalizer.org/sample/
    .

    Настройка Webalizer

    Работой Webalizer управляет конфигурационный файл

    webalizer.conf
    , который обычно располагается в каталоге
    /etc
    . Как и при работе с Analog, вы должны сообщить Webalizer о том, где находится файл протокола Web-сервера и в какой каталог следует записывать выходные данные. Для этого используются следующие опции:

    LogFile путь_к_файлу_протокола

    OutputDir путь_к_каталогу_содержащему_выходные_данные

    Одно из отличий между Analog и Webalizer состоит в том, что в конфигурационном файле Analog задается имя выходного файла, а для Webalizer указывается каталог, в который данная программа будет записывать сгенерированные в процессе работы файлы. Если этот каталог доступен Web-серверу, то вы можете просматривать информацию, созданную Webalizer, с помощью Web-броузера. Если же вы разместите каталог за пределами области, к которой может обращаться Web-сервер, то для просмотра результатов работы Webalizer вам придется задавать URL, начинающийся с

    file://
    . Ниже перечислены некоторые опции Webalizer, значения которых вы, возможно, захотите изменить.

    • 

    Incremental
    . Если для данной опции задано значение yes, Webalizer сохраняет от запуска к запуску информацию о своем состоянии. Это позволяет обрабатывать файл протокола по частям. Предположим, например, что вы запускаете Webalizer один раз в день. При установленном значении
    yes
    опции
    Incremental
    он будет помнить, какую запись он уже обработал, и сможет учитывать при этом ротацию файлов. Если значение данной опции равно
    no
    , Webalizer будет при каждом запуске обрабатывать весь файл протокола.

    • 

    HostName
    . Эта опция позволяет задать имя узла, отображаемое в заголовке отчета (содержание заголовка отчета определяется опцией
    ReportTitle
    ).

    • 

    GroupDomains
    . Данная опция позволяет объединять доменные имена в группы. Значение опции указывает, какое количество компонентов доменного имени должно идентифицировать группу. Предположим, что значение
    GroupDomains
    равно 2. В этом случае доменные имена
    gingko.pangaea.edu
    и
    birch.pangaea.edu
    будут объединены в группу
    pangaea.edu
    . Данная опция позволяет упорядочивать данные, генерируемые Webalizer.

    • 

    GroupSite
    . Данная опция также предназначена для поддержки групп. Например, значение
    GroupSite *.abigisp.net
    объединяет в одну группу все узлы, принадлежащие домену
    abigisp.net
    .

    • 

    HideSite
    . Эта опция исключает узлы из группы, созданной с помощью
    GroupSite
    . Опции
    GroupSite
    и
    HideSite
    используются совместно.

    Конфигурационные файлы Webalizer имеют больший объем и более сложную структуру по сравнению с соответствующими файлами Analog. Выше была перечислена лишь незначительная часть опций, предназначенных для настройки Webalizer. Большинство опций снабжено подробными комментариями, прочитав которые вы можете легко составить представление о назначении этих опций.

    Запуск Webalizer

    Для запуска Webalizer надо ввести команду

    webalizer
    . Как и при работе с программой Analog, чтобы запустить Webalizer, не надо обладать полномочиями пользователя
    root
    . Достаточно иметь право читать содержимое файла протокола и записывать информацию в каталог, предназначенный для выходных данных Webalizer. Возможно, вам потребуется организовать запуск Webalizer по расписанию с помощью инструмента
    cron
    . В этом случае целесообразно установить значение
    yes
    опции
    Incremental
    .

    Часто при инсталляции Apache, формируется задача для инструмента

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

    Интерпретация выходных данных Webalizer

    Выходные данные, генерируемые в процессе работы Webalizer, представляют собой двухуровневую структуру. На первом уровне выводится информация об активности сервеpa за прошедший год. (Для вновь инсталлированного сервера большинство месяцев будут пустыми.) Информация, соответствующая первому уровню, отображается как в виде таблиц, так и в виде диаграмм и представляет сведения о переданных Web-страницах, объеме скопированной информации и другие данные для каждого месяца. После щелчка на названии месяца отобразится Web-страница, соответствующая второму уровню данных, на котором отображаются более подробные сведения для выбранного месяца. На этой странице присутствуют следующие разделы.

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

    • Статистика работы сервера за день. Во втором разделе Web-страницы содержатся диаграмма и таблица, представляющие сведения о Web-трафике в течение каждого дня месяца. Здесь выводятся данные о количестве обращений, числе скопированных файлов и объеме переданных данных в килобайтах.

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

    • URL наиболее популярных документов. Webalizer отображает две таблицы, в которых содержится информация о числе обращений и объеме скопированных данных для различных URL. (При необходимости вы можете объединять URL в группы, используя для этого рассмотренные ранее опции.) Одна таблица отображает URL документов, к которым было максимальное количество обращений, другая — URL, в результате обращения к которым были скопированы данные наибольшего объема.

    • Входная и выходная страницы. Следующие две таблицы, генерируемые Webalizer, содержат сведения о наиболее популярной входной и выходной страницах. Входной страницей (entry page) называется документ, к которому обращается пользователь в начале работы с узлом, а выходной страницей (exit page) — документ, который пользователь просматривает непосредственно перед завершением работы.

    • Наиболее популярные узлы. Webalizer записывает сведения о взаимодействии клиентов с Web-узлами, поддерживаемыми сервером, учитывая как число обращений, так и объем скопированной информации. При необходимости вы можете объединять узлы в группы с помощью опции

    GroupSite
    , расположенной в конфигурационном файле Webalizer.

    • Документы, наиболее часто ссылающиеся на содержимое сервера. Анализируя информацию в файле протокола, Webalizer предоставляет сведения об узлах, наиболее часто ссылающихся на документы, расположенные на сервере.

    • Наиболее часто используемые ключевые слова. Некоторые поисковые серверы, в базе данных которых учтены документы, расположенные на вашем Web-узле, включают в состав URL строку поиска. Webalizer выделяет эту информацию и представляет в отчете.

    • Наиболее популярные клиентские программы. Webalizer учитывает типы Web-броузеров, наиболее часто обращающихся к вашему узлу.

    • Наиболее популярные страны. В последнем разделе Webalizer предоставляет информацию об обращениях к документам из разных стран. Страна определяется на основании домена верхнего уровня, поэтому наряду с реальными странами на Web-странице встречаются US Commercial, Network и другие подобные имена.

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

    Резюме

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

    Глава 21

    FTP-серверы

    Протокол FTP (File Transfer Protocol — протокол передачи файлов) существует давно и пользуется большой популярностью в Internet. Он обеспечивает обмен файлами между компьютерами, подключенными к сети. FTP-клиенты могут копировать файлы с сервера и, если позволяет конфигурация сервера, передавать информацию на сервер. Иногда FTP-сервер может заменить Web-сервер или файловый сервер, но в большинстве случаев его можно рассматривать как дополнение к этим средствам. В ряде ситуаций наличие FTP-сервера на компьютере не оправдано. Если вы приняли решение установить FTP-сервер, можете воспользоваться для этой цели различными программами, ориентированными на работу в системе Linux. По умолчанию программы, реализующие FTP-серверы, настроены для выполнения определенного круга задач. Возможно, вам придется изменить конфигурацию сервера. В некоторых случаях возникает необходимость в анонимном FTP-сервере, который позволяет каждому желающему копировать файлы на свой компьютер.

    Использование FTP-сервера

    FTP-сервер имеет некоторое сходство с Web-сервером, рассмотренным в главе 20, а также с серверами Samba и NFS, предназначенными для разделения файлов (о них шла речь в главах 7 и 8). Все эти серверы позволяют передавать файлы с одного компьютера на другой и в некоторых ситуациях взаимозаменяемы. Однако каждый из этих протоколов имеет свои особенности, определяющие выбор сервера для решения определенного круга задач. Ниже описаны основные отличия FTP-сервера от серверов HTTP, Samba и NFS.

    • Аутентификация. Для того чтобы пользователь мог работать с FTP-сервером, он должен зарегистрироваться на нем, указав пользовательское имя и пароль. (Исключением является анонимный FTP-сервер, который будет описан ниже.) При работе с Web-сервером аутентификация обычно не требуется, хотя существуют средства, позволяющие настроить Web-сервер для проверки имени и пароля. Что же касается серверов, предназначенных для разделения файлов, то некоторые из них проверяют имя пользователя и пароль, другие выполняют аутентификацию, анализируя лишь IP-адрес.

    • Использование учетных записей. Особенности аутентификации, выполняемой FTP-сервером, позволяют применять его для предоставления пользователям доступа к принадлежащим им файлам с удаленных компьютеров. Подобным образом могут использоваться серверы NFS и Samba. Web-сервер также позволяет пользователям работать с их файлами, но тот же уровень доступа он предоставляет всем желающим. Для обеспечения защиты информации при работе с Web-сервером приходится принимать дополнительные меры.

    • Шифрование. Стандартные FTP-серверы не выполняют шифрование данных, в том числе имени пользователя и пароля. Это создает опасность при передаче информации через Internet. Исключением в данном случае являются анонимные FTP-серверы, при использовании которых шифрование информации не имеет смысла. Существуют защищенные версии FTP, поддерживающие кодирование передаваемых данных. Защиту информации, которая передается средствами FTP, обеспечивают также средства Kerberos, которые рассматривались в главе 6. В обычных условиях Web-серверы не выполняют шифрование данных, хотя при необходимости такая возможность реализуется достаточно просто. Сервер Samba может быть настроен для шифрования паролей и прочей информации. NFS не использует пароли, поэтому о кодировании паролей речь не идет. Что же касается данных, передаваемых средствами NFS, при необходимости шифрование их может осуществляться. Программы

    scp
    и
    sftp
    , входящие в состав пакета SSH, кодируют все данные, поэтому их можно использовать вместо средств FTP в том случае, когда вопросы безопасности имеют большое значение.

    Совет

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

    • Поддержка соединения. Подобно Samba и NFS, при обмене данными по протоколу FTP поддерживается постоянное соединение. Пользователь может зарегистрироваться на FTP-сервере, бездействовать в течение длительного времени (столько, сколько позволяет установленное значение тайм-аута), а затем скопировать файл с сервера. Web-серверы действуют совершенно по-другому; в рамках соединения может быть передан один, в крайнем случае несколько файлов. FTP коренным образом отличается от других протоколов подобного назначения тем, что при взаимодействии клиента и сервера используются два порта: один для передачи команд, а другой для передачи данных. Клиент обращается к серверу через порт 21. Затем в зависимости от режима (режим может быть активным или пассивным) передача данных осуществляется либо по инициативе клиента, либо по инициативе сервера. Такая особенность взаимодействия усложняет настройку брандмауэров, однако в большинстве программ, реализующих брандмауэры, предусмотрены специальные средства, позволяющие решить эту задачу.

    • Непосредственная обработка файлов. Серверы, предназначенные для разделения файлов, например NFS и Samba, предоставляют возможность обрабатывать удаленные файлы так, как будто они расположены на локальном компьютере. Например, пользователь может загрузить файл с удаленной машины в текстовый редактор, внести в него необходимые изменения и снова сохранить на удаленном компьютере. При этом файл на локальный диск не копируется. Ни FTP, ни HTTP не обеспечивают подобной возможности. Если доступ к удаленному компьютеру может осуществляться только посредством протокола FTP или HTTP, то, для того, чтобы отредактировать файл, вы должны сначала скопировать его на локальную машину, внести и сохранить изменения, а затем снова передать файл на сервер. Существуют средства, позволяющие организовать разделение файлов с помощью протокола FTP. В системе Linux такую возможность предоставляет продукт Linux FTP Filesystem (

    http://ftpfs.sourceforge.net
    ). Однако подобное использование протокола FTP можно рассматривать скорее как исключение из общего правила.

    • Двунаправленная передача данных. Серверы, предназначенные для разделения файлов, и FTP-сервер позволяют передавать данные с сервера на клиентскую машину и наоборот. При необходимости системный администратор имеет возможность запретить запись файлов на диск сервера. Web-серверы в основном применяются для передачи данных с сервера на клиентский компьютер, но в протоколе HTTP предусмотрена также возможность передавать информацию на сервер.

    • Работа клиентов на различных платформах. FTP- и Web-серверы взаимодействуют с клиентами, выполняющимися в любой операционной системе, поддерживающей TCP/IP; не является исключением даже система DOS. В отличие от FTP и HTTP, протоколы разделения файлов ориентированы на конкретную платформу: сервер NFS работает с клиентами UNIX и Linux, a Samba — с клиентами DOS, Windows и OS/2. Пытаясь обеспечить межплатформенную совместимость протоколов разделения файлов, вы неизбежно столкнетесь с проблемами представления прав доступа, атрибутов файлов и другими ограничениями. При этом вам также приходится обеспечивать взаимодействие с клиентскими программами, многие из которых распространяются на коммерческой основе.

    Трудозатраты при настройке сервера. По умолчанию в системе Linux устанавливается конфигурация FTP-сервера, предоставляющая пользователям такие же права чтения и записи файлов, которые они получили бы, зарегистрировавшись на компьютере. Если вас устраивает подобное поведение сервера, его настройка займет крайне мало времени. Чтобы обеспечить подобное взаимодействие с серверами NFS, Samba и HTTP, вам придется внести существенные изменения в их конфигурационные файлы. С другой стороны, чтобы установить анонимный FTP-сервер, надо приложить определенные усилия для его настройки, в то время как в других серверах подобный принцип взаимодействия с пользователями реализован по умолчанию.

    Таким образом, средства FTP удобно использовать для решения следующих двух задач.

    • Обслуживание локальных пользователей. Если на компьютере под управлением Linux существуют учетные записи для некоторых пользователей, FTP-сервер позволит этим пользователям копировать свои файлы с сервера на удаленный компьютер либо с удаленной машины на сервер. Подобный тип доступа к данным менее удобен по сравнению с разделением файлов, но для настройки FTP-сервера от вас, как от системного администратора, потребуется меньше времени и усилий. Межплатформенная совместимость также является существенным преимуществом FTP-сервера.

    • Анонимный доступ к данным. Установив в сети анонимный FTP-сервер, вы дадите возможность внешним пользователям копировать на их компьютеры файлы, предоставленные вами для всеобщего доступа, а в некоторых случаях и передавать свои файлы на сервер. В качестве альтернативы анонимному FTP-серверу (особенно, если вам не требуется копирование данных с клиентских компьютеров на сервер) может выступать Web-сервер. Если же вы не хотите тратить время на подготовку Web-страниц, установка FTP-сервера может стать более приемлемым решением.

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

    Программы, реализующие FTP-сервер в системе Linux

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

    • BSD FTPD. Версия BSD Unix поставляется в комплекте с FTP-сервером, который адаптирован для переноса в систему Linux. Так, например, на выполнение в Linux ориентирован пакет OpenBSD FTPD. Варианты BSD FTPD поставляются с системами Debian и SuSE. От других FTP-серверов BSD FTPD отличается более надежными средствами защиты, но, тем не менее, он не получил большой популярности среди пользователей Linux.

    • ProFTPd. Пакет ProFTPd, Web-сервер которого находится по адресу

    http://www.proftpd.org
    , поставляется с системами Debian, Mandrake, Slackware, SuSE и TurboLinux. Популярность данного сервера резко возросла в 2002 г. При создании ProFTPd были использованы некоторые подходы, характерные для сервера Apache.

    • WU-FTPD. Washington University FTP Daemon (WU-FTPD) — наиболее популярный из современных FTP-серверов для Unix. Web-узел WU-FTPD расположен по адресу

    http://www.wu-ftpd.org
    . Данный продукт поставляется с Caldera, Debian, Mandrake, Red Hat, SuSE и TurboLinux. В процессе его эксплуатации были выявлены и устранены многочисленные недостатки в защите.

    Каждая из этих программ поддерживает основные функции и некоторые из расширенных функций FTP-сервера. В данной главе описываются только продукты ProFTPd и WU-FTPD, так как именно они пользуются наибольшей популярностью и поставляются в составе различных дистрибутивных пакетов Linux. Программа ProFTPd обладает большей гибкостью и с точки зрения безопасности превосходит WU-FTPD. Однако если в составе вашей системы поставляется только WU-FTPD либо если вы хорошо знакомы с данным продуктом, имеет смысл остановить свой выбор на нем. Если же вы склонны экспериментировать, попробуйте установить в своей системе BSD FTPD.

    Настройка основных функций FTP-сервера

    Инсталлировав FTP-сервер, надо обеспечить его выполнение. Как правило, в дистрибутивных пакетах, комплектуемых WU-FTPD, запуск данной программы осуществляется посредством суперсервера, а если в составе системы содержится ProFTPd, для его запуска обычно используют сценарий SysV. Если вас не устраивает подход, использованный в вашей системе, вы можете реализовать альтернативное решение. При работе со многими дистрибутивными пакетами обеспечение запуска FTP-сервера является единственным действием, необходимым для его настройки, так как конфигурация, установленная по умолчанию, позволяет использовать сервер для решения многих задач. Так, например, по умолчанию пользователь, для которого в системе существует учетная запись, имеет возможность регистрироваться на FTP-сервере и копировать файлы из своего рабочего каталога. Если в вашей системе сервер должен действовать по-другому, следует изменить его настройку. Наиболее часто используемый вариант настройки — анонимный FTP-сервер — будет рассмотрен далее в этой главе.

    Запуск FTP-сервера

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

    • В некоторых дистрибутивных пакетах, использующих

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

    • В большинстве систем, использующих xinetd для запуска FTP-сервера, в каталог

    /etc/xinetd.d
    помещается специальный файл. Этот файл является частью пакета сервера. Если в нем содержится строка
    disable = yes
    , это означает, что запуск FTP-сервера запрещен. Подобная запись включается из соображений безопасности. Если вы хотите, чтобы FTP-сервер выполнялся в системе, задайте значение
    no
    опции
    disable
    . (Чтобы суперсервер учел внесенные изменения, его надо перезапустить.)

    • Независимо от того, запускается ли FTP-сервер посредством

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

    Если ваш FTP-сервер часто посещают пользователи, имеет смысл запускать его с помощью сценария SysV или локального сценария запуска. В этом случае сервер будет быстрее отвечать на запросы, но, учитывая небольшие размеры программы, реализующей сервер, увеличение быстродействия будет минимальным. В некоторых версиях Linux, например в Debian и Mandrake, данный подход применяется для запуска ProFTPd. Если же ProFTPd постоянно присутствует в памяти, поддержка анонимного FTP-сервера упрощается.

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

    ftp
    , выполняющаяся в системе Linux:

    $ ftp harding.threeroomco.com

    ftp: connect: Connection refused

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

    Настройка WU-FTPD

    При настройке WU-FTPD надо внести изменения в несколько конфигурационных файлов. Эти файлы определяют, кто из пользователей имеет право обращаться к FTP-серверу и какие действия доступны им. В некоторых файлах также содержатся дополнительные опции, посредством которых можно разрешить WU-FTPD выполнять специальные действия по обработке файлов или расширенные команды.

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

    В большинстве случаев конфигурационные файлы, управляющие работой WU-FTPD, находятся в каталоге

    /etc
    . Имена этих файлов начинаются символами
    ftp
    .

    • 

    ftpaccess
    . Из всех конфигурационных файлов WU-FTPD наиболее сложным является файл
    ftpaccess
    . В нем содержатся опции, которые управляют регистрацией пользователей и правами доступа, определяют особенности TCP/IP-взаимодействия, используются для организации анонимного FTP-сервера, а также другие самые разнообразные средства.

    • 

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

    • 

    ftphosts
    . Данный файл позволяет ограничить набор узлов, с которых может осуществляться обращение к FTP-серверу, и даже запретить доступ для отдельных пользователей. Записи, начинающиеся с ключевого слова
    allow
    , разрешают, а записи, начинающиеся с
    deny
    , запрещают обращение для указанных узлов или указанных пользователей. Например, запись
    deny sjones
    означает, что попытки пользователя
    sjones
    зарегистрироваться на FTP-сервере будут блокированы, а запись
    deny badsite.pangaea.edu
    запрещает обращение к серверу для всех пользователей, работающих на узле
    badsite.pangaea.edu
    .

    ftpusers
    . Данный файл содержит список локальных пользователей, которым запрещено обращаться к серверу WU-FTPD. Этот файл не является частью WU-FTPD; он действует посредством модулей РАМ (Pluggable Authentication Module). Тем не менее он представляет собой удобное средство противодействия попыткам незаконного использования FTP-сервера. По умолчанию в данный файл включаются имена, соответствующие учетным записям
    root
    ,
    nobody
    и
    daemon
    .

    ftpservers
    . В обычных условиях один и тот же набор опций используется для работы с любыми клиентами. С помощью данного файла вы можете задать конфигурацию, которая будет применяться только при взаимодействии с определенными узлами. Каждая строка в этом файле содержит IP-адрес или имя узла, за которым следует имя каталога. Если клиент, обратившийся к FTP-серверу, выполняется на одном из указанных компьютеров, WU-FTPD использует для взаимодействия с ним конфигурационные файлы, находящиеся в соответствующем каталоге. Например, запись
    192.168.21.8 /etc/ftpd/trusted
    означает, что при обращении клиента 192.168.21.8 будут использоваться конфигурационные файлы из каталога
    /etc/ftpd/trusted
    . Этот файл позволят контролировать обращения с внешних узлов и в то же время снимать ограничения для пользователей, работающих в локальной сети.

    Из перечисленных выше файлов наиболее важным является

    ftpaccess
    . Файлы
    ftphosts
    ,
    ftpusers
    и
    ftpservers
    также имеют большое значение для обеспечения безопасности сервера. Если вы хотите задать обработку файлов перед передачей их клиенту, вам, помимо конфигурационного файла
    ftpaccess
    , потребуется также файл
    ftpconversions
    .

    Опции общего назначения для сервера WU-FTPD

    Действие многих из опций, определяющих конфигурацию WU-FTPD, базируется на понятии класса. Класс — это группа пользователей, подобная группе Linux. Для определения класса в файле

    ftpaccess
    предусмотрена опция
    class
    , которая записывается в следующем формате:

    class имя_класса список_типов список_адресов

    Назначение компонентов этой записи описано ниже.

    • Имя класса. По умолчанию при инсталляции сервера часто создается универсальный класс с именем

    all
    . При необходимости вы можете определить свои классы.

    • Список типов. В этом поле указывается список типов учетных записей, соответствующих данному классу. Ключевое слово

    real
    задает локальных пользователей,
    guest
    — пользователей, обращающихся с удаленных узлов, a anonymous описывает учетную запись для анонимного FTP-узла.

    • Список адресов. Данный список содержит IP-адреса, имена узлов и имена доменов, принадлежащих классу. Символ

    !
    означает, что указанный пункт должен отсутствовать в составе класса. Символ
    *
    определяет всех клиентов. Если список содержит несколько пунктов, над ними выполняется логическая операция
    OR
    . Например, значение
    threeroomco.com
    ,
    pangaea.edu
    определяет всех клиентов, входящих в состав каждого домена.

    Стандартный файл

    ftpaccess
    обычно содержит следующее определение:

    class all real,guest,anonymous *

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

    В файл

    ftpaccess
    также включаются перечисленные ниже опции.

    • 

    deny список_адресов файл_с_сообщением
    . Эта опция указывает WU-FTPD на то, что все попытки доступа, предпринимаемые с указанных адресов, должны отвергаться. Данная опция похожа на запись
    deny
    в файле
    ftphosts
    , но в ней указывается файл, содержащий сообщение. Это сообщение, объясняющее причины отказа в соединении, передается пользователю, обратившемуся к серверу.

    • 

    autogroup имя_группы класс[, класс, ...]
    . Данная опция указывает, что при получении обращений одного из указанных классов WU-FTPD должен выполнить операцию
    setgid
    с именем группы. С помощью этой опции вы можете разрешить анонимным пользователям, принадлежащим некоторому классу, читать те файлы, которые имеют право читать члены указанной группы, но которые не доступны для чтения остальным пользователям.

    • 

    defumask umasк класс [, класс]
    . Данная опция сообщает WU-FTPD, что если пользователь, принадлежащий указанному классу, передает файл на сервер, то при создании файла должна использоваться маска
    umask
    .

    • 

    timeout ключевое_слово время_в_секундах
    . Данная опция позволяет задает значения тайм-аута. В качестве ключевого слова может использоваться
    accept
    ,
    connect
    ,
    data
    ,
    idle
    ,
    maxidle
    или
    rfc931
    .

    • 

    noretrieve [relative|absolute] [class=имя_класса] имена_файлов
    . Эта опция запрещает передачу указанных файлов. Если вместо имени файла задано имя каталога, все содержимое каталога становится недоступным. При необходимости вы можете применять эту опцию только к указанному классу. Значения
    relative
    и
    absolute
    указывают, должно ли имя файла интерпретироваться как относительное (определяемое относительно корня поддерева
    chroot
    ) или как абсолютное (определяемое относительно корневого каталога файловой системы). По умолчанию абсолютным считается имя, начинающееся с символа
    /
    . Например, если задана опция
    noretrieve /etc /usr
    , это означает, что копирование файлов из каталогов
    /etc
    и
    /usr
    запрещено.

    Совет

    Опцию

    noretrieve
    часто используют для того, чтобы запретить доступ к
    /etc/passwd
    ,
    /etc/shadow
    ,
    /etc/ftpaccess
    , файлу
    core
    (находящемуся в любом каталоге) и другим важным файлам.

    • 

    allowretrieve [relative|absolute] [class=имя_класса] имена_файлов
    . Данная опция выполняет действия, противоположные опции
    noretrieve
    . С ее помощью определяются исключения из правила, заданного посредством
    noretrieve
    . Синтаксис данной опции полностью совпадает с синтаксисом
    noretrieve
    .

    • 

    message имя_файла [событие] [класс]
    . Опция
    message
    задает файл, содержимое которого должно быть передано FTP-клиенту при наступлении некоторого события. Так, например, если в качестве события указано ключевое слово
    login
    , сообщение будет отображаться при регистрации пользователя. Если событие описано как
    cwd=каталог
    , то сообщение будет передано при выборе этого каталога в качестве текущего. При необходимости вы можете ограничить действия данной опции определенным классом пользователей. Например, если задана опция
    message .message cwd=*
    , то при переходе в любой каталог пользователю будет передано сообщение из файла
    .message
    , содержащегося в этом каталоге. Таким образом, вы можете предоставлять пользователям описание содержимого каталогов и сообщать о назначении всего FTP-сервера.

    • 

    compress [yes|no] класс [,класс]
    . Данная опция разрешает сжатие данных. Если пользователь запрашивает один из существующих файлов, но указывает дополнительное расширение, означающее сжатие, этот файл будет передан в сжатом виде. (Например, для получения файла с именем
    file
    пользователь может указать имя
    file.gz
    .) Расширения, означающие сжатие, приведены в файле
    ftpconversions
    .

    • 

    chmod
    ,
    delete
    ,
    overwrite
    ,
    rename
    и
    umask
    . Эти опции принимают значение
    yes
    или
    no
    , кроме того, в них указывается такой же список типов, как и в определении класса. Каждая из этих опций разрешает или запрещает использование клиентом соответствующей команды. Например, запись
    delete no guest, anonymous
    запрещает пользователям типа
    guest
    и
    anonymous
    удалять файлы.

    • 

    tar [yes|no] класс[, класс]
    . Эта опция действует подобно опции
    compress
    , но применяется для объединения содержимого каталога в tar-архив. Данная опция предоставляет удобные средства для копирования каталогов.

    • 

    dns refuse_mismatch
    имя_файла. Данная опция сообщает серверу WU-FTPD о том, что тот должен выполнить обратное преобразование IP-адреса клиента, а затем осуществить прямое DNS-преобразование. Если адрес, полученный в результате прямого преобразования, не соответствует адресу клиента, соединение должно быть разорвано. Однако перед разрывом соединения сервер передает клиенту содержимое указанного файла.

    • 

    dns refuse_no_reverse имя_файла
    . Данная опция указывает на то, что если выполнить обратное DNS-преобразование не удается, сервер не должен продолжать взаимодействие с клиентом. Перед завершением работы клиенту передается содержимое указанного файла.

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

    ftpaccess
    . Далее в этой главе будут также рассмотрены опции, применяемые для организации работы анонимного FTP-сервера.

    Настройка ProFTPd

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

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

    Главный конфигурационный файл ProFTPd называется

    proftpd.conf
    ; как правило, он располагается в каталоге
    /etc
    . В этом файле содержится большинство опций, используемых для настройки ProFTPd. Строки, содержащие комментарии, начинаются с символа
    #
    . Остальные записи представляются в следующем формате:

    Директива [Значение]

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

    /
    . Пример блока, сформированного с помощью директивы
    Limit
    , приведен ниже.

    <Limit WRITE>

     DenyAll

     Allow from 172.21.33.

    </Limit>

    Помимо главного конфигурационного файла, для настройки ProFTPd используется также файл

    ftpusers
    . Этот файл выполняет те же функции, что и одноименный файл сервера WU-FTPD. Пользователям, указанным в этом файле, запрещена регистрация на FTP-сервере. (Строго говоря, ProFTPd применяет для аутентификации модули РАМ, которые, в свою очередь, используют файл
    ftpusers
    .) По умолчанию при инсталляции ProFTPd создается файл
    ftpusers
    , в котором указываются такие имена пользователей, как
    nobody
    ,
    daemon
    и
    root
    . Вы можете включить в данный файл учетные записи, созданные вами для специальных целей и не предполагающие регистрацию пользователей. Кроме того, в файле
    ftpusers
    можно задать имена обычных пользователей, которым по каким-либо причинам следует запретить доступ к FTP-серверу.

    Опции общего назначения для сервера ProFTPd

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

    http://www.proftpd.org/docs/
    . Вероятнее всего, что, настраивая сервер, вы примете для большинства директив значения по умолчанию.

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

    • 

    <Anonymous имя_каталога>
    . С помощью данной директивы вы можете создать анонимный FTP-сервер. В блоке, созданной посредством этой директивы, задаются другие директивы, используемые для обеспечения анонимного FTP-доступа. Анонимным пользователям разрешен доступ только к файлам, содержащимся в определенном каталоге, имя которого задается в качестве значения данной опции. Этот каталог ProFTPd указывает в качестве корневого каталога поддерева
    chroot
    (использование системной функции
    chroot()
    рассматривается в главе 23).

    • 

    <Directory имя_каталога>
    . С помощью данной директивы указывается каталог, к которому применяются другие директивы. Значением директивы является абсолютное имя каталога, начинающееся с символа
    /
    . Конфигурационный файл ProFTPd, создаваемый по умолчанию, обычно содержит блок, сформированный посредством директивы
    <Directory /*>
    . В этот блок помещаются директивы, с помощью которых задаются характеристики всех каталогов.

    • 

    <Global>
    . Директива
    <Global>
    формирует блок, содержимое которого применяется ко всему серверу и всем виртуальным узлам, формируемым посредством
    <VirtualHost>
    .

    • 

    <Limit группа_команд>
    . Данная опция задает набор команд FTP-клиента, действия которых ограничены директивами, содержащимися в составе блока. В группу команд входят одна или несколько команд из следующего набора:
    CWD
    ,
    CDUP
    ,
    MKD
    ,
    RNFR
    ,
    RNTO
    ,
    DELE
    ,
    RMD
    ,
    RETR
    и
    STOR
    . В качестве значения данной директивы также могут быть указаны специальные идентификаторы, обозначающие категории команд. К ним относятся
    READ
    (все команды чтения),
    WRITE
    (все команды записи),
    DIRS
    (все команды для работы с каталогами) и
    ALL
    (все команды). Кроме того, для введения ограничений при регистрации вы можете использовать идентификатор
    LOGIN
    .

    • 

    <VirtualHost адрес>
    . ProFTPd позволяет поставить использование директив в зависимость от адреса клиента. В качестве значения данной директивы указывается IP-адрес или имя узла, и при обработке запроса с этого адреса применяются директивы, содержащиеся в блоке.

    Большинство директив может присутствовать в одном или нескольких блоках. Кроме того, ряд директив указывается за пределами всех блоков; они рассматриваются как глобальные опции. Некоторые директивы могут встречаться как за пределами, так и в составе блока. Возможно также присутствие директивы в двух блоках, один из которого входит в состав другого. В этом случае директива с наибольшей степенью вложенности имеет наивысший приоритет. При настройке FTP-сервера чаще всего приходится изменять значения приведенных ниже директив.

    • 

    Allow [from] идентификаторы_узлов
    . Данная директива используется в составе блока
    <Limit>
    и указывает, какие клиенты имеют право доступа к ресурсу. В качестве идентификаторов узлов задается список IP-адресов, имен узлов, имен доменов (имя домена должно начинаться с точки) или блоков IP-адресов. Пункты списка отделяются друг от друга запятыми. Для идентификации узлов сети могут также использоваться ключевые слова
    all
    и
    none
    . После
    Allow
    может стоять ключевое слово
    from
    , но оно никак не изменяет действия, выполняемые данной директивой.

    Совет

    Вместо имен узлов и доменов рекомендуется использовать блоки IP-адресов. Это уменьшает зависимость FTP-сервера от работы DNS-сервера.

    • 

    AllowAll
    . По умолчанию ProFTPd разрешает доступ к каталогам, но существуют различные способы ограничить доступ. Поместив директиву
    AllowAll
    в состав блока
    <Directory>
    ,
    <Limit>
    или
    <Anonymous>
    , вы можете восстановить соглашения, принятые по умолчанию.

    • 

    AllowGroup список_групп
    . Данная опция разрешает доступ для пользователей, которым в блоке
    <Limit>
    запрещено обращаться к ресурсу. В качестве значения этой опции указываются имена групп, разделенные запятыми. Чтобы получить доступ к ресурсу, пользователь должен принадлежать всем указанным группам. Если имени группы предшествует символ учитываются лишь пользователи, не принадлежащие данной группе. Эта опция чаще всего используется для того, чтобы отменить для некоторых пользователей ограничения, наложенные такими опциями, как
    DenyAll
    .

    • 

    AllowOverwrite [on|off]
    . Эта опция определяет, может ли пользователь заменять файлы на сервере. По умолчанию принимается значение которое запрещает замену файлов.

    • 

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

    • 

    DefaultRoot имя_каталога [список_групп]
    . С помощью данной опции вы можете ограничить сферу деятельности пользователей подкаталогами определенного каталога. Для этого надо указать в качестве значения имя соответствующего каталога. Имя каталога может начинаться с символа
    /
    , в этом случае предполагается абсолютное имя. Символ
    ~
    определяет рабочий каталог пользователя. Если директива
    DefaultRoot
    должна иметь отношение лишь к некоторым из пользователей, надо указать их в списке групп. Список групп составляется по тем же правилам, что и для директивы
    AllowGroup
    .

    Совет

    Указав глобальную опцию

    DefaultRoot ~
    , вы запретите пользователям доступ к системным каталогам, а также к рабочим каталогам других пользователей. Настроенный подобным образом, сервер ProFTPd разрешает пользователям обращаться только к своим рабочим каталогам.

    • 

    DefaultTransferMode [ascii|binary]
    . FTP-сервер поддерживает два режима передачи файлов. В двоичном режиме (
    binary
    ) содержимое файла передается без изменений, а в символьном режиме (
    ascii
    ) выполняется преобразование некоторых символов. Символьный режим удобен для передачи текстовых файлов, но недопустим для работы с двоичными файлами, например, файлами, содержащими код программ. Директива
    DefaultTransferMode
    устанавливает режим передачи, используемый по умолчанию. При инсталляции сервера задается значение
    ascii
    данной директивы.

    • 

    Deny [from]
    идентификаторы_узлов. Данная директива выполняет действия, противоположные директиве
    Allow
    . Она используется в составе блока
    <Limit>
    и запрещает клиентам доступ к ресурсу.

    • 

    DenyAll
    . Данную директиву можно использовать в составе блоков
    <Limit>
    ,
    <Anonymous>
    или
    <Directory>
    . Она запрещает всем пользователям доступ к ресурсу. При необходимости вы можете указать в том же блоке одну из директив, отменяющих для некоторых пользователей ограничения, наложенные посредством
    DenyAll
    .

    • 

    DenyGroup список_групп
    . Эта директива позволяет определять группы, которым запрещен доступ к ресурсу в блоке
    <Limit>
    . Список групп формируется так же, как и для директивы
    AllowGroup
    .

    • 

    DenyUser список_пользователей
    . Данная директива противоположна
    AllowUser
    . Она запрещает доступ к ресурсу в блоке
    <Limit>
    .

    • 

    DisplayConnect имя_файла
    . Если в конфигурационном файле указана данная опция, ProFTPd передает клиенту текст, содержащийся в указанном файле. Это происходит после установления соединения, но до завершения процедуры регистрации.

    • 

    DisplayFirstChdir имя_файла
    . Данная директива указывает ProFTPd на то, что содержимое заданного файла должно быть передано пользователю в тот момент, когда он впервые сделает каталог текущим. Чаще всего для данной директивы задается файл
    .message
    , в результате чего пользователю передается файл
    .message
    , содержащийся в том каталоге, к которому он обращается в первый раз.

    • 

    DisplayLogin имя_файла
    . Эта директива действует подобно директиве
    DisplayConnect
    , но сообщение передается пользователю после успешного завершения процедуры регистрации.

    • 

    Group идентификатор_группы
    . Сервер ProFTPd запускается от имени пользователя root, но сразу после запуска переходит на выполнение с ограниченными полномочиями. Это снижает незаконного проникновения в систему извне. С помощью данной директивы указывается группа, полномочия которой получает ProFTPd. При инсталляции сервера в качестве значения данной директивы обычно задается
    nogroup
    ,
    ftp
    или другая подобная группа.

    • 

    MaxClients число | none
    . Данная директива позволяет ограничить количество клиентов, которые могут работать с сервером. Числовое значение (например, 30) определяет максимальное количество клиентов, значение
    none
    снимает данное ограничение.

    • 

    MaxInstances число
    . Эта директива действует подобно
    MaxClients
    , но если
    MaxClients
    задает максимальное количество успешно зарегистрировавшихся пользователей, то
    MaxInstances
    ограничивает число соединений, устанавливаемых сервером. Директива
    MaxInstances
    неэффективна при запуске ProFTPd посредством суперсервера, но подобные ограничения можно задать при настройке самого суперсервера.

    • 

    Order allow, deny|deny, allow
    . Если в блоке
    <Limit>
    присутствуют и запрещающие, и разрешающие директивы, ProFTPd сначала выполняет проверку на соответствие разрешающим, а лишь затем запрещающим директивам. В результате разрешающие директивы имеют более высокий приоритет, чем запрещающие. Кроме того, если отсутствует запрещающая директива, доступ по умолчанию разрешается. Поведение сервера можно изменить с помощью опции
    Order deny, allow
    . В этом случае запрещающие директивы получают более высокий приоритет, чем разрешающие, а доступ, не разрешенный явно, не предоставляется.

    • 

    RootLogin on|off
    . По умолчанию ProFTPd отказывает в регистрации пользователю
    root
    . Если в конфигурационном файле присутствует опция
    RootLogin on
    ,
    root
    получает право работать на FTP-сервере. (Для этого вам, возможно, придется предпринять и другие действия, например, удалить пользователя
    root
    из файла
    /etc/ftpusers
    .)

    • 

    ServerIdent on|off ["строка-идентификатор"]
    . Данная директива определяет, должен ли ProFTPd при установлении соединения предоставлять клиенту сведения о себе. Задавая значение
    on
    данной директивы, вы можете также указать строку-идентификатор. По умолчанию сервер сообщает пользователю, что для реализации функций FTP-сервера используется продукт ProFTPd. Если вы не собираетесь объявлять тип программы, вам надо явно указать строку, которая должна передаваться клиенту.

    • 

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

    • 

    ServerType inetd|standalone
    . Если вы запускаете ProFTPd посредством суперсервера, вы должны задать значение
    inetd
    данной опции, если же для запуска используется сценарий SysV или локальный сценарий, надо установить значение
    standalone
    . С помощью данной опции ProFTPd получает сведения о том, запущен ли он от имени обычного пользователя и должен ли непосредственно обрабатывать запрос (
    inetd
    ), или запуск осуществляется от имени пользователя
    root
    и для обработки запросов следует порождать новые процессы (
    standalone
    ).

    • 

    SyslogLevel emerg|alert|crit|error|warn|notice|info|debug
    . Данная директива определяет, насколько подробные сведения должны записываться в файл протокола. Значения расположены по мере возрастания объема записываемой информации:
    emerg
    соответствует самым общим, a
    debug
    — наиболее подробным сведениям.

    • 

    TransferLog имя_файла|NONE
    . С помощью данной директивы вы можете указать файл протокола для помещения в него сведений о переданных файлах или запретить запись подобной информации (для этого надо задать значение
    NONE
    ). Данная директива позволяет создавать различные файлы протоколов, предназначенные для разных целей. Она может независимо использоваться в блоках
    <Anonymous>
    ,
    <VirtualHost>
    и
    <Global>
    , а также указываться за пределами всех блоков.

    • 

    Umask маска_файла [маска_каталога]
    . Данная директива позволяет задать маску
    umask
    , которая будет использоваться при создании новых файлов (и, возможно, новых каталогов). По умолчанию принимается значение 022, приемлемое для многих систем.

    • 

    UseFtpUsers on|off
    . Задавая значение
    off
    директивы
    UseFtpUsers
    , вы можете запретить использование файла
    /etc/ftpusers
    . По умолчанию для данной директивы устанавливается значение
    on
    .

    • 

    UserAlias псевдоним имя_пользователя
    . В обычных условиях ProFTPd использует для аутентификации пользовательское имя, указанное при регистрации. Посредством данной директивы вы можете задать псевдоним, который будет отображаться в имя конкретного пользователя. Например, если в конфигурационном файле указана опция
    UserAlias rjones ronald
    , то при указании имени
    rjones
    аутентификация будет производиться с помощью учетной записи
    ronald
    . (Такая конфигурация часто используется в анонимных FTP-серверах, где для аутентификации всех пользователей применяется учетная запись
    ftp
    ).

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

    <Anonymous>
    для поддержки анонимных обращений. Для того чтобы обеспечить доступ всех пользователей к серверу, надо внести в его конфигурацию дополнительные изменения. Кроме того, файлы, предназначенные для всеобщего доступа, необходимо разместить в специально предназначенных для этого каталогах.

    Установка анонимного FTP-сервера

    FTP-серверы очень часто используются для предоставления анонимного FTP-доступа. Как было сказано ранее в этой главе, вместо анонимного FTP-сервера может быть установлен Web-сервер, однако в ряде ситуаций FTP-сервер целесообразно использовать параллельно с Web-сервером и даже вместо него. Так, например, вам может потребоваться анонимный FTP-сервер для предоставления файлов всем желающим и обычный FTP-сервер, осуществляющий аутентификацию посредством анализа пользовательского имени и пароля. Установив серверы, поддерживающие протоколы HTTP и FTP, вы упростите работу пользователей, привыкших работать лишь с одной из служб.

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

    Особенности работы анонимного FTP-сервера

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

    ftp://
    (например,
    ftp://ftp.threeroomco.com/pub/manual.pdf
    ). Некоторые особенности работы подобных FTP-серверов требуют специального рассмотрения.

    • Файлы, расположенные на анонимном FTP-сервере, копируются в одном направлении: с сервера на клиентский компьютер. Подобным образом настроено большинство Web-серверов. Существуют исключения из данного правила, но файлы, скопированные на анонимный FTP-сервер, обычно становятся недоступными остальным пользователям. К подобным мерам администраторы прибегают для того, чтобы их компьютеры не стали пунктом для обмена незаконной информацией. Если вы хотите получать файлы от удаленных пользователей, лучше всего настроить сервер так, чтобы перед передачей данных пользователь должен был зарегистрироваться на сервере. В качестве альтернативы FTP-серверу можно рассмотреть обмен документами по электронной почте.

    • Файлы, расположенные на анонимном FTP-сервере, доступны всем желающим. Это означает, что на том компьютере, на котором размещен анонимный FTP-сервер, нельзя размещать важные данные. Для того чтобы организовать защиту системных файлов, пользователю, обратившемуся на анонимный FTP-сервер, предоставляется лишь ограниченное подмножество файловой системы. Вся информация, находящаяся за пределами выделенной области, скрыта от него. На большинстве FTP-серверов для обеспечения защиты создается поддерево chroot, которое будет рассматриваться в главе 23.

    Внимание

    Несмотря на то что поддерево

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

    Если FTP-сервер использует поддерево

    chroot
    , вам придется скопировать в соответствующие каталоги некоторые системные конфигурационные файлы. Во многих пакетах, реализующих FTP-серверы для системы Linux, такие копии файлов создаются по умолчанию. Некоторые серверы, в том числе ProFTPd, перед тем как ограничить сферу своего доступа поддеревом
    chroot
    , имеют возможность прочитать свои конфигурационные файлы, поэтому объем данных, которые необходимо скопировать в каталоги поддерева, остается минимальным.

    Некоторые варианты конфигурации FTP-сервера (в особенности это касается ProFTPd) лучше работают при запуске сервера посредством сценария SysV. В других случаях нормальная работа обеспечивается и при использовании суперсервера (это справедливо для WU-FTPD). Одна из особенностей настройки FTP-сервера состоит в том, что системный вызов

    chroot()
    может использоваться только в том случае, если программа запускается от имени пользователя
    root
    . Если в конфигурационном файле суперсервера указан запуск FTP-сервера от имени другого пользователя, создать поддерево
    chroot
    невозможно. (Как было сказано ранее, вскоре после запуска FTP-сервер переходит к работе с ограниченными полномочиями, но происходит это после вызова системной функции
    chroot()
    .)

    Для работы анонимного FTP-сервера необходимо, чтобы некоторые файлы располагались в определенных каталогах. Этот вопрос будет подробнее рассмотрен далее в этой главе.

    Обеспечение безопасности при работе анонимного FTP-сервера

    Поскольку анонимный FTP-сервер доступен всем желающим, он может создавать серьезную угрозу для системы. Считается, что поддерживать на компьютере анонимный FTP-сервер не более опасно, чем Web-сервер или почтовый сервер. Однако, как показывает опыт многих администраторов, риск оказывается намного больше. Одна из причин состоит в том, что в защите многих программ, реализующих FTP-серверы (и особенно в WU-FTPD) были обнаружены многочисленные недостатки. Еще один источник опасности связан с тем, что FTP-сервер обеспечивает двунаправленную передачу данных, поэтому, если взломщику удастся воспользоваться недостатками защиты и выйти за пределы поддерева

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

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

    Если вы сконфигурируете одну программу для работы в качестве как анонимного, так и обычного FTP-сервера, вы тем самым объедините недостатки обоих типов серверов. Лучше всего, если анонимный FTP-сервер будет поддерживать только анонимные обращения (по крайней мере от внешних пользователей). Чтобы повысить уровень защиты, минимизируйте число учетных записей на компьютере, на котором работает анонимный сервер, и запретите запуск ненужных серверов.

    Опции, используемые для настройки анонимного FTP-сервера

    Большинство FTP-пакетов, поставляемых в составе различных версий Linux, полностью или частично сконфигурированы для функционирования в качестве анонимного FTP-сервера. Для того чтобы окончить настройку, вам надо приложить лишь минимальные усилия. В данном разделе описываются опции, позволяющие реализовать анонимный FTP-сервер как с помощью WU-FTPD, так и посредством ProFTPd. Вначале будет рассмотрено создание дерева каталогов (эта задача решается одинаково для обоих серверов), а затем — средства конфигурации для каждого из серверов.

    Создание поддерева каталогов

    Первый шаг по организации работы FTP-сервера — это создание поддерева каталогов. Как правило, корнем этого поддерева является каталог

    /home/ftp
    , но при необходимости вы можете разместить его в другой позиции файловой системы. В большинстве случаев в качестве владельца каталогов указывается
    root
    , либо пользователь, который должен непосредственно заниматься поддержкой FTP-узла, а права доступа к каталогам задаются равными 755 (
    rwxr-xr-x
    ). Это позволяет администратору редактировать файлы, содержащиеся в каталоге, но другим пользователям запись данных запрещена. В отличие от каталогов, при определении прав доступа к файлам не устанавливается бит исполняемой программы.

    В большинстве случаев в составе поддерева FTP задаются следующие подкаталоги.

    • 

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

    • 

    bin
    . Для выполнения некоторых действий FTP-сервер обращается к другим программам. Эти программы должны находиться в каталоге
    /bin
    (путь к каталогу определяется относительно корневого каталога, заданного с помощью функции
    chroot()
    ). Чаще всего серверу требуется утилита
    ls
    , кроме того, в процессе работы ему могут понадобиться программы
    tar
    ,
    gzip
    и
    zcat
    (последний файл представляет собой символьную ссылку на
    gzip
    ). Установив FTP-сервер, вы, возможно, обнаружите, что в каталоге
    bin
    уже находятся некоторые программы, причем размер их превышает размер соответствующих программ, находящихся в каталоге
    /bin
    системы. Причина в том, что при установке FTP-сервера в состав исполняемого файла помещаются все необходимые коды, в результате чего исключается необходимость в библиотечных файлах. Убедитесь, что для файлов, находящихся в этом каталоге, установлен бит исполняемой программы.

    • 

    lib
    . В этом каталоге содержатся динамические библиотеки, используемые при работе программ в
    /bin
    . Если вы скопируете в каталог
    /bin
    поддерева FTP утилиты из каталога
    /bin
    операционной системы, вам надо выяснить, какие библиотеки требуются для работы каждой из них. Это позволяет сделать команда
    ldd
    . Так, например, чтобы определить, какие библиотеки нужны для программы надо выполнить команду
    ldd /bin/ls
    .

    • 

    etc
    . Для работы FTP-сервера требуются два файла, содержащихся в каталоге
    /etc
    :
    passwd
    и
    group
    . Вам нет необходимости копировать соответствующие файлы из каталога
    /etc
    системы. Вам нужна лишь запись для пользователя ftp (либо другого пользователя, учетную запись которого вы используете для организации анонимного доступа).

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

    gzip
    . В этом случае вам придется скопировать соответствующий исполняемый файл в каталог
    /bin
    поддерева FTP.

    Опции WU-FTPD, используемые при создании анонимного FTP-сервера

    Наиболее важные опции, используемые для создания анонимного FTP-сервера на базе продукта WU-FTPD, находятся в файле

    /etc/ftpaccess
    . В процессе настройки вам может потребоваться изменить значения следующих опций.

    • 

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

    • 

    compress
    ,
    tar
    ,
    chmod
    ,
    delete
    ,
    overwrite
    и
    rename
    . Эти опции разрешают или запрещают пользователю выполнять соответствующие командах. Запретив анонимному пользователю вызывать команды, определяемые последними четырьмя опциями, вы лишите его возможности изменять файлы, расположенные на сервере. Эти опции могут показаться излишними, однако некоторая избыточность позволяет сохранить контроль над сервером, если при установке конфигурации была допущена ошибка или если некоторые функции сервера выполняются некорректно.

    • 

    anonymous-root
    . В качестве значения данной опции надо задать корневой каталог поддерева
    chroot
    , в пределах которого выполняется сервер WU-FTPD.

    В большинстве систем WU-FTPD запускается посредством суперсервера с привилегиями

    root
    . Когда сервер принимает запрос от анонимного пользователя, он порождает процесс от имени пользователя
    ftp
    . Таким образом, WU-FTPD может реализовать анонимный FTP-сервер, даже при запуске посредством суперсервера.

    Опции ProFTPd, используемые при создании анонимного FTP-сервера

    Основные опции ProFTPd, используемые для настройки анонимного FTP-сервера, находятся в файле

    proftpd.conf
    . Фрагмент конфигурационного файла, реализующий простой анонимный сервер, приведен ниже.

    <Anonymous /home/ftp>

     User      ftp

     Group     ftp

     # При регистрации пользователь может указывать имя anonymous

     # либо ftp

     UserAlias anonymous ftp

     # В пределах поддерева chroot запись данных запрещена

     <Limit WRITE>

      DenyAll

     </Limit>

    </Anonymous>

    • Директива

    <Anonymous>
    создает блок, в который помещаются остальные опции, применяемые для формирования конфигурации анонимного сервера. При наличии этой директивы ProFTPd изменяет процедуру регистрации, в данном примере сервер создает поддерево
    chroot
    , корневой каталог которого размещается в каталоге
    /home/ftp
    .

    • Директивы

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

    • Директива

    UserAlias
    обеспечивает обслуживание пользователей, которые указывают при регистрации имя anonymous.

    • В блоке, созданном с помощью директивы

    <Limit WRITE>
    , содержится директива
    DenyAll
    . Этот блок запрещает всем пользователям запись в каталоги. Если вы корректно задали права доступа в поддереве FTP, этот блок можно считать излишним. Однако, как было сказано ранее, некоторая избыточность поможет в том случае, если при настройке сервера была допущена ошибка или если в его системе защиты есть недостатки.

    • Если вы хотите создать псевдоанонимный сервер, который регистрирует пользователей посредством имени

    anonymous
    , но требует ввода пароля, вы должны использовать опцию
    AnonRequiresPassword on
    . В этом случае вам также следует задать пароль в файле
    /etc/passwd
    или
    /etc/shadow
    . (Сервер ProFTPd выполняет аутентификацию пользователя перед тем, как ограничить сферу своих действий поддеревом
    chroot
    , поэтому соответствующий пароль задается в системном файле
    /etc/passwd
    или
    /etc/shadow
    .)

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

    /etc/ftpusers
    .

    Резюме

    Ранее FTP-серверы представляли собой чрезвычайно важный компонент Internet, но в настоящее время некоторые их функции взяли на себя Web-серверы. Однако и сейчас FTP-серверы широко используются как средства для обеспечения удаленного доступа пользователей к своим файлам (в этом случае поддерживается двунаправленный обмен информацией) и поддержки анонимных обращений (при этом чаще всего осуществляется передача данных с сервера на клиентские машины). Наибольшей популярностью в Linux пользуются FTP-серверы WU-FTPD и ProFTPd. Обе программы предоставляют широкий набор возможностей и обслуживают как пользователей, регистрирующихся на сервере, так и анонимных пользователей. Настраиваются эти программы по-разному. Структура конфигурационных файлов ProFTPd напоминает структуру файлов Apache. При установке большинство серверов настраивается для регистрации пользователей. Незначительно изменив содержимое конфигурационных файлов, вы можете настроить их для работы в качестве анонимных FTP-серверов.









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