Apache2 mod_security - простые правила по умолчанию, запрещающие использование определенной директории.
Как настроить простейший полезный набор правил по умолчанию для запрета mod_security
?
Я хочу настроить mod_security
разрешить только очень конкретные запросы к одному каталогу:
Короче говоря: я использую Apache в качестве обратного прокси для каталога /web_app/
, в этом каталоге будет один файл с именем php get.php
, Я хочу передать этому сценарию только те запросы, которые соответствуют следующему регулярному выражению:
get \.php \? ver = 1 & id = [af\d]{16,16}&v=[-.az\d\ ]{1,20}
Другими словами, запросы только с тремя полями: id
, ver
а также v
, Где первая цифра 1, вторая шестнадцатеричная 16 цифра, а третья строка длиной не более 20 символов с буквами, цифрами, точками, дефисами и пробелом. Он должен запретить или удалить из запросов все, кроме значений POST и GET, а именно: загрузки файлов, файлы cookie, все несущественные заголовки, значения, отличные от указанных 3, и т. Д.
Я не хочу менять способ работы других каталогов, просто /web_app/
, Отфильтровывать неправильные UTF или экранирование / кодирование URL не проблема, поэтому включение mod_security
не должно быть проблемой само по себе.
2 ответа
Я полагаю, вам нужно что-то вроде этого:
<LocationMatch "^/web_app/">
SecRule REQUEST_URI "!(:?get\.php\?ver=1&id=([a-f\d]){16,16}&v=([-.a-z\d\ ]){1,20})" "id:123,phase:2, deny, status:406"
</LocationMatch>
Для REQUEST_METHOD вы можете добавить одно дополнительное правило для блокировки, если REQUEST_METHOD не соответствует методу, который вы хотите / разрешаете.
Для фильтрации аргументов существует гораздо более простой способ, чем использование регулярных выражений для всего URI:
<Location /web_app>
SecFilterSelective ARG_NAMES "!^(id|ver|v)$"
SecFilterSelective ARG_ver "!^1$"
SecFilterSelective ARG_id "!^[a-f\d]{16,16}"
SecFilterSelective ARG_v "!^[-\.a-z\d\ ]{1,20}"
# Here the same for the request type
SecFilterSelective REQUEST_METHOD "!^(GET|HEAD|POST)$"
</Location>
Будет соответствовать по любому аргументу НЕ в списке только под /web_app
,
Хорошие примеры можно найти в документации mod_security: http://www.modsecurity.org/documentation/modsecurity-apache/1.9.3/html-multipage/09-examples.html
Все остальные параметры можно найти и там.