Coletar registros de firewall do OPNsense
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
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- Faça o download do arquivo de autenticação de transferência.
Receber o ID de 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
- 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
- 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
- Acesse a máquina em que o BindPlane está instalado.
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
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
- Faça login na interface da Web do OPNsense.
- Acesse Sistema > Configurações > Registro.
- Na seção Gerenciamento de registros remoto, marque a caixa Enviar registros para o servidor syslog remoto.
- No campo Servidores Syslog remotos, insira o endereço IP do servidor syslog, incluindo a PORTA (por exemplo, 10.10.10.10:54525).
- Selecione Local0 como a facilidade de syslog.
Defina o nível do Syslog como Alert.
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.