Ошибки ModSecurity и способы их устранения

archive view archive save

article На этой странице описаны ошибки модуля ModSecurity под веб-сервером Apache и способы их устранения, а также различные проблемы связанные с использованием Mod_Security

ModSecurity: collections_remove_stale: Failed to access DBM file

Интересная ошибка mod_security, так сразу, с разбега, её локализировать и не получилось...

less /var/log/httpd/error_log|grep remove_stale
# or
less /var/log/apache2/error.log|grep remove_stale

[Fri Sep 06 01:10:49 2013] [error] [client 199.30.24.132] ModSecurity: collectio
ns_remove_stale: Failed to access DBM file "/tmp//ip": Permission denied [hostna
me "example.com"] [uri "/fcgi-bin/php-fcgi-wrapper/index.php"] [unique_id "
UijzWF2qgHIAAFki1-0AAAAE"]

[Fri Sep 06 14:03:43 2013] [error] [client 176.137.161.136] ModSecurity: collect
ions_remove_stale: Failed to access DBM file "/tmp//global": Permission denied [
hostname "example.com"] [uri "/fcgi-bin/php-fcgi-wrapper/index.php"] [uniqu
e_id "Uimofl2qgHIAAFy2SagAAAAF"]

Указание полного пути к каталогу /tmp в директиве SecDataDir и SecTmpDir может и нерешить проблему:

vi /etc/httpd/conf.d/00_mod_security.conf
...
SecDataDir /tmp
SecTmpDir /tmp

Смена владельца каталога /tmp/ на nobody также недаст желаемого результата. Владельцем каталога /tmp/ по умолчанию является "chown -R root:root /tmp" и правами на выполнение/запись для всех "chmod 0777 /tmp"

Создание отдельного каталога с установкой прав и явным указанием полного пути к каталогу в директиве SecDataDir и SecTmpDir также может нерешить проблему

mkdir /var/log/httpd/mod_security /var/log/httpd/mod_security/data
chown -R apache:apache /var/log/httpd/mod_security
chmod -R 0777 /var/log/httpd/mod_security
vi /etc/httpd/conf.d/00_mod_security.conf

Кому-то якобы помогало решить проблему "ModSecurity: collections_remove_stale: Failed to access DBM file" созданием директории tmp в chroot директории:

# Нужно создать директорию tmp в chroot директории сервера
# Обычно это /var/www/ или /var/apache2/
mkdir /var/www/tmp
# Установить владельцем каталога, пользователя под которым 
# изначально запускается сервер, обычно apache или www-data
chown -R apache:apache /var/www/tmp
# Дать разрешение на выполнение/запись для всех, кроме публичных
chmod -R 770 /var/www/tmp
# Или создать символьную ссылку (ака Symbolic link)
ln -s /tmp /var/www/tmp
# Перезапустить сервер
apachectl graceful

Собственно решение проблемы в моём случае было такое:

 

По ошибке "ModSecurity: collections_remove_stale: Failed to access DBM file" есть ещё некоторые размышления, но мне лично они непригодились:

Если все хорошо, то ошибки mod_security "ModSecurity: collections_remove_stale: Failed to access DBM file" в логфайлах быть недолжно, а в каталоге /tmp должны быть файлы: global.pag, ip.pag, global.dir и ip.dir

Если в системе установлена SELinux, то нужно попробовать отклюить её:

$ setenforce 0
 
или
 
$ echo 0 > /selinux/enforce

Если после отключения SELinux проблема решена, значит создадим правило и снова включим SELinux:

$ chcon -R system_u:object_r:httpd_sys_content_t /path/to/modsec_storage
 
$ setenforce 1
 
или
 
$ echo 1 > /selinux/enforce

Если ничего не помогло, то последнее, что можно сделать это отключить правила связанные со сбором IP: 900050, 900018, 900020, 900021

SecRuleRemoveById not allowed here

[Sun Sep 08 13:30:30 2013] [alert] [client 98.135.221.142] /var/www/public_h
tml/.htaccess: SecRuleRemoveById not allowed here, referer: http://example.
com/index.php

Ошибка mod_security "SecRuleRemoveById not allowed here" возникает только при исполнении PHP файлов, при открытии ХТМЛ файлов эта ошибка обычно не проявляется.

Использование директив mod_security в файле .htaccess разрешено только в том случае, если во время компиляции модуля .htaccess был указан флаг --enable-htaccess-config и если он был действительно указан, то в .htaccess можно будет использовать такие директивы mod_security

  • SecAction
  • SecRule
  • SecRuleRemoveByMsg
  • SecRuleRemoveByTag
  • SecRuleRemoveById
  • SecRuleUpdateActionById
  • SecRuleUpdateTargetById
  • SecRuleUpdateTargetByTag
  • SecRuleUpdateTargetByMsg

На практике большая часть модулей mod_security, доступных из различных репозиториев, компилируется без указания --enable-htaccess-config, например mod_security из репозитория atomic

ModSecurity: Execution error - PCRE limits exceeded

[Fri Sep 06 15:07:59 2013] [error] [client 183.168.233.180] ModSecurity: Rule 7f
8b022e38e8 [id "981256"][file "/etc/httpd/modsecurity.d/activated_rules/modsecur
ity_crs_41_sql_injection_attacks.conf"][line "232"] - Execution error - PCRE lim
its exceeded (-8): (null). [hostname "example.com"] [uri "/forum"] [unique_id "U
im3j12qg3EAABGaVwoAAAAI"]

PCRE (Perl Compatible Regular Expressions) — библиотека, которая реализует работу регулярных выражений в стиле Perl, но с некоторыми отличиями.

Лимит для ModSecurity "PCRE limits" можно изменить следующим образом:

vi /etc/httpd/modsecurity.d/modsecurity.conf
 
# PCRE Tuning
# We want to avoid a potential RegEx DoS condition
#
SecPcreMatchLimit 1000
SecPcreMatchLimitRecursion 1000
 
apachectl graceful

Изменять лимит ModSecurity "PCRE limits" выше значения по умолчанию нерекомендуется! Значение по умолчанию для SecPcreMatchLimit и SecPcreMatchLimitRecursion = 1500.

Ошибка "ModSecurity: Execution error - PCRE limits exceeded" часто может возникать из-за неправильно составленных правил или например из-за того, что версия правил устаревшая и не соответствует версии самого модуля mod_security.

Другими словами если версия mod_security 2.7.5, а версия правил 2.2.6, то нам явно нужно обновить правила mod_security до версии 2.2.8, здесь читаем список изменений в правилах owasp-modsecurity-crs

После загрузки и распаковки/обновления правил также рекомендуется обновить и modsecurity_crs_10_setup.conf:

wget -O master.zip https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/master.zip
unzip master.zip
rm master.zip
 
cp -Rf owasp-modsecurity-crs-master/* /etc/httpd/modsecurity.d/
rm -Rf owasp-modsecurity-crs-master
 
cd /etc/httpd/modsecurity.d/
 
cp modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf
 
ln -s /etc/httpd/modsecurity.d/modsecurity_crs_10_setup.conf \
    /etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_10_setup.conf
 
for f in `ls base_rules` ; do ln -s /etc/httpd/modsecurity.d/base_rules/$f \
    /etc/httpd/modsecurity.d/activated_rules/$f ; done
 
ls -l activated_rules

Ссылки по теме:

Есть ошибка модуля ModSecurity, но нет решения, тогда пишем в комментарии...


Об авторе
АдМинь БагоИскатель
АдМинь БагоИскатель ярый борец за безглючную работу любых механизмов и организмов во всей вселенной и потому пребывает в вечном поиске всяческих багов, а тот кто ищет как известно всегда находит. Когда что-то или кого-то вылечить не в состоянии, то со словами "Я в аду, а вы все черти" уходит в запой выйдя из которого снова берётся лечить неизлечимое.
Ещё статьи автора

Комментарии   

Иван Шаман
0 #8 Иван Шаман 13.08.2015 09:55
Цитирую Юра:

Версия CentOS, пробовал сделать директорию
#SecTmpDir /var/lib/mod_security
#SecDataDir /var/lib/mod_security
SecTmpDir /var/www/tmp
SecDataDir /var/www/tmp
создал на пользователя apache т.к. сервер работает от этого пользователя но в логах всеравно
Failed to access DBM file "/var/www/tmp/ip": Permission denied
Audit log: Failed to lock global mutex: Permission denied

Вас спрашивалось про попытку использования именно каталога "/tmp", а не "/var/www/tmp". Возможно SeLinux мешает, возможно Вы ещё чего упустили.

:trepanat: Кроме упомянутых здесь причин, иных, казалось бы, быть не может, - нужно смотреть внутрь пациента.

Если не сможете решить, - цена вопроса = 200 р.. Пишите или стучите в аську (скайпом временно не пользуемся), пароли от сервера передавать нам только через форму (там есть инструкция): https://www.remoteshaman.com/gpg/
Цитировать
Юра
0 #7 Юра 13.08.2015 07:27
Цитирую АдМинь БагоИскатель:
Директорию /tmp пробовали? Какая ОС? Если Debian Jessie, то там апач 2.4 работает от пользователя "www-data", а не "apache", - пользователь и группа от которого работает апач прописаны либо в /etc/apache2/apache2.conf либо в /etc/apache2/envvars. Сменить владельца каталога: "chown -R www-data:www-data /var/www/tmp".


Версия CentOS, пробовал сделать директорию
#SecTmpDir /var/lib/mod_se curity
#SecDataDir /var/lib/mod_se curity
SecTmpDir /var/www/tmp
SecDataDir /var/www/tmp
создал на пользователя apache т.к. сервер работает от этого пользователя но в логах всеравно
Failed to access DBM file "/var/www/tmp/i p": Permission denied
Audit log: Failed to lock global mutex: Permission denied
Цитировать
Олегатор
0 #6 Олегатор 12.08.2015 10:30
Цитирую Юра:
у меня с и так нормальные пути прописаны а выскакивает эта ошибка Failed to access DBM file

SecTmpDir /var/lib/mod_security
SecDataDir /var/lib/mod_security

Эти директивы могут быть в нескольких местах:
  • /etc/apache2/mods-enabled/security2.conf
  • /etc/modsecurit y/modsecurity.c onf
Цитировать
АдМинь БагоИскатель
0 #5 АдМинь БагоИскатель 12.08.2015 09:15
Цитирую Юра:
создал директорию и всеравно
Message: collection_store: Failed to access DBM file "/var/www/tmp/ip": Permission denied
Message: Audit log: Failed to lock global mutex: Permission denied

Директорию /tmp пробовали? Какая ОС? Если Debian Jessie, то там апач 2.4 работает от пользователя "www-data", а не "apache", - пользователь и группа от которого работает апач прописаны либо в /etc/apache2/ap ache2.conf либо в /etc/apache2/en vvars. Сменить владельца каталога: "chown -R www-data:www-data /var/www/tmp".
Цитировать
Юра
0 #4 Юра 12.08.2015 07:25
создал директорию и всеравно
Message: collection_stor e: Failed to access DBM file "/var/www/tmp/i p": Permission denied
Message: Audit log: Failed to lock global mutex: Permission denied
Цитировать
Юра
0 #3 Юра 11.08.2015 22:00
Цитирую АдМинь БагоИскатель:
Проверьте нет ли завершающего слеша в конце путей, покажите вывод "stat /var/lib/mod_security". Попробуйте сменить директорию на /tmp

File: `/var/lib/mod_s ecurity'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: ca01h/51713d Inode: 163845 Links: 2
Access: (0777/drwxrwxrw x) Uid: ( 48/ apache) Gid: ( 0/ root)
Access: 2015-08-09 22:12:51.000000 000 +0400
Modify: 2014-08-29 18:00:02.000000 000 +0400
Change: 2015-08-09 16:23:33.000000 000 +0400
Цитировать
АдМинь БагоИскатель
0 #2 АдМинь БагоИскатель 11.08.2015 05:31
Цитирую Юра:
у меня с и так нормальные пути прописаны а выскакивает эта ошибка Failed to access DBM file

SecTmpDir /var/lib/mod_security
SecDataDir /var/lib/mod_security

Проверьте нет ли завершающего слеша в конце путей, покажите вывод "stat /var/lib/mod_se curity". Попробуйте сменить директорию на /tmp
Цитировать
Юра
0 #1 Юра 09.08.2015 15:07
у меня с и так нормальные пути прописаны а выскакивает эта ошибка Failed to access DBM file

SecTmpDir /var/lib/mod_se curity
SecDataDir /var/lib/mod_se curity
Цитировать

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

АХТУНГ! Все комменты гостей модерасятся модерастом.
  1. Мессаги исключительно рекламного содержания, либо содержащие только одни оценочные суждения типа "круто" ("отлично", "спасибо", "автор дебил" и т.п.) не публикуются;
  2. Злостным спамерам, пранкерам и прочей сетевой нечисти рекомендуем напрасно не тратить своего времени и удовлетворять свои больные фантазии на специализированных Интернет ресурсах!;
  3. Разумная обоснованная критика, замечания, дополнения приветствуются. Поля помеченные символом * обязательны к заполнению.


Защитный код
Обновить

Комментарии в блоге
Новое на форуме