Recopila registros de firewall de OPNsense
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
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recopilación.
- Descarga el archivo de autenticación de transferencia.
Obtén el ID de cliente de Google SecOps
- Accede a 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.
Instala el agente de BindPlane
- 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
- 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
- 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
- Accede a la máquina en la que está instalado 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
Agrega la configuración del servidor Syslog a OPNsense
- Accede a la interfaz web de OPNsense.
- Ve a Sistema > Configuración > Registros.
- En la sección Registro remoto, marca la casilla para habilitar Enviar registros al servidor de syslog remoto.
- En el campo Servidores syslog remotos, ingresa la dirección IP del servidor syslog, incluido el PUERTO (por ejemplo, 10.10.10.10:54525).
- Selecciona Local0 como la instalación de syslog.
Establece el nivel de Syslog como Alert.
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.