Назад | Перейти на главную страницу

Apache2 mod_security простые правила запрета по умолчанию для определенного каталога

Как настроить простейший полезный набор правил запрета по умолчанию для mod_security?

Я хочу настроить mod_security позволять только очень специфические запросы к одному каталогу:

Вкратце: я использую Apache как обратный прокси для каталога /web_app/, в этом каталоге будет один файл php с именем get.php. Я хочу передать этому скрипту только те запросы, которые соответствуют следующему регулярному выражению:

get\.php\?ver=1&id=[a-f\d]{16,16}&v=[-.a-z\d\ ]{1,20}

Другими словами, запросы только с тремя полями: id, ver и v. Где первая цифра - 1, вторая - 16-значная шестнадцатеричная, а третья - строка длиной не более 20 символов с буквами, цифрами, точками, дефисами и пробелами. Он должен отклонять или удалять из запросов что-либо, кроме значений POST и GET, а именно: загрузки файлов, файлы cookie, все несущественные заголовки, значения, отличные от указанных 3, и т. Д.

Я не хочу менять способ работы других каталогов, просто /web_app/. Отфильтровать неправильный UTF или экранирование / кодировку URL не проблема, поэтому включите mod_security не должно быть проблемой само по себе.

Полагаю, вам нужно что-то вроде этого:

<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

Там же можно найти все другие параметры.