Recoger registros de cortafuegos de OPNsense
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
- Inicia sesión en la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recogida.
- Descarga el archivo de autenticación de ingestión.
Obtener el ID de cliente de Google SecOps
- Inicia sesión en la consola de Google SecOps.
- Ve a Configuración de SIEM > Perfil.
- Copia y guarda el ID de cliente de la sección Detalles de la organización.
Instalar el agente de Bindplane
- 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
- 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
- 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
- Accede al equipo en el que está instalado el agente de Bindplane.
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
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
- Inicia sesión en la interfaz web de OPNsense.
- Ve a Sistema > Ajustes > Registro.
- En la sección Registro remoto, habilita Enviar registros al servidor syslog remoto marcando la casilla.
- En el campo Servidores Syslog remotos, introduce la dirección IP del servidor Syslog, incluido el PUERTO (por ejemplo, 10.10.10.10:54525).
- Seleccione Local0 como instalación syslog.
Define el nivel de Syslog como Alerta.
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.