Серверы с ModSecurity
Последнее обновление Mar 5th, 2021 | История страницы | Улучшить эту страницу | Сообщить о проблеме
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$204 per month—let's make that $500!
Learn moreModSecurity: WAF, часто как модуль Apache (security2_module). Наборы правил могут блокировать запросы, похожие на атаки.
Manager MODX отправляет много данных через connectors/. Часть запросов (особенно при сохранении TV, ресурсов и другого структурированного контента) попадает под generic SQL-injection и похожие правила. Тогда действие в Manager падает. Иногда видна только общая ошибка или тихий сбой. Смотрите логи Apache / ModSecurity.
Правка конфигурации Apache или ModSecurity может положить сайт. Если не уверены, обратитесь к хостеру или администратору. Многие хостинги добавляют правило в whitelist, если вы дадите id правила и URI из лога.
Проверка, установлен ли ModSecurity¶
Спросите хостера или проверьте сами.
WHM / cPanel¶
- Войдите в WHM (часто
https://yoursite.com:2087/). - В разделе Plugins найдите Mod Security.

Командная строка¶
Список загруженных модулей Apache:
apachectl -t -D DUMP_MODULES
Если apachectl нет в PATH, найдите его (например find / -name apachectl 2>/dev/null) и вызовите с полным путём. ModSecurity обычно отображается как security2_module (shared).
Также можно искать security2_module или mod_security в основном конфиге Apache (часто /etc/httpd/ или /usr/local/apache/conf/) и подключаемых каталогах.
Логи¶
Воспроизведите сбой в Manager и смотрите error log Apache (путь зависит от хостинга):
tail -f /usr/local/apache/logs/error_log
При наличии проверьте audit log ModSecurity, например /usr/local/apache/logs/modsec_audit.log.
Что записать из ошибки¶
Пример:
[Sat Nov 19 19:16:32 2011] [error] [client 123.123.123.123] ModSecurity: Access denied with code 500 (phase 2).
Pattern match "(insert[[:space:]]+into.+values|select.*from.+[a-z|A-Z|0-9]|select.+from|bulk[[:space:]]+insert|union.+select|convert.+\\\\(.*from)"
at ARGS:els.
[file "/usr/local/apache/conf/modsec2.user.conf"]
[line "359"]
[id "300016"]
[rev "2"]
[msg "Generic SQL injection protection"]
[severity "CRITICAL"]
[hostname "yoursite.com"]
[uri "/connectors/element/tv.php"]
[unique_id "TshG4EWntHMAAAfIFmUAAAAI"]
Запишите:
-
Rule id:
[id "300016"] -
Host:
[hostname "yoursite.com"] -
URI:
[uri "/connectors/element/tv.php"]
Они нужны, чтобы снять конкретное правило только для этого пути.
Whitelist правила для URI¶
Лучше узкий whitelist: убрать конкретный rule id для конкретного Location, а не отключать ModSecurity на всём сайте.
Куда положить правило¶
На многих cPanel/WHM серверах основной httpd.conf править не стоит. Добавьте небольшой include в userdata vhost, на который ссылается блок VirtualHost домена, например:
-
/usr/local/apache/conf/userdata/std/2/USERNAME/*.conf -
/usr/local/apache/conf/userdata/std/2/USERNAME/yoursite.com/*.conf
Серверные allow list иногда лежат в /usr/local/apache/conf/modsec2/whitelist.conf. Пути различаются. Используйте то, что уже подключает ваш Apache через Include.
Перед правками сделайте backup. На cPanel можно пересобрать конфиг:
cd /usr/local/apache/conf
cp -p httpd.conf httpd.conf.backup
/scripts/rebuildhttpdconf
Пример whitelist¶
Из примера лога выше:
<LocationMatch "/connectors/element/tv.php">
<IfModule mod_security2.c>
SecRuleRemoveById 300016
</IfModule>
</LocationMatch>
Несколько id можно указать в одной строке или несколькими директивами SecRuleRemoveById. Если переименовали connectors/ или сменили путь сайта, обновите LocationMatch.
Другим connector или URL Manager могут понадобиться свои записи по мере нахождения в логах, например:
<LocationMatch "/connectors/resource/index.php">
<IfModule mod_security2.c>
SecRuleRemoveById 300013 300014 300015 300016
</IfModule>
</LocationMatch>
Затем reload или restart Apache (зависит от хостинга, например systemctl reload httpd или /etc/init.d/httpd restart). На cPanel сначала пересоберите conf, если так подключаются includes, затем перезапустите.
Если Apache не стартует, верните backup и исправьте синтаксис.
Большие загрузки / статические ресурсы¶
Лимиты request body в ModSecurity могут обрезать большие загрузки (в том числе крупные Static Resources), иногда около 64 KB, иногда без явной строки в логе.
В WHM Mod Security → Edit Config проверьте:
-
SecRequestBodyAccess -
SecRequestBodyLimit -
SecRequestBodyInMemoryLimit
Для location только на скачивание иногда нужно ослабить или отключить body access, например:
SecRequestBodyAccess Off
(Только там, где это уместно. Не как глобальный default без понимания tradeoff.)
Похожее обрезание бывает при double gzip (nginx и Apache сжимают одновременно). Исключите это, прежде чем винить ModSecurity.
Смотрите также¶
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$204 per month—let's make that $500!
Learn more










