ModSecurity + Nginx + Ubuntu 16.04

Мануал

ModSecurity – модуль брандмауэра веб-приложений (WAF) с открытым исходным кодом, который подходит для защиты Apache, Nginx и IIS от различных кибератак, которые используют потенциальные уязвимости в различных веб-приложениях.

В этой статье мы установим и сконфигурируем ModSecurity для Ubuntu 16.04.

Для начала выполним обновление пакетов:

# apt-get update -y
# apt-get upgrade -y

установим необходимые пакеты зависимостей:

# apt-get install -y git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-dev libxml2-dev libcurl4-openssl-dev automake pkgconf

Из-за некоторой нестабильности сообщалось относительно ModSecurity для Nginx официально рекомендуется использовать последнюю версию nginx_refactoring, когда это возможно.

скачаем nginx_refactoring:

# cd /usr/src

# git clone -b nginx_refactoring https://github.com/SpiderLabs/ModSecurity.git

собираем modsecurity:

 # cd ModSecurity
 # ./autogen.sh
 # ./configure --enable-standalone-module --disable-mlogc
 # make

скачаем и распокуем Nginx 1.10.3:

 # cd /usr/src
 # wget https://nginx.org/download/nginx-1.10.3.tar.gz
 # tar -zxvf nginx-1.10.3.tar.gz && rm -f nginx-1.10.3.tar.gz

собираем Nhinx с модулями modsecurity и ssl:

# cd nginx-1.10.3/
 # ./configure --user=www-data --group=www-data --add-module=/usr/src/ModSecurity/nginx/modsecurity --with-http_ssl_module
 # make
 # make install

добавляем дефолтного пользователя:

sed -i "s/#user  nobody;/user www-data www-data;/" /usr/local/nginx/conf/nginx.conf

если Nginx установлен успешно, связанные файлы будут расположены:

 nginx path prefix: "/usr/local/nginx"
 nginx binary file: "/usr/local/nginx/sbin/nginx"
 nginx modules path: "/usr/local/nginx/modules"
 nginx configuration prefix: "/usr/local/nginx/conf"
 nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
 nginx pid file: "/usr/local/nginx/logs/nginx.pid"
 nginx error log file: "/usr/local/nginx/logs/error.log"
 nginx http access log file: "/usr/local/nginx/logs/access.log"
 nginx http client request body temporary files: "client_body_temp"
 nginx http proxy temporary files: "proxy_temp"
 nginx http fastcgi temporary files: "fastcgi_temp"
 nginx http uwsgi temporary files: "uwsgi_temp"
 nginx http scgi temporary files: "scgi_temp"
 
 так же, можно протестировать установку:
# /usr/local/nginx/sbin/nginx -t

если все нормально, увидим следующее:

 nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
 nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Настраиваем Nginx

откроем на редактирование конфигурационный файл:

# gedit /usr/local/nginx/conf/nginx.conf

и привем его к виду:

location / {
     ModSecurityEnabled on;
     ModSecurityConfig modsec_includes.conf;
     #proxy_pass http://localhost:8011;
     #proxy_read_timeout 180s;
     root   html;
     index  index.html index.htm;
 }

Конфигурация Nginx выше – только демонстрационная конфигурация для использования Nginx как веб-сервер, а не как обратного прокси. Если вы используете Nginx в качестве обратного прокси, удалите  # в последних двух строках и делайте надлежащие настройки.

создадим файл /usr/local/nginx/conf/modsec_includes.conf:

# cat <<EOF>> /usr/local/nginx/conf/modsec_includes.conf
 include modsecurity.conf
 include owasp-modsecurity-crs/crs-setup.conf
 include owasp-modsecurity-crs/rules/*.conf
 EOF
 
 Импортируем конфигурационные файлы ModSecurity:
# cp /usr/src/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf

# cp /usr/src/ModSecurity/unicode.mapping /usr/local/nginx/conf/

изменим файл /usr/local/nginx/conf/modsecurity.conf :

# sed -i "s/SecRuleEngine DetectionOnly/SecRuleEngine On/" /usr/local/nginx/conf/modsecurity.conf

добавим набор правил OWASP:

# cd /usr/local/nginx/conf
 # git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
 # cd owasp-modsecurity-crs
 # mv crs-setup.conf.example crs-setup.conf
 # cd rules
 # mv REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
 # mv RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
Проверим работоспособность ModSecurity

откроем 80 порт для внешнего доступа:

# ufw allow OpenSSH
# ufw allow 80
# ufw default deny
# ufw enable

пропишем в браузере:

http://localhost/?param="><script>alert(1);</script>

в логах можно найти соответствующую запись используя grep:

grep error /usr/local/nginx/logs/error.log

 

Добавить комментарий