ModSecurity — популярный бесплатный Web Application Firewall (WAF) с открытыми исходными кодами. Долгое время существовал только в виде модуля к веб-серверу Apache.
Позже, понимая, что мир меняется, разработчики сделали т.н. standalone реализацию, которую можно встроить в любое приложение. И хотя, библиотека всё еще в глубокой бете и целиком завязана на APR, некоторое время назад появилась версия modSecurity для IIS.
Сейчас схема фронтенд-бэкенд стала де-факто стандартом, и логично перенести функционал внешней безопасности приложения на фронтенд, что привело к необходимости запуска ModSecurity под, пожалуй, лучшим на сегодняшний день веб-сервере с функционалом реверс-прокси — Nginx.
Архитектура Nginx такова, что модули подключаются в момент компиляции, а вызов обработчиков может происходить на различных фазах обработки запроса. В данный момент в модуле реализована обработка GET и POST запросов, в том числе запросов с большим размером тела(в отличие от naxsi), что потребовало установки собственного location handler'а.
Из-за этого, схема подключения модуля выглядит так:
Без modSecurity:
С подключенным modSecurity:
Что реализовано в текущей версии:
Что не реализовано:
Модуль доступен в svn, отзывы, рекомендации, баг-репорты и патчи очень приветствуются.
Спасибо Игорю Сысоеву и Валерию Холодкову, авторам веб-сервера и дополнений, исходный код которых используется в модуле.
Позже, понимая, что мир меняется, разработчики сделали т.н. standalone реализацию, которую можно встроить в любое приложение. И хотя, библиотека всё еще в глубокой бете и целиком завязана на APR, некоторое время назад появилась версия modSecurity для IIS.
Сейчас схема фронтенд-бэкенд стала де-факто стандартом, и логично перенести функционал внешней безопасности приложения на фронтенд, что привело к необходимости запуска ModSecurity под, пожалуй, лучшим на сегодняшний день веб-сервере с функционалом реверс-прокси — Nginx.
Архитектура Nginx такова, что модули подключаются в момент компиляции, а вызов обработчиков может происходить на различных фазах обработки запроса. В данный момент в модуле реализована обработка GET и POST запросов, в том числе запросов с большим размером тела(в отличие от naxsi), что потребовало установки собственного location handler'а.
Из-за этого, схема подключения модуля выглядит так:
Без modSecurity:
location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_redirect off; proxy_pass http://localhost:8080; }
С подключенным modSecurity:
location / { // включаем модуль, в off будет слать запросы на location указанный в ModSecurityPass ModSecurityEnabled on; // конфиг mod_security, здесь подразумевается, что лежит рядом с nginx.conf ModSecurityConfig modsecurity.conf; //named location, на который уйдет запрос, успешно прошедший проверку ModSecurityPass @backend; } location @backend { // стандартный конфиг proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_redirect off; proxy_pass http://localhost:8080; }
Что реализовано в текущей версии:
- Обработка GET и POST запросов(в том числе chunked)
- Блокировка запросов
Что не реализовано:
- Обработка ответов
- «Защита от дурака»
Модуль доступен в svn, отзывы, рекомендации, баг-репорты и патчи очень приветствуются.
Спасибо Игорю Сысоеву и Валерию Холодкову, авторам веб-сервера и дополнений, исходный код которых используется в модуле.
