Coletar registros do NGINX

Compatível com:

Esse analisador do NGINX processa registros formatados em JSON e syslog. Ele extrai campos de vários formatos de registro e os normaliza para o formato UDM. O analisador enriquece o evento com metadados para gerenciamento de servidores e atividade de rede, incluindo logins de usuários e solicitações HTTP. Ele também processa a lógica de eventos SSH e preenche campos do UDM com base nos dados extraídos.

Antes de começar

Verifique se você atende aos seguintes pré-requisitos:

  • Instância do Google SecOps
  • O NGINX está em execução e gerando registros
  • Acesso raiz à máquina host do NGINX

Receber o arquivo de autenticação de ingestão do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. Baixe o arquivo de autenticação de ingestão. Salve o arquivo de forma segura no sistema em que o Bindplane será instalado.

Receber o ID do cliente do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. Copie e salve o ID do cliente na seção Detalhes da organização.

Instalar o agente do Bindplane

Instalação do Windows

  1. Abra o Prompt de Comando ou o PowerShell como administrador.
  2. Execute este comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalação do Linux

  1. Abra um terminal com privilégios de root ou sudo.
  2. Execute este comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Outros recursos de instalação

Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps

  1. Acesse o arquivo de configuração:

    1. Localize o arquivo config.yaml. Normalmente, ele fica no diretório /etc/bindplane-agent/ no Linux ou no diretório de instalação no Windows.
    2. Abra o arquivo usando um editor de texto (por exemplo, nano, vi ou Bloco de Notas).
  2. Edite o arquivo config.yaml da seguinte forma:

    receivers:
        udplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds: '/path/to/ingestion-authentication-file.json'
            # Replace with your actual customer ID from Step 2
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            ingestion_labels:
                log_type: 'NGINX'
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.

  4. Substitua <customer_id> pelo ID do cliente real.

  5. Atualize /path/to/ingestion-authentication-file.json para o caminho em que o arquivo de autenticação foi salvo na seção Receber arquivo de autenticação de ingestão do Google SecOps.

Reinicie o agente do Bindplane para aplicar as mudanças

  • Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar o agente do Bindplane no Windows, use o console Serviços ou insira o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Identificar o local dos arquivos de registros do NGINX

  1. Normalmente, os registros do NGINX são armazenados em:
    • Registros de acesso: /var/log/nginx/access.log
    • Registros de erros: /var/log/nginx/error.log
  2. Acesse o host NGINX usando credenciais administrativas.
  3. Execute o comando a seguir e procure o caminho para os registros no host do NGINX:

    sudo cat /etc/nginx/nginx.conf | grep log
    

Configurar o NGINX para encaminhar registros ao Bindplane

  1. Abra o arquivo de configuração do NGINX (por exemplo, /etc/nginx/nginx.conf):

    sudo vi /etc/nginx/nginx.conf
    
  2. Edite a configuração, substituindo <BINDPLANE_SERVER> e <BINDPLANE_PORT> pelos seus valores:

    http {
        access_log syslog:server=<BINDPLANE_SERVER>:<BINDPLANE_PORT>,facility=local7,tag=nginx_access;
        error_log syslog:server=<BINDPLANE_SERVER>:<BINDPLANE_PORT>,facility=local7,tag=nginx_error;
    }
    
  3. Reinicie o NGINX para aplicar as mudanças:

    sudo systemctl reload nginx
    

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
_Internal_WorkspaceResourceId target.resource.product_object_id Mapeado diretamente
Computer principal.asset.hostname Mapeado diretamente
Facility additional.fields[facility] Mapeado diretamente
HostName principal.asset.hostname Mapeado diretamente se src_ip não estiver presente
ProcessName principal.application Mapeado diretamente
SeverityLevel security_result.severity Mapeado como "INFORMATIONAL" se o valor for info
SourceSystem principal.asset.platform Mapeado para LINUX se o valor corresponder a Linux
SyslogMessage Vários campos Analisado usando grok para extrair time, method, target_path, protocol, response_code, referral_url, user_agent, target_ip, target_host e cache
TenantId additional.fields[TenantId] Mapeado diretamente
acct principal.user.user_id Mapeado diretamente se não estiver vazio ou for ?
addr principal.asset.ip Mapeado diretamente
audit_epoch metadata.event_timestamp Convertido para carimbo de data/hora usando o formato UNIX. Os nanossegundos são extraídos da mensagem de registro original.
cache additional.fields[cache] Mapeado diretamente
collection_time.nanos metadata.event_timestamp.nanos Usado para nanosegundos do carimbo de data/hora do evento, se disponível.
collection_time.seconds metadata.event_timestamp.seconds Usado para segundos do carimbo de data/hora do evento, se disponível.
data Vários campos A principal fonte de dados, analisada de maneira diferente com base no formato do registro (Syslog, JSON ou outro).
exe target.process.command_line Mapeado diretamente após a remoção de barras invertidas e aspas
hostname principal.asset.hostname OU principal.asset.ip Se for um endereço IP, mapeado para principal.asset.ip. Caso contrário, mapeado para principal.asset.hostname
msg metadata.description Mapeado diretamente como a descrição
node target.asset.hostname Mapeado diretamente
pid target.process.pid Mapeado diretamente
protocol network.application_protocol Mapeado para HTTP se o valor corresponder a HTTP
referral_url network.http.referral_url Mapeado diretamente se não estiver vazio ou for -
res security_result.action_details Mapeado diretamente
response_code network.http.response_code Mapeado diretamente e convertido em número inteiro
ses network.session_id Mapeado diretamente
src_ip principal.asset.ip Mapeado diretamente
target_host target.asset.hostname Mapeado diretamente
target_ip target.asset.ip Mapeados diretamente, após a conversão da representação de string em uma matriz JSON e a extração de IPs individuais
target_path target.url Mapeado diretamente
time metadata.event_timestamp Analisado para extrair o carimbo de data/hora usando o formato dd/MMM/yyyy:HH:mm:ss Z
user_agent network.http.user_agent Mapeado diretamente se não estiver vazio ou for -
metadata.event_type Definido como GENERIC_EVENT inicialmente e depois substituído com base em outros campos, como terminal e protocol. O padrão é USER_UNCATEGORIZED se o padrão grok principal não corresponder. Definido como NETWORK_HTTP se protocol for HTTP e target_ip estiver presente, e STATUS_UPDATE se protocol for HTTP, mas target_ip não estiver presente.
metadata.log_type Defina como NGINX
metadata.product_name Defina como NGINX
metadata.vendor_name Defina como NGINX
network.ip_protocol Defina como TCP se terminal for sshd ou ssh, ou se o padrão grok principal não corresponder.
principal.asset_id Defina como GCP.GCE:0001 se terminal for sshd ou ssh. Defina como GCP.GCE:0002 se o padrão grok principal não corresponder
extensions.auth.type Defina como MACHINE se terminal for sshd ou ssh

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.