baltun
Администратор
- Сообщения
- 12.279
- Реакции
- 3.082
- Баллы
- 1.833
Что такое брандмауэр веб-приложений и чем он отличается от сетевого брандмауэра? Сетевой брандмауэр отслеживает и контролирует входящий и исходящий сетевой трафик на основе заранее определенных правил. Обычно запрос, который является вредоносным запросом или атакой, будет выглядеть как правильный трафик к сетевому брандмауэру. Существуют сетевые брандмауэры следующего поколения, которые поддерживают приложения, но они являются частью стека инфраструктуры, а не стека приложений. Брандмауэр веб-приложений будет защищать от атак на уровне приложения как часть стека приложений. По мере разработки и тестирования приложения политики и правила WAF будут частью процесса и будут развернуты вместе со стеком. WAF в рамках безопасности Layer 7 или HTTP Layer будет проверять HTTP-трафик и в зависимости от правил будет предупреждать, регистрировать или блокировать запрос.
Устанавливаем необходимые пакеты для компиляции:
Компиляция кода ModSecurity:
Компиляция коннектора ModSecurity для NGINX в качестве динамического модуля:
Определите, какая версия Nginx установлена и скачайте исходный код для этой конкретной версии с официального сайта.
Модули должны быть скомпилированы с теми же параметрами, что и nginx на вашем сервере.
Добавьте следующую директиву load_module в конфигурационный файл /etc/nginx/nginx.conf
Проще иметь отдельную папку, где можно сохранить все конфигурационные файлы modSecurity. Здесь мы будем использовать стандартную рекомендацию для конфигурационного файла от TrustWave SpiderLabs текущего сопровождающего проекта ModSecurity.
По умолчанию конфигурация в этом файле имеет значение DetectionOnly, что означает, что вредоносные запросы будут обнаружены и зарегистрированы, но не будут удалены. Измените директиву на активное отбрасывание запросов. Я бы порекомендовал сделать это на промежуточном экземпляре и протестировать приложение, прежде чем запускать его в любом рабочем экземпляре.

Для этих целей мы настроим пару простых правил. Поместите следующий текст в /etc/nginx/modsec/main.conf
Так же вы можете его включить для определенных директив:
Давайте выполним несколько запросов curl, чтобы проверить наши простые правила, созданные ранее.
Не существует такого понятия, как достаточная безопасность. Наличие безопасности на разных уровнях смягчает угрозу в большей степени, чем наличие одного уровня безопасности. Брандмауэры веб-приложений выступают в качестве последней линии защиты от вредоносной атаки. ModSecurity - это проект с открытым исходным кодом, который легко сочетается с NGINX, а также имеет возможность применять основные наборы правил OWASP. Это делает его хорошим местом для начала защиты ваших приложений.
Устанавливаем необходимые пакеты для компиляции:
Код:
yum install gcc make automake curl curl-devel httpd-devel autoconf libtool pcre pcre-devel libxml2 libxml2-devel
Компиляция кода ModSecurity:
Код:
$ git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
$ cd ModSecurity
$ git submodule init
$ git submodule update
$ ./build.sh
$ ./configure
$ make
$ make install
Компиляция коннектора ModSecurity для NGINX в качестве динамического модуля:
Код:
$ git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
Определите, какая версия Nginx установлена и скачайте исходный код для этой конкретной версии с официального сайта.
Код:
$ nginx -v
nginx version: nginx/1.20.1
Get the source code
$ wget http://nginx.org/download/nginx-1.20.1.tar.gz
$ tar -xvzmf nginx-1.20.1.tar.gz
Модули должны быть скомпилированы с теми же параметрами, что и nginx на вашем сервере.
Код:
$ cd nginx-1.14.1.tar.gz
$ ./configure <original configuration here> --add-dynamic-module=../ModSecurity-nginx
$ make modules
$ cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules
//Если у вас ISPmanager
$ cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules
Добавьте следующую директиву load_module в конфигурационный файл /etc/nginx/nginx.conf
Код:
load_module modules/ngx_http_modsecurity_module.so;
Проще иметь отдельную папку, где можно сохранить все конфигурационные файлы modSecurity. Здесь мы будем использовать стандартную рекомендацию для конфигурационного файла от TrustWave SpiderLabs текущего сопровождающего проекта ModSecurity.
Код:
$ mkdir /etc/nginx/modsec
$ wget -P /etc/nginx/modsec/ https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/modsecurity.conf-recommended
$ mv /etc/nginx/modsec/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
По умолчанию конфигурация в этом файле имеет значение DetectionOnly, что означает, что вредоносные запросы будут обнаружены и зарегистрированы, но не будут удалены. Измените директиву на активное отбрасывание запросов. Я бы порекомендовал сделать это на промежуточном экземпляре и протестировать приложение, прежде чем запускать его в любом рабочем экземпляре.

Для этих целей мы настроим пару простых правил. Поместите следующий текст в /etc/nginx/modsec/main.conf
Код:
Include "/etc/nginx/modsec/modsecurity.conf"
# Basic test rule
SecRule ARGS:blogtest "@contains test" "id:1111,deny,status:403"
SecRule REQUEST_URI "@beginsWith /admin" "phase:2,t:lowercase,id:2222,deny,msg:'block admin'"
- Правило 1 гласит, что если есть параметр запроса с именем «blogtest» со значением «test» в нем, удалите запрос.
- Правило 2 говорит, что если есть URI, который начинается с администратора, удалите запрос.
Код:
server {
# Other server directives here
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
}
Так же вы можете его включить для определенных директив:
Код:
server {
listen 443;
# modsecurity on; # All traffic over 443 have ModSec on
location / {
proxy_pass http://127.0.0.1:8080;
modsecurity off; # ModSec off by default
}
location /waf {
proxy_pass http://127.0.0.1:8080;
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
error_log /var/log/nginx/waf.log;
}
}
Давайте выполним несколько запросов curl, чтобы проверить наши простые правила, созданные ранее.
Код:
$ curl http://localhost/adminaccess
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
$ curl http://localhost/admin-login
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
$ curl https://localhost?blogtest=thisistestparam
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
Не существует такого понятия, как достаточная безопасность. Наличие безопасности на разных уровнях смягчает угрозу в большей степени, чем наличие одного уровня безопасности. Брандмауэры веб-приложений выступают в качестве последней линии защиты от вредоносной атаки. ModSecurity - это проект с открытым исходным кодом, который легко сочетается с NGINX, а также имеет возможность применять основные наборы правил OWASP. Это делает его хорошим местом для начала защиты ваших приложений.