
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