Você pode fazer isso adicionando ModSecurity como módulo dinâmico.
Requisito: NGINX 1.11.5 e posterior.
Etapa 1: instalando os pacotes necessários
apt-get 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
Passo 2: Baixe e Compile o Código Fonte do ModSecurity 3
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
Nota: A compilação leva cerca de 15 minutos, dependendo do poder de processamento do seu sistema.
Passo 3: Baixe o conector NGINX para ModSecurity e compile-o como um módulo dinâmico
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
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
Etapa 4: Carregar o Módulo Dinâmico do Conector NGINX ModSecurity
Adicione esta linha ao /etc/nginx/nginx.conf
load_module modules/ngx_http_modsecurity_module.so;
Etapa 5: configurar e ativar
Configure o arquivo de configuração apropriado do ModSecurity. Aqui, estamos usando a configuração recomendada do ModSecurity fornecida pela TrustWave Spiderlabs, os patrocinadores corporativos do ModSecurity.
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
Altere a diretiva SecRuleEngine na configuração para mudar do modo padrão “somente detecção” para o tráfego malicioso.
sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/nginx/modsec/modsecurity.conf
Configure uma ou mais regras. Para os propósitos deste blog, estamos criando uma única regra simples que descarta uma solicitação em que o argumento de URL chamado testparam inclui o teste de string em seu valor. Coloque o seguinte texto em /etc/nginx/modsec/main.conf
# From https://github.com/SpiderLabs/ModSecurity/blob/master/\
# modsecurity.conf-recommended
#
# Edit to set SecRuleEngine On
Include "/etc/nginx/modsec/modsecurity.conf"
# Basic test rule
SecRule ARGS:testparam "@contains test" "id:1234,deny,status:403"
Adicione as diretivas modsecurity e modsecurity_rules_file à configuração do NGINX para ativar o ModSecurity:
server {
# ...
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
}
fonte: nginx.com