
Este artigo fornece instruções para instalar o módulo Dynamic ModSecurity no servidor da web NGINX como um firewall de aplicativo da web (WAF). O NGINX opera no 
modo proxy reverso . O trabalho foi realizado na distribuição Linux - 
CentOS 7 . O módulo é definido como "dinâmico" para que o serviço permaneça flexível na configuração. O 
guia de instalação 
oficial do NGINX é usado.
1. Pré-instalação de componentes
Para que o serviço funcione corretamente, bibliotecas adicionais devem ser instaladas para funcionar. Serão necessárias bibliotecas para criar um projeto a partir do código fonte. Supõe-se que o usuário tenha um sistema atualizado ( 
# 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. Inicie a instalação do serviço
Para que não haja problemas ao iniciar o serviço usando o comando 
service nginx start , é instalada uma versão do repositório oficial no GitHub.
Crie o arquivo 
/etc/yum.repos.d/nginx.repo ao qual deseja adicionar a versão da distribuição. Sem especificar a versão do NGINX, a última lançada no site é exibida.
 [nginx-1.13.7] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1 
Em seguida, basta instalar
 yum install nginx 
3. Compilação do módulo

Para começar, vá para o diretório apropriado:
 cd /home/user/Downloads 
Faça o download do módulo na ramificação principal no GitHub:
 git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity.git 
Em seguida, vá para a pasta com o firewall e compile o código fonte:
 cd ModSecurity git submodule init git submodule update ./build.sh ./configure make make install 
4. Instale o conector
Para que todo o sistema seja flexível, será instalado um conector para conectar o 
NGINX e o ModSecurity . Isso significa que o módulo não será conectado ao código do servidor, mas será apenas um componente dinâmico, o que permitirá que ele seja excluído a qualquer momento, altere o código etc.
 git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git 
5. Reconstrua o servidor da web
Para que o NGINX funcione com o conector ao qual o módulo será conectado, é necessário reconstruir o servidor. Para fazer isso, primeiro descubra qual versão do NGINX está instalada:
 nginx –v 
A saída deve ser algo assim (dependendo da versão)
Versão nginx: nginx / 1.13.7Em seguida, baixe a versão apropriada do site oficial para que não haja erro ao iniciar o serviço e compile com um determinado parâmetro:
 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 
Em seguida, copie o arquivo do módulo para a pasta de serviço da web:
 cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules 
Antes do primeiro bloco no 
/etc/nginx/nginx.conf, adicione:
 load_module modules/ngx_http_modsecurity_module.so; 
6. Arquivo de Configuração do Módulo
Os desenvolvedores oferecem suas regras básicas para proteger um recurso da web. Deve-se notar que, após a instalação, não se deve contar com um nível decente, pois os criadores deixam total liberdade de configuração e regras de gravação pelo usuário, o que os limita a adicionar regras básicas ao arquivo de configuração padrão.
 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 
No arquivo 
modsecurity.conf, substitua 
SecRuleEngine DetectionOnly por 
SecRuleEngine OnEm seguida, crie o arquivo 
/etc/nginx/modsec/main.conf e adicione-o:
 # Include the recommended configuration Include /etc/nginx/modsec/modsecurity.conf 
7. Regras da OWASP
Não é segredo que a 
OWASP é líder em questões de segurança na web. Eles têm seu próprio conjunto para este módulo, que, como o projeto, está aberto aos usuários. Portanto, instale-o como um conjunto básico de regras:
 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 
Em 
/etc/nginx/modsec/main.conf, adicione o seguinte:
 # 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. Conclusão do trabalho
No arquivo 
/etc/nginx/conf.d/proxy.conf, adicione
 server { listen 80; modsecurity on; modsecurity_rules_file /etc/nginx/modsec/main.conf; # If you have proxy location / { proxy_pass http://192.168.xx; } } 
9. Exame de saúde
Para verificar os componentes de um serviço da Web, basta iniciá-lo e observar os erros. Freqüentemente, você precisará remover a regra responsável por verificar onde outro módulo é usado ( 
GeoIP , por exemplo). Portanto, você pode remover com segurança essa regra.
 rm /usr/local/owasp-modsecurity-crs-3.0.0/rules/REQUEST-910-IP-REPUTATION.conf 
Erro relacionado ao 
Unicode também é possível. Para não interferir no serviço, basta comentar no arquivo de configuração ( 
no final ).
 #SecUnicodeMapFile unicode.mapping 20127 
Use o utilitário 
curl para testar o servidor. Ele mostrará se o aplicativo retorna. Se tudo estiver correto, uma opção com um código de 
200 OK chegará até você
 curl -I 127.0.0.1 
Para verificar o funcionamento dos mecanismos de proteção, você pode usar qualquer utilitário projetado para isso. Sugere-se usar o 
nikto como recomendações:
 nikto -host localhost 
Para iniciar o servidor:
 service nginx start