Pull to refresh

NGINX инструкция по установке ModSecurity

Reading time4 min
Views28K


В этой статье представлена инструкция по установке динамического модуля ModSecurity на веб-сервер NGINX в качестве межсетевого экрана веб-приложения (WAF). NGINX работает в режиме обратного прокси-сервера. Работу выполнено на дистрибутиве Linux – CentOS 7. Модуль установлено в качестве «динамического», что бы сервис оставался гибким в настройке. Использовано официальное руководство NGINX по установке.


1. Предварительная установка компонентов


Для корректной работы службы необходимо установить дополнительные библиотеки для работы. Библиотеки понадобятся для сборки проекта из исходного кода. Предполагается что у пользователя обновлена система (# yum update).

yum install install -y apt-utils autoconf automake build-essential git libcurl4-openssl-dev libgeoip-dev liblmdb-dev libpcre++-dev libtool libxml2-dev libyajl-dev pkgconf wget zlib1g-dev


2. Начало установки службы



Для того что бы потом не было проблем с запуском службы с помощью команды service nginx start установлена версия из официального репозитория на GitHub.

Создадим файл /etc/yum.repos.d/nginx.repo в который нужно добавить версию дистрибутива. Без указания версии NGINX подтягивается последняя, которую запушили на сайт.

[nginx-1.13.7]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

Далее просто устанавливаем

yum install nginx

3. Компиляция модуля




Для начала перейдём в соответствующую директорию:

cd /home/user/Downloads 

Скачаем модуль с главной ветки на GitHub:

git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity.git

Далее переходим в папку с межсетевым экраном и компилируем исходный код:


cd ModSecurity
git submodule init
git submodule update
./build.sh
./configure
make
make install

4. Установка коннектора


Для того чтобы вся система была гибкой будет установлено коннектор для соединения NGINX и ModSecurity. Это означает, что модуль не будет зашит в код сервера, а будет лишь динамической составляющей, что позволит его удалить в любой момент, изменить код и тд.

git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git

5. Повторная сборка веб-сервера


Для того что бы NGINX работал с коннектором, к которому будет подключён модуль нужно пересобрать сервер. Для этого сначала узнаем какая версия NGINX установлена:

nginx –v

Вывод должен быть примерно таким (в зависимости от версии)

nginx version: nginx/1.13.7

Далее с официального сайта скачаем соответствующую версию, что бы не было ошибки при запуске службы и компилируем с определённым параметром:


        cd ..
	wget http://nginx.org/download/nginx-1.13.7.tar.gz
	tar zxvf nginx-1.13.7.tar.gz
	cd nginx-1.13.7
	./configure --with-compat --add-dynamic-module=../ModSecurity-nginx
	make modules

Далее копируем файл модуля в папку веб-сервиса:

cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules

Перед первым блоком в /etc/nginx/nginx.conf добавить:

load_module modules/ngx_http_modsecurity_module.so;

6. Файл конфигурации модуля


Разработчики предлагают свои базовые правила для защиты веб-ресурса. Следует отметить, что, установив их не стоит рассчитывать на достойный уровень, так как создатели оставляют полную свободу конфигурации и написании правил пользователем, что ограничивает их в добавлении базовых правил в стандартный конфигурационный файл.


        mkdir /etc/nginx/modsec
	cd /etc/nginx/modsec
	sudo wget https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/modsecurity.conf-recommended
	sudo mv modsecurity.conf-recommended modsecurity.conf


В файле modsecurity.conf заменить SecRuleEngine DetectionOnly на SecRuleEngine On
Далее создадим файл /etc/nginx/modsec/main.conf и додадим в него:

# Include the recommended configuration
		Include /etc/nginx/modsec/modsecurity.conf

7. OWASP rules


Ни для кого не секрет что OWASP – это лидер по вопросам веб-безопасности. У них есть свой рул-сет для данного модуля, который, как и проект, открытый для пользователей. Поэтому установим его как базовый набор правил:


        cd /usr/local
	wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.0.0.tar.gz
	tar -xzvf v3.0.0.tar.gz
	mv owasp-modsecurity-crs-3.0.0 /usr/local
	cd /usr/local/owasp-modsecurity-crs-3.0.0
	cp crs-setup.conf.example crs-setup.conf

В /etc/nginx/modsec/main.conf добавить следующее:

# OWASP CRS v3 rules
Include /usr/local/owasp-modsecurity-crs-3.0.0/crs-setup.conf
Include /usr/local/owasp-modsecurity-crs-3.0.0/rules/*.conf

8. Завершение работы


В файл /etc/nginx/conf.d/proxy.conf добавить

server {
    listen 80;
	modsecurity on;
	modsecurity_rules_file /etc/nginx/modsec/main.conf;

# If you have proxy
    location / {    	
    	proxy_pass http://192.168.x.x;
    }
}

9. Проверка работоспособности


Для проверки компонентов веб-сервиса достаточно его запустить и просмотреть ошибки. Часто потребуется удалить правило, которое отвечает за проверку, где используется другой модуль (GeoIP, например). Поэтому можно смело удалить это правило.

rm /usr/local/owasp-modsecurity-crs-3.0.0/rules/REQUEST-910-IP-REPUTATION.conf

Так же возможна ошибка, связанная с Юникодом. Для того что бы она не мешала работе службы просто закомментируем её в конфигурационном файле (в конце).

#SecUnicodeMapFile unicode.mapping 20127

Для проверки работы сервера используйте утилиту curl. Она покажет, возвращает ли приложение. Если всё правильно вам прейдёт ответ с кодом 200 ОК

curl -I 127.0.0.1

Для проверки работы защитных механизмов можно использовать любую, предназначенную для этого утилиту. В качестве рекомендаций предлагается использовать nikto:

nikto -host localhost

Для запуска сервера:

service nginx start
Tags:
Hubs:
Total votes 18: ↑13 and ↓5+8
Comments15

Articles