Coletar registros do HAProxy
Este documento explica como ingerir registros do HAProxy no Google Security Operations usando o Bindplane. O analisador do Logstash extrai campos de mensagens syslog do HAProxy usando uma série de regras de correspondência de padrões Grok, projetadas especificamente para processar vários formatos de registro do HAProxy. Em seguida, ele mapeia os campos extraídos para o Modelo de Dados Unificado (UDM, na sigla em inglês), enriquecendo os dados com mais contexto e padronizando a representação para análise posterior.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Instância do Google SecOps
- Windows 2016 ou mais recente ou um host Linux com
systemd
- Se estiver executando por trás de um proxy, as portas do firewall estarão abertas.
- Acesso privilegiado ao HAProxy
Receber o arquivo de autenticação de ingestão do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- 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
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- Copie e salve o ID do cliente na seção Detalhes da organização.
Instalar o agente do Bindplane
Instalação do Windows
- Abra o Prompt de Comando ou o PowerShell como administrador.
Execute este 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 root ou sudo.
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
Para mais opções de instalação, consulte o guia de instalação.
Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps
- Acesse o arquivo de configuração:
- 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. - Abra o arquivo usando um editor de texto (por exemplo,
nano
,vi
ou Bloco de Notas).
- Localize o arquivo
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_file_path: '/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: 'HAPROXY' 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 do cliente real.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
Configurar o Syslog para HAProxy
- Faça login no HAproxy usando a CLI.
Adicione a diretiva log na seção global à Configuration para encaminhar mensagens Syslog por UDP.
- Substitua
<bindplane-ips>
pelo endereço IP real do agente do Bindplane.
global log <bindplane-ip>:514 local0 defaults log global
- Substitua
Tabela de mapeamento da UDM
Campo de registro | Mapeamento da UDM | Lógica |
---|---|---|
accept_date_ms | ||
actconn | ||
backend_name | ||
backend_queue | ||
beconn | ||
bytes_read | network.received_bytes | Extraído do campo bytes_read no registro e convertido em um número inteiro sem sinal. |
captured_request_headers | ||
client_ip | principal.ip | Extraído do campo client_ip no registro. |
client_port | principal.port | Extraído do campo client_port no registro e convertido em um número inteiro. |
command_description | metadata.description | Extraído do campo command_description no registro, se disponível. Caso contrário, ele será derivado de outros campos, como action ou status , dependendo da mensagem de registro. |
datetime | metadata.event_timestamp.seconds | Extraído do campo datetime no registro, se disponível. Caso contrário, ele será derivado do campo timestamp na entrada de registro. |
description | metadata.description | Extraído do campo description no registro, se disponível. Caso contrário, ele será derivado de outros campos, como command_description ou action , dependendo da mensagem de registro. |
feconn | ||
frontend_name | ||
http_request | target.url | Extraído do campo http_request no registro. |
http_status_code | network.http.response_code | Extraído do campo http_status_code no registro e convertido em um número inteiro. |
http_verb | network.http.method | Extraído do campo http_verb no registro. |
http_version | metadata.product_version | Extraído do campo http_version no registro e formatado como HTTP/{version} . |
iniciador | target.application | Extraído do campo initiator no registro. |
module | ||
msg | security_result.summary | Extraído do campo msg no registro. |
pid | target.process.pid | Extraído do campo pid no registro. |
difusão reversa que restaura | ||
process_name | target.application | Extraído do campo process_name no registro. |
retries | ||
server_name | target.hostname | Extraído do campo server_name no registro. Se estiver vazio, o padrão será o valor de syslog_server . |
gravidade, | security_result.severity | Mapeado do campo severity no registro. WARNING é mapeado para MEDIUM , ALERT é mapeado para CRITICAL e NOTICE é mapeado para INFORMATIONAL . |
shell | ||
srv_queue | ||
srvconn | ||
status | ||
syslog_server | target.hostname, intermediary.hostname | Extraído do campo syslog_server no registro. Usado para o nome do host de destino (se server_name estiver vazio) e o nome do host intermediário. |
syslog_timestamp | ||
syslog_timestamp_1 | ||
syslog_timestamp_2 | ||
syslog_timestamp_4 | ||
target_ip | ||
time_backend_connect | ||
time_backend_response | ||
time_duration | ||
time_queue | ||
time_request | ||
timestamp | metadata.event_timestamp.seconds | Extraído do campo timestamp no registro e analisado para informações de data e hora. Usado como o carimbo de data/hora do evento. |
unknown_parameters1 | ||
unknown_parameters2 | ||
user_name | target.user.userid | Extraído do campo user_name no registro. |
metadata.event_type | Definido como NETWORK_HTTP por padrão. Mudou para tipos de eventos específicos, como PROCESS_UNCATEGORIZED , STATUS_UPDATE ou USER_UNCATEGORIZED , com base na mensagem de registro e nos campos analisados. |
|
metadata.vendor_name | Defina como HAProxy Enterprise . |
|
metadata.product_name | Defina como HAProxy . |
|
network.application_protocol | Defina como HTTP se o campo message contiver HTTP . |
|
metadata.log_type | Defina como HAPROXY . |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.