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

Почти все Web-серверы соответствуют правилам контроля доступа, определенным в эталонном механизме HTTP, разработанном Национальной ассоциацией по компьютерной безопасности (NCSA). (Самый популярный в Internet Web-сервер Apache создан на основе ПО NCSA и соответствует этим правилам как нельзя точнее.)

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

Мы решили вкратце рассказать о принципах работы системы безопасности Web-сервера.

На каждом сервере есть каталог с конфигурационными файлами. (На многих Unix-системах этот каталог выглядит примерно как /usr/local/www/ server/conf.) В нем есть файл под названием access.conf. Этот файл определяет ограничения доступа к различным каталогам с Web-страницами и CGI-скриптами.

Содержимое access.conf весьма напоминает HTML; однако слова, заключенные в угловые скобки, называются не тегами, а директивами. Все доступные извне деревья директорий описаны в директиве подразделения каталогов, которая выглядит примерно так:

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

Например, директива


order deny, allow
deny from all
allow from ourdomain.com
allow from client1.com
allow from client2.com
allow from 192.216.48

расшифровывается следующим образом: строка, начинающаяся со слова "order" указывает, что сервер должен вначале просмотреть списки клиентов, которым доступ запрещен (команда deny). Затем просматриваются команды allow, которые разрешают доступ определенным клиентам, даже если они и попали ранее в списки deny.

В приведенном примере мы начинаем с тотального запрета; т. е. для доступа к файлам каталога клиент должен быть упомянут в одной из команд allow. Если указан неполный IP-адрес, то команда будет относиться ко всем начинающимся с него адресам.

Файл access.conf не гарантирует решения проблемы контроля доступа. Каждая из директив относится ко всему поддереву каталогов, а не к одной директории. Кроме того, изменения вступают в силу лишь после перезапуска Web-сервера. И тем не менее средства для ограничения доступа к конкретному каталогу и внесения изменений в процессе работы существуют.

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

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