Pesquisa de site

Como instalar o ModSecurity para Nginx no Debian/Ubuntu


É o desejo de todo desenvolvedor implantar aplicativos da web seguros e protegidos contra ameaças. Na maioria das ocasiões, é fácil falar do que fazer. A frequência de sites invadidos continua aumentando à medida que os hackers continuam a explorar todos os vetores de ataque à sua disposição.

A segurança de WebApps pode ser um grande desafio, especialmente com a prevalência de ferramentas maliciosas, como rootkits, scanners, bots e outros malwares. Embora ser violado possa parecer uma questão de quando, se não, é prudente implementar algumas medidas de segurança decentes para proteger suas aplicações web.

Uma das ferramentas que podem fornecer um nível decente de segurança contra ataques é chamada ModSecurity. Este é um Firewall de Aplicativos Web (WAF) gratuito e de código aberto que protege seus aplicativos Web de uma vasta gama de ataques de camada 7, como scripts entre sites ( >XSS), injeção de SQL, sequestro de sessão e muito mais.

Neste guia, mostraremos como instalar e configurar o ModSecurity para funcionar com o Nginx em distribuições Linux baseadas em Debian, como o Ubuntu.

Etapa 1: instalar dependências

Para iniciar a instalação, são necessárias diversas dependências de software para que a instalação seja bem-sucedida. Mas primeiro, atualize as listas de pacotes e os repositórios da seguinte maneira.

sudo apt update

Em seguida, instale as dependências da seguinte maneira.

sudo apt install make gcc build-essential autoconf automake libtool libfuzzy-dev ssdeep gettext pkg-config libcurl4-openssl-dev liblua5.3-dev libpcre3 libpcre3-dev libxml2 libxml2-dev libyajl-dev doxygen libcurl4 libgeoip-dev libssl-dev zlib1g-dev libxslt-dev liblmdb-dev libpcre++-dev libgd-dev

Etapa 2: Instale a versão mais recente do Nginx


O próximo passo será instalar o navegador Nginx. Para instalar a versão mais recente, vamos instalá-la a partir do ondrej/nginx-mainline PPA w que está sendo mantido atualmente por um desenvolvedor Debian desde 2000.

Para adicionar o PPA ao seu sistema Ubuntu local, execute o comando:

sudo add-apt-repository ppa:ondrej/nginx-mainline -y

A seguir, atualize as listas de pacotes e instale a versão mais recente do Nginx da seguinte maneira

sudo apt update
sudo apt install nginx-core nginx-common nginx nginx-full

Normalmente, apenas o repositório padrão está habilitado. É prudente habilitar o repositório de código-fonte para que você possa, posteriormente, baixar o código-fonte Nginx na próxima etapa.

Para conseguir isso, modifique o arquivo do repositório Nginx.

sudo vim /etc/apt/sources.list.d/ondrej-ubuntu-nginx-mainline-*.list

Localize e remova o comentário desta linha para ativar o repositório de código-fonte:

deb-src http://ppa.launchpad.net/ondrej/nginx-mainline/ubuntu/ focal main

O arquivo agora deve aparecer conforme mostrado.

Salve as alterações e saia.

Em seguida, atualize o índice do pacote.

sudo apt update

Etapa 3: Baixe o pacote fonte Nginx

Para compilar o módulo dinâmico ModSecurity, precisamos baixar o pacote de código-fonte Nginx. Para fazer isso, primeiro criaremos um diretório Nginx no caminho /usr/local/src/ para acomodar o arquivo do pacote de código-fonte Nginx.

sudo mkdir -p /usr/local/src/nginx 

Em seguida, atribua as permissões de diretório conforme mostrado. Certifique-se de substituir o nome de usuário pelo seu nome de usuário sudo real.

sudo chown username:username -R /usr/local/src/

Depois disso, navegue até o diretório de origem Nginx:

cd /usr/local/src/nginx 

Prossiga e baixe os pacotes de arquivos de origem Nginx:

sudo apt source nginx

Você provavelmente encontrará o seguinte erro:

W: Download is performed unsandboxed as root as file 'nginx_1.19.5.orig.tar.gz' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

Isso não é nada para deixá-lo nervoso. Portanto, simplesmente ignore o erro.

Você pode dar uma olhada no arquivo de origem usando o comando ls.

ls -l

Certifique-se de que a versão do código-fonte coincide com a versão do Nginx instalado.

nginx -v

Etapa 4: Instale a biblioteca Libmodsecurity3

Libmodesecurity é uma biblioteca Modsecurity que gerencia a filtragem HTTP para seus aplicativos. Existem duas maneiras de instalá-lo. Você pode usar o gerenciador de pacotes apt conforme mostrado

sudo apt install libmodsecurity3

A outra abordagem é instalá-lo a partir de uma fonte preferível, pois fornece a versão mais recente. Para iniciar a instalação do Libmodsecurity a partir da fonte, clone o repositório git conforme mostrado:

git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity /usr/local/src/ModSecurity/

Navegue até o diretório clonado:

cd /usr/local/src/ModSecurity/

Faça questão de instalar os submódulos

sudo git submodule init
sudo git submodule update

Depois, construa o ambiente usando os comandos abaixo.

sudo ./build.sh 
sudo ./configure

Mais uma vez, ignore o erro exibido abaixo.

fatal: No names found, cannot describe anything.

Em seguida, compile o código-fonte e instale outros utilitários usando o seguinte comando make. Isso leva cerca de 25 minutos e é necessária alguma paciência.

sudo make -j4

Depois de concluído, instale as bibliotecas.

sudo make install

Etapa 5: Baixe e compile o conector ModSecurity v3 Nginx

A próxima etapa é baixar e compilar o conector ModSecurity Nginx. O conector, como o nome sugere, vincula a biblioteca Libmodsecurity ao servidor web Nginx. Para baixar o conector Modsecurity, clone-o do repositório GitHub da seguinte maneira.

git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git /usr/local/src/ModSecurity-nginx/

Navegue até o diretório clonado.

cd /usr/local/src/nginx/nginx-1.21.3/

Prossiga e instale dependências de compilação

sudo apt build-dep nginx
sudo apt install uuid-dev

Em seguida, compile o módulo ModSecurity Nginx Connector com o sinalizador --with-compat. A opção --with-compat torna o módulo ModSecurity Nginx Connector compatível com binário com a biblioteca Nginx atual.

sudo ./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity-nginx

Feito isso, construa o módulo ModSecurity Nginx Connector usando o comando make.

sudo make modules

O módulo é salvo como objs/ngx_http_modsecurity_module.so. Você precisa copiar este módulo para o diretório /usr/share/nginx/modules/ da seguinte maneira.

sudo cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/

Etapa 6: carregar o módulo conector ModSecurity Nginx

Para carregar o módulo do conector Nginx, primeiro acesse o arquivo de configuração principal do Nginx.

sudo vim /etc/nginx/nginx.conf

Anexe a seguinte linha logo abaixo das primeiras linhas

load_module modules/ngx_http_modsecurity_module.so;

Além disso, anexe as seguintes linhas na seção http {...}. Isso habilita o ModSecurity para todos os hosts virtuais Nginx.

modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;

Salve as alterações e saia do arquivo.

Em seguida, crie o diretório /etc/nginx/modsec/ que armazenará a configuração do ModSecurity.

sudo mkdir /etc/nginx/modsec/

Em seguida, copie o arquivo de configuração do ModSecurity da seguinte maneira.

sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf

Em seguida, abra o arquivo de configuração.

sudo vim /etc/nginx/modsec/modsecurity.conf

Localize a linha que começa com a diretiva SecRuleEngine.

SecRuleEngine DetectionOnly

Esta linha instrui o ModSecurity a registrar apenas transações HTTP, mas não toma nenhuma ação diante de um ataque a um aplicativo da web. Você precisa mudar isso para que o Modsecurity não apenas detecte, mas também bloqueie ataques na web.

Mude a linha para a linha abaixo

SecRuleEngine On

Salve as alterações e saia do arquivo.

Em seguida, crie o arquivo /etc/nginx/modsec/main.conf.

sudo vim  /etc/nginx/modsec/main.conf

Anexe esta linha para fazer referência ao arquivo de configuração /etc/nginx/modsec/modsecurity.conf.

Include /etc/nginx/modsec/modsecurity.conf

Salve as alterações e saia do arquivo.

Além disso, copie o arquivo de mapeamento Unicode.

sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/

Em seguida, teste a configuração do Nginx.

sudo nginx -t

O teste deve ser bem-sucedido. Caso contrário, volte e verifique se todas as alterações feitas estão corretas.

Por fim, reinicie o Nginx para aplicar todas as alterações feitas.

sudo systemctl restart nginx

E verifique se o Nginx está funcionando conforme o esperado.

sudo systemctl status nginx

Etapa 7: Baixe o conjunto de regras OWASP

Para que o ModSecurity proteja seus aplicativos da web, você precisa especificar regras que irão detectar atividades suspeitas e bloqueá-las. Para começar, é preferível instalar conjuntos de regras existentes que o ajudarão a aprender o básico.

O OWASP Core Rule Set (CRS) é um conjunto de regras gratuito, de código aberto e mantido pela comunidade que fornece regras para afastar vetores de ataque comuns, como injeção de SQL, Scripting entre sites (XSS).

Baixe o conjunto de regras principais do OWASP no Github conforme mostrado usando o comando wget.

wget https://github.com/coreruleset/coreruleset/archive/v3.3.0.tar.gz

Extraia o arquivo compactado.

tar xvf v3.3.0.tar.gz

Certifique-se de mover o diretório descompactado para o caminho /etc/nginx/modsec/.

sudo mv coreruleset-3.3.0/ /etc/nginx/modsec/

Em seguida, renomeie o arquivo crs-setup.conf.example para crs-setup.conf.

sudo mv /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf.example /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf

Novamente, volte para o arquivo de configuração ModSecurity.

sudo vim /etc/nginx/modsec/main.conf

E anexe as seguintes linhas.

Include /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf
Include /etc/nginx/modsec/coreruleset-3.3.0/rules/*.conf

O arquivo agora deve ter 3 linhas:

Salve o arquivo e, mais uma vez, reinicie o Nginx.

sudo systemctl restart nginx

Etapa 8: testando o ModSecurity

Por fim, realizaremos um teste ModSecurity e confirmaremos que ele pode detectar e bloquear tráfego HTTP suspeito.

Vamos editar o arquivo de configuração do ModSecurity e criar uma regra de bloqueio que bloqueará o acesso a um determinado URL quando acessado por um navegador da web.

sudo vim /etc/nginx/modsec/modsecurity.conf

Adicione esta linha logo abaixo da diretiva SecRuleEngine On

SecRule ARGS:testparam "@contains test" "id:254,deny,status:403,msg:'Test Successful'"

Você pode definir as tags ‘id’ e ‘msg’ com seus valores preferidos.

Salve as alterações e reinicie o Nginx.

sudo systemctl restart nginx

Agora inicie seu navegador e visite o URL abaixo com o sufixo ?testparam=test

http://server-ip/?testparam=test

Você deverá receber um erro 403 ‘Proibido’. Isso indica que você está tentando acessar um recurso proibido no servidor web.

Além disso, você pode verificar os logs de erros do Nginx para confirmar se o cliente foi bloqueado

cat /var/log/nginx/error.log | grep "Test Successful"

Esta foi uma visão geral de como você pode configurar o Modsecurity com o Nginx no Debian e no Ubuntu. Esperamos que isso tenha sido benéfico.