Coletar registros de firewall do OPNsense

Compatível com:

Esse analisador extrai campos dos registros de firewall do OPNsense (formatos syslog e CSV) e os mapeia para o UDM. Ele usa a análise grok e CSV para registros de aplicativo "filterlog", processando diferentes formatos de registro e protocolos de rede (TCP, UDP, ICMP etc.) para preencher campos do UDM, como principal, target, network e security_result. Ele também adiciona metadados, como nome do fornecedor e do produto, e determina o tipo de evento com base na presença de informações principais e de destino.

Antes de começar

  • Verifique se você tem uma instância do Google Security Operations.
  • Verifique se você tem acesso privilegiado à interface da Web do OPNsense.

Receber o arquivo de autenticação de ingestão do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. Faça o download do arquivo de autenticação de transferência.

Receber o ID de cliente do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. Copie e salve o ID do cliente na seção Detalhes da organização.

Instalar 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. Outras opções de instalação podem ser encontradas neste guia de instalação.

Configurar o agente BindPlane para ingerir o Syslog e enviar ao Google SecOps

  1. Acesse a máquina em que o BindPlane está instalado.
  2. Edite o arquivo 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 BindPlane Agent para aplicar as mudanças usando o seguinte comando: sudo systemctl bindplane restart

Adicionar a configuração do servidor Syslog ao OPNsense

  1. Faça login na interface da Web do OPNsense.
  2. Acesse Sistema > Configurações > Registro.
  3. Na seção Gerenciamento de registros remoto, marque a caixa Enviar registros para o servidor syslog remoto.
  4. No campo Servidores Syslog remotos, insira o endereço IP do servidor syslog, incluindo a PORTA (por exemplo, 10.10.10.10:54525).
  5. Selecione Local0 como a facilidade de syslog.
  6. Defina o nível do Syslog como Alert.

  7. Clique em Salvar para aplicar as alterações.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
column1 security_result.rule_id Mapeado diretamente 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 de column15, aninhado em additional.fields com as chaves "flags".
column17 network.ip_protocol Mapeado diretamente de column17 após a conversão para maiúsculas.
column18 network.received_bytes Mapeado diretamente de column18 após a conversão para número inteiro não assinado.
column19 principal.ip Mapeado diretamente de column19.
column20 target.ip Mapeado diretamente 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, será mapeado diretamente de column21 e convertido em número inteiro. Caso contrário, o valor "datalength" é extraído usando grok e colocado em additional.fields com a chave "data_length".
column22 target.port Mapeado diretamente 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 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 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 de column6.
column7 security_result.action Mapeado de column7. Se "block", convertido em maiúsculas "BLOCK". Se for "permitir", defina como "PERMITIR".
column8 network.direction Mapeado de column8. Se for "in", defina como "INBOUND". Se for "out", defina como "OUTBOUND".
domain principal.administrative_domain Mapeado diretamente do domain extraído por grok. Defina como "NETWORK_CONNECTION" se os endereços IP principal e de destino estiverem presentes. Caso contrário, defina como "GENERIC_EVENT". Fixado em "OPNSENSE". Fixado em "OPNSENSE".
message Vários campos Analisado usando filtros grok e csv para extrair vários campos. Consulte outras linhas para conferir mapeamentos específicos.
ts metadata.event_timestamp.seconds, timestamp.seconds Analisado no campo de mensagem usando grok e convertido em um carimbo de data/hora. O valor em segundos é usado para preencher metadata.event_timestamp.seconds e timestamp.seconds.
application principal.application Mapeado diretamente do application extraído por grok.

Alterações

2023-11-22

  • Parser recém-criado.