Pular para conteúdo

Instalando como um Módulo Dinâmico para o NGINX Estável

Estas instruções descrevem as etapas para instalar o nó de filtragem Wallarm como um módulo dinâmico para a versão de código aberto do NGINX estável que foi instalado a partir do repositório da NGINX.

Instalação completa

A partir do nó Wallarm 4.6, é recomendado utilizar a instalação completa que automatiza todas as atividades listadas nas etapas abaixo e facilita muito a implantação do nó.

Casos de uso

Entre todas as opções de implantação do Wallarm suportadas, os pacotes DEB/RPM para NGINX Stable são recomendados para a implantação do Wallarm nestes casos de uso:

  • Sua infraestrutura é baseada em um hardware puro ou máquinas virtuais sem o uso de métodos baseados em contêineres. Normalmente, essas configurações são gerenciadas com ferramentas de Infraestrutura como Código (IaC) como Ansible ou SaltStack.

  • Seus serviços são construídos em torno do NGINX Stable. O Wallarm pode estender suas funcionalidades usando esses pacotes.

Requisitos

  • Acesso à conta com a função de Administrador e autenticação de dois fatores desativada na Consola Wallarm para a Nuvem US ou Nuvem EU

  • SELinux desativado ou configurado de acordo com as instruções

  • NGINX versão 1.24.0

    Versões personalizadas do NGINX

    Se você possui uma versão diferente, consulte as instruções sobre como conectar o módulo Wallarm a uma compilação personalizada do NGINX

  • Executando todos os comandos como superusuário (por exemplo, root)

  • Acesso a https://repo.wallarm.com para baixar pacotes. Certifique-se de que o acesso não está bloqueado por um firewall

  • Acesso a https://us1.api.wallarm.com para trabalhar com a Nuvem Wallarm EUA ou a https://api.wallarm.com para trabalhar com a Nuvem Wallarm UE. Se o acesso só puder ser configurado via servidor proxy, use as instruções

  • Access to the IP addresses below for downloading updates to attack detection rules, as well as retrieving precise IPs for your allowlisted, denylisted, or graylisted countries, regions, or data centers

    34.96.64.17
    34.110.183.149
    35.235.66.155
    34.102.90.100
    34.94.156.115
    35.235.115.105
    
    34.160.38.183
    34.144.227.90
    34.90.110.226
    
  • Editor de texto instalado vim, nano, ou qualquer outro. Na instrução, vim é usado

1. Instale o NGINX estável e as dependências

Estas são as opções para instalar o NGINX estável a partir do repositório NGINX:

  • Instalação a partir do pacote construído

    sudo apt -y install curl gnupg2 ca-certificates lsb-release debian-archive-keyring
    echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
    curl -fSsL https://nginx.org/keys/nginx_signing.key | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/nginx.gpg --import
    sudo chmod 644 /etc/apt/trusted.gpg.d/nginx.gpg
    sudo apt update
    sudo apt -y install nginx
    
    1. Instale as dependências necessárias para o NGINX estável:

      sudo apt -y install curl gnupg2 ca-certificates lsb-release
      
    2. Instale o NGINX estável:

      echo "deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
      curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
      sudo apt update
      sudo apt -y install nginx
      
    1. Se um repositório EPEL estiver adicionado no CentOS 7.x, desabilite a instalação do NGINX estável a partir deste repositório adicionando exclude=nginx* ao arquivo /etc/yum.repos.d/epel.repo.

      Exemplo do arquivo alterado /etc/yum.repos.d/epel.repo:

      [epel]
      name=Extra Packages for Enterprise Linux 7 - $basearch
      #baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
      metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
      failovermethod=priority
      enabled=1
      gpgcheck=1
      gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
      exclude=nginx*
      
      [epel-debuginfo]
      name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
      #baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug
      metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
      failovermethod=priority
      enabled=0
      gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
      gpgcheck=1
      
      [epel-source]
      name=Extra Packages for Enterprise Linux 7 - $basearch - Source
      #baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS
      metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
      failovermethod=priority
      enabled=0
      gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
      gpgcheck=1
      
    2. Instale o NGINX estável a partir do repositório oficial:

      echo -e '\n[nginx-stable] \nname=nginx stable repo \nbaseurl=http://nginx.org/packages/centos/$releasever/$basearch/ \ngpgcheck=1 \nenabled=1 \ngpgkey=https://nginx.org/keys/nginx_signing.key \nmodule_hotfixes=true' | sudo tee /etc/yum.repos.d/nginx.repo
      sudo yum install -y nginx
      
    echo -e '\n[nginx-stable] \nname=nginx stable repo \nbaseurl=http://nginx.org/packages/centos/$releasever/$basearch/ \ngpgcheck=1 \nenabled=1 \ngpgkey=https://nginx.org/keys/nginx_signing.key \nmodule_hotfixes=true' | sudo tee /etc/yum.repos.d/nginx.repo
    sudo yum install -y nginx
    
  • Compilação do código fonte a partir do ramo estável do repositório NGINX e instalação com as mesmas opções.

    NGINX para AlmaLinux, Rocky Linux ou Oracle Linux 8.x

    Essa é a única opção para instalar o NGINX no AlmaLinux, Rocky Linux ou Oracle Linux 8.x.

Mais informações detalhadas sobre a instalação do NGINX estão disponíveis na documentação oficial do NGINX.

2. Adicione repositórios Wallarm

O nó Wallarm é instalado e atualizado a partir dos repositórios Wallarm. Para adicionar repositórios, use os comandos para sua plataforma:

sudo apt -y install dirmngr
curl -fSsL https://repo.wallarm.com/wallarm.gpg | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/wallarm.gpg --import
sudo chmod 644 /etc/apt/trusted.gpg.d/wallarm.gpg
sh -c "echo 'deb https://repo.wallarm.com/debian/wallarm-node bullseye/4.8/' | sudo tee /etc/apt/sources.list.d/wallarm.list"
sudo apt update
curl -fsSL https://repo.wallarm.com/wallarm.gpg | sudo apt-key add -
sh -c "echo 'deb https://repo.wallarm.com/ubuntu/wallarm-node bionic/4.8/' | sudo tee /etc/apt/sources.list.d/wallarm.list"
sudo apt update
curl -fsSL https://repo.wallarm.com/wallarm.gpg | sudo apt-key add -
sh -c "echo 'deb https://repo.wallarm.com/ubuntu/wallarm-node focal/4.8/' | sudo tee /etc/apt/sources.list.d/wallarm.list"
sudo apt update
curl -fsSL https://repo.wallarm.com/wallarm.gpg | sudo apt-key add -
sh -c "echo 'deb https://repo.wallarm.com/ubuntu/wallarm-node jammy/4.8/' | sudo tee /etc/apt/sources.list.d/wallarm.list"
sudo apt update
sudo yum install -y epel-release
sudo rpm -i https://repo.wallarm.com/centos/wallarm-node/7/4.8/x86_64/wallarm-node-repo-4.8-0.el7.noarch.rpm
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo rpm -i https://repo.wallarm.com/centos/wallarm-node/7/4.8/x86_64/wallarm-node-repo-4.8-0.el7.noarch.rpm
sudo yum install -y epel-release
sudo rpm -i https://repo.wallarm.com/centos/wallarm-node/8/4.8/x86_64/wallarm-node-repo-4.8-0.el8.noarch.rpm
sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo rpm -i https://repo.wallarm.com/centos/wallarm-node/8/4.8/x86_64/wallarm-node-repo-4.8-0.el8.noarch.rpm

3. Instale os pacotes Wallarm

Os seguintes pacotes são necessários:

  • nginx-module-wallarm para o módulo NGINX-Wallarm

  • wallarm-node para o módulo postanalytics, banco de dados Tarantool e pacotes adicionais NGINX-Wallarm

sudo apt -y install --no-install-recommends wallarm-node nginx-module-wallarm
sudo apt -y install --no-install-recommends wallarm-node nginx-module-wallarm
sudo yum install -y wallarm-node nginx-module-wallarm
sudo yum install -y wallarm-node nginx-module-wallarm
sudo yum install -y wallarm-node nginx-module-wallarm

4. Conecte o módulo Wallarm

  1. Abra o arquivo /etc/nginx/nginx.conf:

    sudo vim /etc/nginx/nginx.conf
    
  2. Verifique se a linha include /etc/nginx/conf.d/*; está adicionada ao arquivo. Caso não tenha, adicione-a.

  3. Adicione a seguinte diretiva logo após a diretiva worker_processes:

    load_module modules/ngx_http_wallarm_module.so;
    

    Exemplo de configuração com a diretiva adicionada:

    user  nginx;
    worker_processes  auto;
    load_module modules/ngx_http_wallarm_module.so;
    
    error_log  /var/log/nginx/error.log notice;
    pid        /var/run/nginx.pid;
    
  4. Copie os arquivos de configuração para a configuração do sistema:

    sudo cp /usr/share/doc/nginx-module-wallarm/examples/*.conf /etc/nginx/conf.d/
    

5. Conecte o nó de filtragem ao Wallarm Cloud

The Wallarm filtering node interacts with the Wallarm Cloud. You need to connect the node to the Cloud.

When connecting node to the Cloud, you can set the node name, under which it will be displayed in the Wallarm Console UI and put the node into the appropriate node group (used to logically organize nodes in UI).

Grouped nodes

To connect the node to the Cloud, use a Wallarm token of the appropriate type:

  1. Open Wallarm Console → SettingsAPI tokens in the US Cloud or EU Cloud.
  2. Find or create API token with the Node deployment/Deployment usage type.
  3. Copy this token.
  4. Run the register-node script on a machine where you install the filtering node:

    sudo /usr/share/wallarm-common/register-node -t <TOKEN> --labels 'group=<GROUP>' -H us1.api.wallarm.com
    
    sudo /usr/share/wallarm-common/register-node -t <TOKEN> --labels 'group=<GROUP>'
    
    • <TOKEN> is the copied value of the API token with the Deploy role.
    • --labels 'group=<GROUP>' parameter puts your node to the <GROUP> node group (existing, or, if does not exist, it will be created). If you are installing filtering and postanalytics modules separately, it is recommended to put them into the same group.
  1. Open Wallarm Console → Nodes in the US Cloud or EU Cloud.
  2. Do one of the following:
    • Create the node of the Wallarm node type and copy the generated token.
    • Use existing node group - copy token using node's menu → Copy token.
  3. Run the register-node script on a machine where you install the filtering node:

    sudo /usr/share/wallarm-common/register-node -t <TOKEN> -H us1.api.wallarm.com
    
    sudo /usr/share/wallarm-common/register-node -t <TOKEN>
    
  • <TOKEN> is the copied value of the node token. If you are installing filtering and postanalytics modules separately, it is recommended to put them into the same group using the same node token.
  • You may add -n <HOST_NAME> parameter to set a custom name for your node instance. Final instance name will be: HOST_NAME_NodeUUID.

6. Habilitar o Wallarm para analisar o tráfego

Por padrão, o nó Wallarm implantado não analisa o tráfego de entrada.

Dependendo da abordagem de implantação Wallarm selecionada (in-line ou Out-of-Band), configure o Wallarm para intermediar o tráfego ou processar o espelho de tráfego.

Realize a seguinte configuração no arquivo /etc/nginx/conf.d/default.conf na máquina com o nó instalado:

  1. Defina um endereço IP para o Wallarm intermediar o tráfego legítimo. Pode ser um IP de uma instância de aplicativo, balanceador de carga, nome DNS, etc., dependendo da sua arquitetura.

    Para fazer isso, edite o valor proxy_pass, por exemplo, o Wallarm deve enviar solicitações legítimas para http://10.80.0.5:

    server {
        listen 80;
        listen [::]:80 ipv6only=on;
    
        ...
    
        location / {
            proxy_pass http://10.80.0.5; 
            ...
        }
    }
    
  2. Para que o nó Wallarm analise o tráfego de entrada, defina a diretiva wallarm_mode como monitoring:

    server {
        listen 80;
        listen [::]:80 ipv6only=on;
        wallarm_mode monitoring;
    
        ...
    }
    

    O modo de monitoramento é o recomendado para a primeira implantação e teste de solução. O Wallarm também fornece modos de bloqueio seguro e bloqueio, leia mais.

  1. Para que o nó Wallarm aceite tráfego espelhado, defina a seguinte configuração no bloco server do NGINX:

    wallarm_force server_addr $http_x_server_addr;
    wallarm_force server_port $http_x_server_port;
    # Alterar 222.222.222.22 para o endereço do servidor de espelhamento
    set_real_ip_from  222.222.222.22;
    real_ip_header    X-Forwarded-For;
    real_ip_recursive on;
    wallarm_force response_status 0;
    wallarm_force response_time 0;
    wallarm_force response_size 0;
    
    • As diretivas set_real_ip_from e real_ip_header são necessárias para que o Console Wallarm exiba os endereços IP dos atacantes.
    • As diretivas wallarm_force_response_* são necessárias para desativar a análise de todas as solicitações, exceto as cópias recebidas do tráfego espelhado.
  2. Para o nó Wallarm analisar o tráfego espelhado, defina a diretiva wallarm_mode para monitoring:

    server {
        listen 80;
        listen [::]:80 ipv6only=on;
        wallarm_mode monitoring;
    
        ...
    }
    

    Como as solicitações maliciosas não podem ser bloqueadas, o único modo que o Wallarm aceita é o de monitoramento. Para implantação in-line, também existem modos seguros de bloqueio e bloqueio, mas mesmo que você defina a diretiva wallarm_mode para um valor diferente de monitoramento, o nó continua a monitorar o tráfego e apenas registrar o tráfego malicioso (exceto o modo definido como off).

7. Reiniciar o NGINX

Concedendo permissão de root ao usuário

Se você está executando o NGINX como um usuário que não possui permissão de root, adicione este usuário ao grupo wallarm utilizando o seguinte comando:

usermod -aG wallarm <nome_do_usuário>;

onde <nome_do_usuário> é o nome do usuário sem permissão de root.

sudo systemctl restart nginx
sudo service nginx restart
sudo systemctl restart nginx
sudo systemctl restart nginx
sudo systemctl restart nginx

8. Configurar o envio de tráfego para a instância Wallarm

Dependendo da abordagem de implantação sendo usada, realize as seguintes configurações:

Atualize os alvos do seu balanceador de carga para enviar tráfego para a instância Wallarm. Para detalhes, consulte a documentação do seu balanceador de carga.

Configure seu servidor web ou proxy (por exemplo, NGINX, Envoy) para espelhar o tráfego de entrada para o nó Wallarm. Para detalhes de configuração, recomendamos que se refira à documentação do seu servidor web ou proxy.

Dentro do [link][exemplos-espelhando-servidor-web], você encontrará a configuração de exemplo dos servidores web e proxy mais populares (NGINX, Traefik, Envoy).

9. Testar a operação do nó Wallarm

  1. Envie a solicitação com o ataque de teste Path Traversal para um endereço de recurso protegido:

    curl http://localhost/etc/passwd
    
  2. Abra o Console Wallarm → seção Eventos na Nuvem dos EUA ou Nuvem da UE e certifique-se de que o ataque está exibido na lista.
    Ataques na interface

10. Ajustar a solução implantada

O módulo dinâmico Wallarm com definições padrão está instalado para o NGINX estável. O nó de filtragem pode necessitar de algumas configurações adicionais após a implantação.

As definições do Wallarm são definidas utilizando as diretivas de NGINX ou o UI do Console Wallarm. As diretivas devem ser definidas nos seguintes arquivos na máquina com o nó Wallarm:

  • /etc/nginx/conf.d/default.conf com as definições de NGINX

  • /etc/nginx/conf.d/wallarm.conf com definições globais do nó de filtragem

    O arquivo é usado para definições aplicadas a todos os domínios. Para aplicar definições diferentes a grupos de domínios diferentes, use o arquivo default.conf ou crie novos arquivos de configuração para cada grupo de domínio (por exemplo, example.com.conf e test.com.conf). Informações mais detalhadas sobre arquivos de configuração do NGINX estão disponíveis na documentação oficial do NGINX.

  • /etc/nginx/conf.d/wallarm-status.conf com definições de monitoramento do nó Wallarm. A descrição detalhada está disponível no link

  • /etc/default/wallarm-tarantool ou /etc/sysconfig/wallarm-tarantool com as definições do banco de dados Tarantool

Abaixo estão algumas das definições típicas que você pode aplicar, se necessário: