Recolha registos da firewall OPNsense
Este analisador extrai campos dos registos da firewall do OPNsense (formatos syslog e CSV) e mapeia-os para o UDM. Usa a análise grok e CSV para registos de aplicações "filterlog", processando diferentes formatos de registos e protocolos de rede (TCP, UDP, ICMP, etc.) para preencher campos UDM, como principal, destino, rede e security_result. Também adiciona metadados, como o fornecedor e o nome do produto, e determina o tipo de evento com base na presença de informações principais e de destino.
Antes de começar
- Certifique-se de que tem uma instância do Google Security Operations.
- Certifique-se de que tem acesso privilegiado à interface Web do OPNsense.
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.
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
- Para a instalação do Windows, execute o seguinte script:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
- Para a instalação do Linux, execute o seguinte script:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
- Pode encontrar opções de instalação adicionais neste guia de instalação.
Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps
- Aceda à máquina onde o agente Bindplane está instalado.
Edite o ficheiro
config.yaml
da seguinte forma:receivers: tcplog: # Replace the below port <54525> and IP (0.0.0.0) with your specific values listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the creds location below according the placement of the credentials file you downloaded creds: '{ json file for creds }' # Replace <customer_id> below with your actual ID that you copied customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # You can apply ingestion labels below as preferred ingestion_labels: log_type: SYSLOG namespace: testNamespace raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
Reinicie o agente do Bindplane para aplicar as alterações através do seguinte comando:
sudo systemctl bindplane restart
Adicione a configuração do servidor Syslog ao OPNsense
- Inicie sessão na interface Web do OPNsense.
- Aceda a Sistema > Definições > Registo.
- Na secção Registo remoto, ative a opção Enviar registos para o servidor syslog remoto selecionando a caixa.
- No campo Servidores Syslog remotos, introduza o endereço IP do servidor syslog, incluindo a PORTA (por exemplo, 10.10.10.10:54525).
- Selecione Local0 como a funcionalidade syslog.
Defina o nível de Syslog como Alerta.
Clique em Guardar para aplicar as alterações.
Tabela de mapeamento da UDM
Campo de registo | Mapeamento de UDM | Lógica |
---|---|---|
column1 |
security_result.rule_id |
Mapeado diretamente a partir de column1 . |
column10 |
additional.fields[].key : "tos"additional.fields[].value.string_value : Valor de column10 |
Mapeado diretamente de column10 , aninhado em additional.fields com a chave "tos". |
column12 |
additional.fields[].key : "ttl"additional.fields[].value.string_value : valor de column12 |
Mapeado diretamente de column12 , aninhado em additional.fields com a chave "ttl". |
column13 |
additional.fields[].key : "Id"additional.fields[].value.string_value : Valor de column13 |
Mapeado diretamente de column13 , aninhado em additional.fields com a chave "Id". |
column14 |
additional.fields[].key : "offset"additional.fields[].value.string_value : Valor de column14 |
Mapeado diretamente de column14 , aninhado em additional.fields com a chave "offset". |
column15 |
additional.fields[].key : "flags"additional.fields[].value.string_value : valor de column15 |
Mapeado diretamente a partir de column15 , aninhado em additional.fields com a chave "flags". |
column17 |
network.ip_protocol |
Mapeado diretamente a partir de column17 após a conversão para letras maiúsculas. |
column18 |
network.received_bytes |
Mapeado diretamente a partir de column18 após a conversão para um número inteiro não assinado. |
column19 |
principal.ip |
Mapeado diretamente a partir de column19 . |
column20 |
target.ip |
Mapeado diretamente a partir de column20 . |
column21 |
principal.port (se column17 for TCP ou UDP)additional.fields[].key : "data_length"additional.fields[].value.string_value : valor extraído (se column17 for ICMP, GRE, ESP ou IGMP) |
Se column17 for TCP/UDP, é mapeado diretamente a partir de column21 e convertido em número inteiro. Caso contrário, o valor "datalength" é extraído através do grok e colocado em additional.fields com a chave "data_length". |
column22 |
target.port |
Mapeado diretamente a partir de column22 se column17 for TCP ou UDP e convertido em número inteiro. |
column24 |
additional.fields[].key : "tcp_flags"additional.fields[].value.string_value : Valor de column24 |
Mapeado diretamente a partir de column24 se column17 for TCP, aninhado em additional.fields com a chave "tcp_flags". |
column29 |
additional.fields[].key : "tcp_options"additional.fields[].value.string_value : Valor de column29 |
Mapeado diretamente a partir de column29 se column17 for TCP, aninhado em additional.fields com a chave "tcp_options". |
column4 |
additional.fields[].key : "tracker"additional.fields[].value.string_value : Valor de column4 |
Mapeado diretamente de column4 , aninhado em additional.fields com a chave "tracker". |
column5 |
additional.fields[].key : "interface"additional.fields[].value.string_value : Valor de column5 |
Mapeado diretamente de column5 , aninhado em additional.fields com a chave "interface". |
column6 |
security_result.rule_type |
Mapeado diretamente a partir de column6 . |
column7 |
security_result.action |
Mapeado a partir de column7 . Se for "block", é convertido para "BLOCK" em maiúsculas. Se for "pass", defina como "ALLOW". |
column8 |
network.direction |
Mapeado a partir de column8 . Se for "in", defina como "INBOUND". Se for "out", defina como "OUTBOUND". |
domain |
principal.administrative_domain |
Mapeado diretamente a partir do domain extraído pelo Grok. Definido como "NETWORK_CONNECTION" se os endereços IP principal e de destino estiverem presentes; caso contrário, "GENERIC_EVENT". Codificado de forma rígida para "OPNSENSE". Codificado de forma rígida para "OPNSENSE". |
message |
Vários campos | Analisado através de filtros grok e CSV para extrair vários campos. Consulte outras linhas para mapeamentos específicos. |
ts |
metadata.event_timestamp.seconds , timestamp.seconds |
Analisado a partir do campo de mensagem através do grok e, em seguida, convertido num registo de data/hora. O valor de segundos é usado para preencher metadata.event_timestamp.seconds e timestamp.seconds . |
application |
principal.application |
Mapeado diretamente a partir do application extraído pelo Grok. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.