Ошибки 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, но нет решения, тогда пишем в комментарии...


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

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

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


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

Комментарии   

Иван Шаман
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_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
Цитировать
Олегатор
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/modsecurity/modsecurity.conf
Цитировать
АдМинь БагоИскатель
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/apache2.conf либо в /etc/apache2/envvars. Сменить владельца каталога: "chown -R www-data:www-data /var/www/tmp".
Цитировать
Юра
0 #4 Юра 12.08.2015 07:25
создал директорию и всеравно
Message: collection_store: Failed to access DBM file "/var/www/tmp/ip": 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_security'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: ca01h/51713d Inode: 163845 Links: 2
Access: (0777/drwxrwxrwx) Uid: ( 48/ apache) Gid: ( 0/ root)
Access: 2015-08-09 22:12:51.000000000 +0400
Modify: 2014-08-29 18:00:02.000000000 +0400
Change: 2015-08-09 16:23:33.000000000 +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_security". Попробуйте сменить директорию на /tmp
Цитировать
Юра
0 #1 Юра 09.08.2015 15:07
у меня с и так нормальные пути прописаны а выскакивает эта ошибка Failed to access DBM file

SecTmpDir /var/lib/mod_security
SecDataDir /var/lib/mod_security
Цитировать
Комментарии в блоге
Новое на форуме