* Ubuntu 18.04.4 LTS / Nginx 1.19.0 버전에서 테스트 했습니다.

* Ubuntu에 Nginx가 설치되어있다고 가정합니다.

 

필요 라이브러리 설치

apt-get install autotools-dev automake libtool m4 pkgconf libcurl4-openssl-dev libxml2 libxml2-dev libgeoip-dev libpcre3 libpcre3-dev zlib1g-dev g++

 

libmodsecurity 다운 및 컴파일


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

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

 

Nginx connector 다운 및 컴파일

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

// Check Nginx version
$ nginx -v

nginx version: nginx/1.19.0

// Nginx source code download
$ wget http://nginx.org/download/nginx-1.19.0.tar.gz

// Compile
$ cd nginx-1.19.0
$ ./configure --with-compat --add-dynamic-module=../ModSecurity-nginx
$ make modules

// copy object file
$ cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules

 

Nginx 모듈 로드

// /etc/nginx/nginx.conf

user nginx;

worker_processes auto;


# nginx module load -->
load_module "modules/ngx_http_modsecurity_module.so";



error_log /var/log/nginx/error.log  notice;

pid /var/run/nginx.pid;

 

ModSecurity 설정 -> 아래  업데이트 된, ModSecurity 설정 참고

// 1.추천 설정 다운로드
$ mkdir /etc/nginx/modsec

$ wget -P /etc/nginx/modsec/ https://raw.githubusercontent.com/SpiderLabs/ModSecurity/master/modsecurity.conf-recommended

$ mv /etc/nginx/modsec/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf

// 2.“detection only” 모드에서 actively dropping traffic 로 변경
$ sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/nginx/modsec/modsecurity.conf

// 3. SecRequestBodyInMemoryLimit 줄 제거

 

Nginx 설정

// active ModSeucrity in Nginx each site conf

server {
 ...
 
 modsecurity on;
 modsecurity_rules_file /etc/nginx/modsec/modsec_includes.conf;

 ...
}

// reload nginx
$ nginx -s reload 

 

참고 : https://itzone.tistory.com/707

 

--- 2020.07.24 업데이트 ---

위글 중, ModSecurity설정에서, 

https://raw.githubusercontent.com/SpiderLabs/ModSecurity/master/modsecurity.conf-recommended

위 주소가 404 NotFound로 나온다..

 

그래서 다른 방법을 찾아서 추가한다.

 

OWASP에서 제공하는 ModSecurity Core Rule Set을 이용한다.

https://owasp.org/www-project-modsecurity-core-rule-set/

 

ModSeucrity 설정

// OWASP Core Rule Set 사용
$ mkdir /etc/nginx/modsec

$ cd /etc/nginx/modsec

$ wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.1.0.tar.gz
$ tar -xvzf tar -xvzf v3.1.0.tar.gz
$ rm v3.1.0.tar.gz
$ cd v3.1.0.tar.gz/rules
$ cp REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
$ cp RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf

$ cp /etc/nginx/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
$ cp /etc/nginx/ModSecurity/unicode.mapping /etc/nginx/modsec/unicode.mapping

// make modsec conf and rules file
$ touch modsec_includes.conf

// write below in modsec_includes.conf
include modsecurity.conf
include owasp-modsecurity-crs/crs-setup.conf
include owasp-modsecurity-crs/rules/*.conf

// “detection only” 모드에서 actively dropping traffic 로 변경
$ sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/nginx/modsec/modsecurity.conf

// SecRequestBodyInMemoryLimit 줄 제거

+ Recent posts