ModSecurity + Nginx + Ubuntu 16.04
Источник: https://itsecforu.ru/2017/05/26/modsecu ... ntu-16-04/
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