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 a la UDM. Usa 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.) para propagar campos de la UDM, como principal, target, network 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 Configuración de SIEM > Agentes de recopilación.
  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 de 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 de 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 de 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 transferir Syslog y enviarlo a Google SecOps

  1. Accede a la máquina en la que está instalado 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 > Registros.
  3. En la sección Registro remoto, marca la casilla para habilitar Enviar registros al servidor de syslog remoto.
  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 Alert.

  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: Es el 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: Es el valor de column12.
Se asigna directamente desde column12 y se anida en additional.fields con la clave "ttl".
column13 additional.fields[].key: "Id"
additional.fields[].value.string_value: Es el valor de column13.
Se asigna directamente desde column13 y se anida en additional.fields con la clave "Id".
column14 additional.fields[].key: "offset"
additional.fields[].value.string_value: Es el valor de column14.
Se asigna directamente desde column14, anidado en additional.fields con la clave "offset".
column15 additional.fields[].key: "flags"
additional.fields[].value.string_value: Es el valor de column15.
Se asignan directamente desde column15 y se anidan en additional.fields con "marcas" clave.
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 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 número entero. De lo contrario, el valor "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 número entero.
column24 additional.fields[].key: "tcp_flags"
additional.fields[].value.string_value: Es el 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: Es el 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: Es el 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: Es el 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 asigna desde column7. Si es "bloque", se convierte en mayúsculas "BLOCK". Si es “pass”, configúralo como “ALLOW”.
column8 network.direction Se asigna desde column8. Si es "in", configúralo como "INBOUND". Si es "out", configúralo como "OUTBOUND".
domain principal.administrative_domain Se asigna directamente desde el domain extraído por grok. Establece el valor en "NETWORK_CONNECTION" si están presentes las direcciones IP principal y de destino; de lo contrario, establece el valor en "GENERIC_EVENT". Está codificado de forma fija en “OPNSENSE”. Está codificado de forma fija en “OPNSENSE”.
message Varios campos Se analiza con filtros grok y csv para extraer varios campos. Consulta otras filas para ver asignaciones específicas.
ts metadata.event_timestamp.seconds, timestamp.seconds Se analiza desde el campo de mensaje con grok y, luego, se convierte en una marca de tiempo. El valor de segundos se usa para propagar metadata.event_timestamp.seconds y timestamp.seconds.
application principal.application Se asigna directamente desde el application extraído por grok.

Cambios

2023-11-22

  • Sin embargo, el analizador se creó recientemente.