Apache: защита изнутри

2 Мар

Apache — самый распространенный web-сервер в мире. В этой статье мы рассматриваем 20 способов сделать сервер более безопасным.

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

Скройте версию Apache и другую чувствительную информацию.

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

ServerSignature Off
ServerTokens Prod

Первая отвечает за подписи внизу страниц (можно использовать например эту программу), которые генерятся сервером, вторая — за заголовок HTTP ответа, в нашем случае он будет:

Server: Apache

Если паранойя совсем овладела вашим мозгом, то можно изменить исходники или использовать mod_security.

Сделайте так, что бы Apache работал от своего пользователя и группы,

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

User apache
Group apache

Убедитесь, что файлы вне web root директории не обслуживаются сервером

(в нашем примере это директория /web):

<Directory />
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>
<Directory /web>
Order Allow,Deny
Allow from all
</Directory>

Примечание: установленные опции Options None и AllowOverride None применимы для всего сервера, так что для остальных директорий необходимо будет устанавливать исключения, если им конечно требуются эти опции.

Выключите просмотр директорий,

в директиве Options раздела Directory:

Options -Indexes

или None

Выключите серверные инклуды:

Options -Includes

или None

Выключите CGI, если вы их не используете:

Options -ExecCGI

или None

Не позволяйте Апачу следовать по символьным ссылкам:

Options -FollowSymLinks

или None

Если вы хотите выключить все Options просто используйте None, если некоторые — используйте последовательность. Например:

Options -ExecCGI -FollowSymLinks -Indexes

Выключите поддержку файлов .htaccess.

Делается это в разделе Directory в директиве AllowOverride:

AllowOverride None

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

AccessFileName .httpdoverride
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>

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

Отключите все ненужные модули.

Обычно Апач идет с несколькими модулями, изучите документацию и поймите что же каждый модуль делает. Обычно вы поймете, что большинство из них вам просто не нужны. Просмотрите httpd.conf и найдите строчки LoadModule — это и есть загрузка модулей. Для выключения достаточно поставить в начале строки #. Для поиска:

grep LoadModule httpd.conf

Вот типичный пример найденного:

mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex

Убедитесь, что только рут имеет доступ к конфигам и исполняемым файлам сервера:

chown -R root:root /usr/local/apache
chmod -R o-rwx /usr/local/apache

Уменьшите время таймаута со стандартных 300 до 45 секунд, это снизит потенциальный эффект от DoS атак:

Timeout 45

Ограничьте большие запросы, это так же позволит бороться с DoS атаками:

LimitRequestBody 1048576

Полезно так же обозреть LimitRequestFields, LimitRequestFieldSize и LimitRequestLine.

Ограничьте размер XML Body (доступно только в Apache 2).

Многие руководства советуют установить значение LimitXMLRequestBody к 0, что означает загрузку произвольных файлов, однако если вы используете XML запросы для контроля версий то лучше сделать так:

LimitXMLRequestBody 10485760

Ограничьте одновременные запросы.

У Апача есть несколько опций при помощи которых можно управлять конкурентными запросами. Опция MaxClients определяет максимальное количество дочерних процессов, которые будут созданы по необходимости, если мало памяти — установите значение побольше. Так же следует обратить внимание на MaxSpareServers, MaxRequestsPerChild и на Apache2 ThreadsPerChild, ServerLimit и MaxSpareThreads.

Ограничьте по IP

Если доступ есть только у ограниченного круга лиц, то целесообразно прописать адреса. Для сети:

Order Deny,Allow
Deny from all
Allow from 176.16.0.0/16

Для IP адреса:

Order Deny,Allow
Deny from all
Allow from 127.0.0.1

Настройте HTTP Keep Alive.

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

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

Запуск Apache в изолированной среде (chroot)

chroot позволяет запускать серверные приложения в своей собственной изолированной директории. Это предотвращает от каких-либо небезопасных действий вне рабочей директории Апача.
mod_security — модуль созданный с поддержкой chroot. Это делает процесс установки простым. Необходимо добавить mod_security директивы конфигурации:

SecChrootDir /chroot/apache

Источник: http://www.petefreitag.com/item/505.cfm

One thought on “Apache: защита изнутри

  1. В универе посоветовали вас почитать. Интересно оказалось. Добавил в РСС читалку. Посоветую друзьям.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.