Recopila registros de firewall de OPNsense

Compatible con:

Este analizador extrae campos de los registros del firewall de OPNsense (formatos syslog y CSV) y los asigna al UDM. Utiliza el análisis de grok y CSV para los registros de la aplicación "filterlog", y controla diferentes formatos de registro y protocolos de red (TCP, UDP, ICMP, etcétera) para completar los campos de UDM, como principal, destino, red y security_result. También agrega metadatos, como el nombre del proveedor y del producto, y determina el tipo de evento según la presencia de información principal y de destino.

Antes de comenzar

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

Obtén el archivo de autenticación de transferencia de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a SIEM Settings > Collection Agents.
  3. Descarga el archivo de autenticación de transferencia.

Obtén el ID de cliente de Google SecOps

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

Instala el agente de BindPlane

  1. Para la instalación 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 la instalación en 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 encontrar opciones de instalación adicionales en esta guía de instalación.

Configura el agente de Bindplane para que ingiera Syslog y lo envíe a Google SecOps

  1. Accede a la máquina en la 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

Agrega la configuración del servidor Syslog a OPNsense

  1. Accede a la interfaz web de OPNsense.
  2. Ve a Sistema > Configuración > Registro.
  3. En la sección Remote Logging, habilita Send logs to remote syslog server marcando la casilla.
  4. En el campo Servidores Syslog remotos, ingresa la dirección IP del servidor Syslog, incluido el PUERTO (por ejemplo, 10.10.10.10:54525).
  5. Selecciona Local0 como la instalación de syslog.
  6. Establece 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 Se asigna directamente desde column1.
column10 additional.fields[].key: "tos"
additional.fields[].value.string_value: Valor de column10
Se asigna 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 asigna 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 asigna directamente desde column13, anidado en additional.fields con la clave "Id".
column14 additional.fields[].key: "offset"
additional.fields[].value.string_value: Valor de column14
Se asigna directamente desde column14 y se anida en additional.fields con la clave "offset".
column15 additional.fields[].key: "flags"
additional.fields[].value.string_value: Valor de column15
Se asigna 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 número entero sin signo.
column19 principal.ip Se asigna directamente desde column19.
column20 target.ip Se asigna 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 de "datalength" se extrae con 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 asigna directamente desde column4, anidado en additional.fields con la clave "tracker".
column5 additional.fields[].key: "interface"
additional.fields[].value.string_value: Valor de column5
Se asigna directamente desde column5, anidado en additional.fields con la clave "interface".
column6 security_result.rule_type Se asigna directamente desde column6.
column7 security_result.action Se asignó desde column7. Si es "block", se convierte en mayúsculas "BLOCK". Si es "pass", se establece en "ALLOW".
column8 network.direction Se asignó desde column8. Si es "in", se debe establecer como "INBOUND". Si es "out", se establece en "OUTBOUND".
domain principal.administrative_domain Se asigna directamente desde el domain extraído por Grok. Se establece en "NETWORK_CONNECTION" si están presentes la dirección IP principal y la de destino; de lo contrario, se establece en "GENERIC_EVENT". Se codificó como "OPNSENSE". Se codificó como "OPNSENSE".
message Varios campos Se analizó 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 con grok y, luego, se convierte en una marca de tiempo. El valor de segundos se usa para completar metadata.event_timestamp.seconds y timestamp.seconds.
application principal.application Se asigna directamente desde el application extraído por Grok.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.