Устанавливаем ModSecurity на сервер с Nginx и тестируем его работу. Сам Nginx забираем из репозиториев, а ModSecurity и нужный модуль собираем из исходников. Почти ModSecurity WAF для тех, у кого нет Nginx Plus.
Установка NGINX.
NGINX на сервер мы ставим из официального репозитория от разработчиков. Ставим, конечно же, актуальную версию (я предпочитаю mainline):
# cat /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=1 enabled=1
# wget http://nginx.org/keys/nginx_signing.key # rpm --import nginx_signing.key # yum install nginx
Установка ModSecurity.
Устанавливаем на сервер необходимые для сборки ModSecurity пакеты:
# yum install git libcurl-devel libxml2-devel pcre-devel libtool autoconf gcc-c++ openssl-devel
Забираем v3 ветку модсека с гитхаба и собираем её. На ошибку вида fatal: No names found, cannot describe anything. можно не обращать внимания в данном случае:
# cd /usr/local/src/ # 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 Connector.
Для сборки модуля нам потребуются исходники установленной на сервере версии NGINX и исходники модуля NGINX Connector для ModSecurity.
Проверяем какая версия nginx установлена на сервере и скачиваем её с Github:
# nginx -v nginx version: nginx/1.13.5
# cd /usr/local/src/ # wget http://nginx.org/download/nginx-1.13.5.tar.gz # tar xvfz nginx-1.13.5.tar.gz
С гитхаба же, забираем исходники NGINX Connector’a для ModSecurity:
# cd /usr/local/src/ # git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
Собираем нужный нам модуль и устанавливаем его:
# cd /usr/local/src/nginx-1.13.5 # ./configure --with-http_ssl_module --with-compat --add-dynamic-module=../ModSecurity-nginx # make modules # cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules
Подключаем модуль в конфиге nginx:
# cat /etc/nginx/nginx.conf | grep mods load_module modules/ngx_http_modsecurity_module.so;
Настройка и тестирование ModSecurity.
Скачиваем конфигурационный файл, и включаем блокировку проблемного трафика в SecRuleEngine параметре:
# mkdir /etc/nginx/modsec # wget -O /etc/nginx/modsec/modsecurity.conf https://raw.githubusercontent.com/SpiderLabs/ModSecurity/master/modsecurity.conf-recommended # sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/nginx/modsec/modsecurity.conf
Создаём файл, с помощью которого мы выполним проверку работы модсека. В нём мы напишем тестовое правило для блокировки:
# cat /etc/nginx/modsec/main.conf Include "/etc/nginx/modsec/modsecurity.conf" SecRule ARGS:testparam "@contains testmodsec" "id:123456,deny,status:403"
Для нужного виртуалхоста прописываем директивы modsecurity и modsecurity_rules_file:
server { # ... modsecurity on; modsecurity_rules_file /etc/nginx/modsec/main.conf; # ... }
Проверяем, корректна ли конфигурация:
# nginx -t
В случае возникновения ошибки вида:
nginx: [emerg] "modsecurity_rules_file" directive Rules error. File: /etc/nginx/modsec/modsecurity.conf. Line: 37. Column: 33. As of ModSecurity version 3.0, SecRequestBodyInMemoryLimit is no longer supported.
Просто закомментируем в файле /etc/nginx/modsec/modsecurity.conf параметр SecRequestBodyInMemoryLimit.
Убедившись что конфиг не содержит ошибок, перезапускаем nginx, а после со стороннего сервера выполняем тестовый запрос (на основе того правила что мы написали ранее):
# curl 38.8.7.10?testparam=testmodsec <html> <head><title>403 Forbidden</title></head> <body bgcolor="white"> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.13.5</center> </body> </html>
Можно увидеть, что тестовое правило ModSecurity отработало и соединение с тестовыми параметрами было заблокировано. В итоге, мы получили почти то же самое, что даёт ModSecurity WAF для Nginx Plus.
Добрый день. Подскажите при инсталляции на Centos 7 такая ошибка
http://prntscr.com/h33ypy
Что то нужно с ней делать?
Хм, почему-то антиспам не пропустил Ваш комментарий. Поправил этот момент. 🙂
Нет, конкретно с этим можно ничего не делать. Всё должно собраться не смотря на эти сообщения.
в modsecurity. conf желательно исправить
SecAuditLog /var/log/nginx/modsec_audit.log а то SELinux ругается
Ссылка https://raw.githubusercontent.com/SpiderLabs/ModSecurity/master/modsecurity.conf-recommended
стухла давно
Таки да, там много изменений серьёзных случилось. Нужно будет обновить материал.
мы пробовали внедрить modsecurity v3 — редкостное г..о.У себя когда-то делал заметку по этому поводу — https://linux96.ru/index.php/36-web-application-firewall-na-baze-modsecurity
вообще, удивительно как такой софт пишут и еще столько звезд на гитхабе набрал.