Recolha registos do NGINX
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
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Agentes de recolha.
- 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
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Perfil.
- Copie e guarde o ID do cliente da secção Detalhes da organização.
Instale o agente do Bindplane
Instalação do Windows
- Abra a Linha de comandos ou o PowerShell como administrador.
Execute o seguinte comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalação do Linux
- Abra um terminal com privilégios de raiz ou sudo.
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
- Para ver opções de instalação adicionais, consulte este guia de instalação.
Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps
Aceda ao ficheiro de configuração:
- 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. - Abra o ficheiro com um editor de texto (por exemplo,
nano
,vi
ou Bloco de notas).
- Localize o ficheiro
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
Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.
Substitua
<customer_id>
pelo ID de cliente real.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
- 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
- Registos de acesso:
- Aceder ao anfitrião do NGINX através de credenciais administrativas.
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
Abra o ficheiro de configuração do NGINX (por exemplo,
/etc/nginx/nginx.conf
):sudo vi /etc/nginx/nginx.conf
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; }
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.