Recoger registros de cortafuegos de OPNsense

Disponible en:

Este analizador extrae campos de los registros del cortafuegos de OPNsense (formatos syslog y CSV) y los asigna al UDM. Utiliza el análisis grok y CSV para los registros de aplicaciones "filterlog", gestionando diferentes formatos de registro y protocolos de red (TCP, UDP, ICMP, etc.) para rellenar campos de UDM como principal, target, network y security_result. También añade metadatos, como el nombre del proveedor y del producto, y determina el tipo de evento en función de la presencia de información principal y de destino.

Antes de empezar

  • Asegúrate de que tienes una instancia de Google Security Operations.
  • Asegúrate de tener acceso con privilegios a la interfaz web de OPNsense.

Obtener el archivo de autenticación de ingestión de Google SecOps

  1. Inicia sesión en la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recogida.
  3. Descarga el archivo de autenticación de ingestión.

Obtener el ID de cliente de Google SecOps

  1. Inicia sesión en la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. Copia y guarda el ID de cliente de la sección Detalles de la organización.

Instalar el agente de Bindplane

  1. Para instalar en Windows, ejecuta la siguiente secuencia de comandos:
    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
  2. Para instalar Linux, ejecuta la siguiente secuencia de comandos:
    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
  3. Puedes consultar otras opciones de instalación en esta guía de instalación.

Configurar el agente de Bindplane para ingerir Syslog y enviarlo a Google SecOps

  1. Accede al equipo en el que está instalado el agente de Bindplane.
  2. Edita el archivo config.yaml de la siguiente manera:

    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. Reinicia el agente de Bindplane para aplicar los cambios con el siguiente comando: sudo systemctl bindplane restart

Añadir la configuración del servidor Syslog a OPNsense

  1. Inicia sesión en la interfaz web de OPNsense.
  2. Ve a Sistema > Ajustes > Registro.
  3. En la sección Registro remoto, habilita Enviar registros al servidor syslog remoto marcando la casilla.
  4. En el campo Servidores Syslog remotos, introduce la dirección IP del servidor Syslog, incluido el PUERTO (por ejemplo, 10.10.10.10:54525).
  5. Seleccione Local0 como instalación syslog.
  6. Define el nivel de Syslog como Alerta.

  7. Haz clic en Guardar para aplicar los cambios.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
column1 security_result.rule_id Asignado directamente desde column1.
column10 additional.fields[].key: "tos"
additional.fields[].value.string_value: valor de column10
Se ha asignado directamente desde column10, anidado en additional.fields con la clave "tos".
column12 additional.fields[].key: "ttl"
additional.fields[].value.string_value: valor de column12
Se ha asignado directamente desde column12, anidado en additional.fields con la clave "ttl".
column13 additional.fields[].key: "Id"
additional.fields[].value.string_value: valor de column13
Se ha asignado directamente desde column13, anidado en additional.fields con la clave "Id".
column14 additional.fields[].key: "offset"
additional.fields[].value.string_value: valor de column14
Asignado directamente desde column14, anidado en additional.fields con la clave "offset".
column15 additional.fields[].key: "flags"
additional.fields[].value.string_value: valor de column15
Se ha asignado directamente desde column15, anidado en additional.fields con la clave "flags".
column17 network.ip_protocol Se asigna directamente desde column17 después de convertirlo a mayúsculas.
column18 network.received_bytes Se asigna directamente desde column18 después de convertirlo en un entero sin signo.
column19 principal.ip Asignado directamente desde column19.
column20 target.ip Asignado directamente desde column20.
column21 principal.port (si column17 es TCP o UDP)
additional.fields[].key: "data_length"
additional.fields[].value.string_value: valor extraído (si column17 es ICMP, GRE, ESP o IGMP)
Si column17 es TCP/UDP, se asigna directamente desde column21 y se convierte en un número entero. De lo contrario, el valor "datalength" se extrae mediante grok y se coloca en additional.fields con la clave "data_length".
column22 target.port Se asigna directamente desde column22 si column17 es TCP o UDP, y se convierte en un número entero.
column24 additional.fields[].key: "tcp_flags"
additional.fields[].value.string_value: valor de column24
Se asigna directamente desde column24 si column17 es TCP, anidado en additional.fields con la clave "tcp_flags".
column29 additional.fields[].key: "tcp_options"
additional.fields[].value.string_value: valor de column29
Se asigna directamente desde column29 si column17 es TCP, anidado en additional.fields con la clave "tcp_options".
column4 additional.fields[].key: "tracker"
additional.fields[].value.string_value: valor de column4
Se ha asignado directamente desde column4, anidado en additional.fields con la clave "tracker".
column5 additional.fields[].key: "interface"
additional.fields[].value.string_value: valor de column5
Asignado directamente desde column5, anidado en additional.fields con la clave "interface".
column6 security_result.rule_type Asignado directamente desde column6.
column7 security_result.action Mapeado de column7. Si es "block", se convierte a mayúsculas ("BLOCK"). Si es "pass", se asigna el valor "ALLOW".
column8 network.direction Mapeado de column8. Si es "in", asigna el valor "INBOUND". Si es "out", se asigna el valor "OUTBOUND".
domain principal.administrative_domain Se asigna directamente desde el domain extraído por grok. Se asigna el valor "NETWORK_CONNECTION" si están presentes tanto la dirección IP principal como la de destino. De lo contrario, se asigna el valor "GENERIC_EVENT". Codificado como "OPNSENSE". Codificado como "OPNSENSE".
message Varios campos Se analiza con los filtros grok y csv para extraer varios campos. Consulta otras filas para ver las asignaciones específicas.
ts metadata.event_timestamp.seconds, timestamp.seconds Se analiza a partir del campo de mensaje mediante grok y, a continuación, se convierte en una marca de tiempo. El valor de los segundos se usa para rellenar tanto metadata.event_timestamp.seconds como timestamp.seconds.
application principal.application Se asigna directamente desde el application extraído por grok.

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.