Recolha registos da firewall OPNsense

Compatível com:

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

  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.

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

  1. 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
  2. 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
  3. 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

  1. Aceda à máquina onde o agente Bindplane está instalado.
  2. 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
    
  3. 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

  1. Inicie sessão na interface Web do OPNsense.
  2. Aceda a Sistema > Definições > Registo.
  3. Na secção Registo remoto, ative a opção Enviar registos para o servidor syslog remoto selecionando a caixa.
  4. No campo Servidores Syslog remotos, introduza o endereço IP do servidor syslog, incluindo a PORTA (por exemplo, 10.10.10.10:54525).
  5. Selecione Local0 como a funcionalidade syslog.
  6. Defina o nível de Syslog como Alerta.

  7. 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.