Recolha registos do NGINX

Compatível com:

Este analisador NGINX processa registos formatados em JSON e syslog. Extrai campos de vários formatos de registos e normaliza-os para o formato UDM. O analisador sintático enriquece o evento com metadados para a gestão do servidor e a atividade de rede, incluindo inícios de sessão de utilizadores e pedidos HTTP. Também processa a lógica dos eventos SSH e preenche os campos da UDM com base nos dados extraídos.

Antes de começar

Certifique-se de que tem os seguintes pré-requisitos:

  • Instância do Google SecOps
  • O NGINX está em execução e a gerar registos
  • Acesso raiz à máquina anfitriã do NGINX

Obtenha o ficheiro de autenticação de carregamento do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Agentes de recolha.
  3. Transfira o ficheiro de autenticação de carregamento. Guarde o ficheiro de forma segura no sistema onde o Bindplane vai ser instalado.

Obtenha o ID de cliente do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Perfil.
  3. Copie e guarde o ID do cliente da secção Detalhes da organização.

Instale o agente do Bindplane

Instalação do Windows

  1. Abra a Linha de comandos ou o PowerShell como administrador.
  2. Execute o seguinte 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 raiz ou sudo.
  2. Execute o seguinte comando:

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

Recursos de instalação adicionais

Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps

  1. Aceda ao ficheiro de configuração:

    1. Localize o ficheiro config.yaml. Normalmente, encontra-se no diretório /etc/bindplane-agent/ no Linux ou no diretório de instalação no Windows.
    2. Abra o ficheiro com um editor de texto (por exemplo, nano, vi ou Bloco de notas).
  2. Edite o ficheiro 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 de cliente real.

  5. Atualize /path/to/ingestion-authentication-file.json para o caminho onde o ficheiro de autenticação foi guardado na secção Obtenha o ficheiro de autenticação de carregamento do Google SecOps.

Reinicie o agente do Bindplane para aplicar as alterações

  • 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, pode usar a consola Services ou introduzir o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Identifique a localização dos ficheiros de registo do NGINX

  1. Normalmente, os registos do NGINX são armazenados em:
    • Registos de acesso: /var/log/nginx/access.log
    • Registos de erros: /var/log/nginx/error.log
  2. Aceder ao anfitrião do NGINX através de credenciais administrativas.
  3. Execute o seguinte comando e procure o caminho para os registos no seu anfitrião NGINX:

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

Configure o NGINX para encaminhar registos para o Bindplane

  1. Abra o ficheiro 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 alterações:

    sudo systemctl reload nginx
    

Tabela de mapeamento da UDM

Campo de registo Mapeamento de UDM Lógica
_Internal_WorkspaceResourceId target.resource.product_object_id Mapeamento direto
Computer principal.asset.hostname Mapeamento direto
Facility additional.fields[facility] Mapeamento direto
HostName principal.asset.hostname Mapeado diretamente se src_ip não estiver presente
ProcessName principal.application Mapeamento direto
SeverityLevel security_result.severity Mapeado para INFORMATIONAL se o valor for info
SourceSystem principal.asset.platform Mapeado para LINUX se o valor corresponder a Linux
SyslogMessage Vários campos Analisado através do grok para extrair time, method, target_path, protocol, response_code, referral_url, user_agent, target_ip, target_host e cache
TenantId additional.fields[TenantId] Mapeamento direto
acct principal.user.user_id Mapeado diretamente se não estiver vazio ou ?
addr principal.asset.ip Mapeamento direto
audit_epoch metadata.event_timestamp Convertido para data/hora com o formato UNIX. Os nanosegundos são extraídos da mensagem de registo original.
cache additional.fields[cache] Mapeamento direto
collection_time.nanos metadata.event_timestamp.nanos Usado para os nanosegundos da data/hora do evento, se disponíveis
collection_time.seconds metadata.event_timestamp.seconds Usado para os segundos da data/hora do evento, se disponível
data Vários campos A principal origem de dados, analisada de forma diferente com base no formato do registo (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 Mapeamento direto
pid target.process.pid Mapeamento direto
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 -
res security_result.action_details Mapeamento direto
response_code network.http.response_code Mapeado diretamente e convertido em número inteiro
ses network.session_id Mapeamento direto
src_ip principal.asset.ip Mapeamento direto
target_host target.asset.hostname Mapeamento direto
target_ip target.asset.ip Mapeados diretamente, após converter a representação de string numa matriz JSON e, em seguida, extrair IPs individuais
target_path target.url Mapeamento direto
time metadata.event_timestamp Analisado para extrair a data/hora através do formato dd/MMM/yyyy:HH:mm:ss Z
user_agent network.http.user_agent Mapeado diretamente se não estiver vazio ou -
metadata.event_type Inicialmente, é definido como GENERIC_EVENT e, em seguida, pode ser substituído com base noutros campos, como terminal e protocol. A predefiniçã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 Definido como NGINX
metadata.product_name Definido como NGINX
metadata.vendor_name Definido como NGINX
network.ip_protocol Definido como TCP se terminal for sshd ou ssh, ou se o padrão grok principal não corresponder
principal.asset_id Definido como GCP.GCE:0001 se terminal for sshd ou ssh. Definido 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 da Google SecOps.