Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Безопасная эксплуатация Apache, часть 11: использование журналов событий и других средств

Оригинал: Securing Apache, Part 11: Logs, et al.
Автор: Arpit Bajpai
Дата публикации: 1 Сентября 2011 г.
Перевод: А.Панин
Дата перевода: 13 Февраля 2013 г.

Другие пути повышения безопасности Apache

Использование модуля mod_parmguard

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

Настройка модуля с точки зрения сервера Apache крайне проста, так как поддерживаются только три директивы. Важной частью является файл настроек модуля, который использует язык разметки XML и является сердцем модуля mod_parmguard. Модуль mod_parmguard поддерживает только две директивы уровня сервера (ParmguardConfFile и ParmguardTrace) и одну директиву расположения (ParmguardEngine).

Директива ParmguardConfFile устанавливает расположение файла настроек модуля. В данном случае /usr/local/apache2/conf/mod_parmguard.xml:
<IfModule mod_parmguard.c>
    ParmguardConfFile /usr/local/apache2/conf/mod_parmguard.xml
</IfModule>
Вам необходимо создать файл mod_parmguard.xml хотя бы с минимальным количеством настроек. Пример такого файла приведен ниже:
<?xml version="1.0"?>
<!DOCTYPE parmguard SYSTEM "mod_parmguard.dtd">
<parmguard>
<!-- requested action when there is a mismatch -->
<global name="scan_all_parm" value="1"/>
<global name="illegal_parm_action" value="accept,log,setenv"/>
</parmguard>

На данный момент не стоит беспокоиться о параметрах, описанных в данном файле. Вы также должны помнить о том, что следует скопировать файл mod_parmguard.dtd в ту же директорию, что и файл mod_parmguard.xml, иначе не сможет быть произведен разбор XML-файла и сервер Apache не будет запущен.

Директива ParamguardTrace используется в том случае, когда у вас возникают проблемы с модулем и вы хотите понять причину этих проблем. Единственным доступным является параметр debug. Например:
<IfModule mod_parmguard.c>
    ParmguardTrace debug
    ParmguardConfFile /usr/local/apache2/conf/mod_parmguard.xml
</IfModule>

Сообщения отладки будут сохраняться в журнале ошибок Apache.

Директива ParamguardEngine устанавливает область применения модуля. Эта директива должна использоваться внутри элемента <Location> файла httpd.conf (в случае расположения вне этого элемента, от ее использования не будет никакого эффекта). Например:
<Location /cgi-bin/>
    ParmguardEngine on
</Location>
В итоге в файл httpd.conf должны быть внесены изменения для настройки модуля, аналогичные приведенным ниже:
<IfModule mod_parmguard.c>
#ParmguardTrace debug
ParmguardConfFile /usr/local/apache2/conf/mod_parmguard.xml
</IfModule>

<Location /cgi-bin/>
#ParmguardEngine on
</Location>
Примечание: Директива ParmguardEngine закомментирована, так как до этого момента не было установлено подходящего фильтра.

Сокрытие версии Apache и другой важной информации

Взломщики могут использовать эту информацию в своих целях при организации атаки. Также вывод этой информации говорит о том, что вы оставили множество настроек со значениями по умолчанию. Вам необходимо добавить или отредактировать значения двух директив файла httpd.conf:
ServerSignature Off
ServerTokens Prod
Директива ServerSignature отвечает за вывод информации о сервере внизу страниц, генерируемых Apache, таких, как страницы ошибок 404, списки содержимого директорий, и.т.д. Директива ServerTokens используется для указанию Apache того, что нужно выводить в параметре Server HTTP-заголовка ответа. После установки значения Prod, параметр Server в HTTP-заголовке ответа будет выглядеть следующим образом:
Server: Apache

Убедитесь, что сервер не работает с файлами вне своей корневой директории

Apache не должен предоставлять доступ к файлам, расположенным вне его корневой директории. Предполагая, что все ваши веб-сайты расположены в одной директории (назовем ее /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, все параметры и переопределения не будут действовать в рамках сервера. Вам необходимо объявить их явно для каждой директории с помощью директив Option и Override.

Не стоит позволять Apache переходить по символьным ссылкам

Это также может быть сделано с помощью директивы Options внутри элемента Directory. В качестве параметра директивы Options следует использовать либо None, либо -FollowSymLinks.

Разрешите доступ на чтение к файлам настройки и исполняемым файлам Apache только для пользователя root

Предполагая, что ваш сервер Apache установлен в директорию /usr/local/apache, это действие может быть выполнено с помощью следующих команд:
chown -R root:root /usr/local/apache
chmod -R o-rwx /usr/local/apache

Позднее мы вернемся к рассмотрению вопросов безопасности и взлома в новых интересных статьях.

Всегда помните: нужно знать все о взломе, но не заниматься им.

К началу серии: "Безопасная эксплуатация Apache, часть 1: базовые понятия"