Recoger registros de un switch Ubiquiti Unifi
En este documento se explica cómo ingerir registros de switches Ubiquiti Unifi en Google Security Operations mediante Bindplane. El analizador extrae campos de los mensajes syslog mediante patrones grok, lo que convierte los datos de registro sin procesar en un formato estructurado conforme al modelo de datos unificado (UDM). Gestiona varios formatos de registro, extrae información clave, como marcas de tiempo, nombres de host, descripciones y detalles de la red, y enriquece los datos con contexto adicional antes de combinarlos en el evento UDM final.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Una instancia de Google SecOps
- Un host Windows 2016 o posterior, o Linux con
systemd - Si se ejecuta a través de un proxy, asegúrese de que los puertos del cortafuegos estén abiertos según los requisitos del agente BindPlane.
- Acceso con privilegios a la interfaz de usuario de Ubiquiti Controller
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. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane.
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
Instala el agente Bindplane en tu sistema operativo Windows o Linux siguiendo las instrucciones que se indican a continuación.
Instalación de Windows
- Abre la petición de comando o PowerShell como administrador.
Ejecuta el siguiente comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalación de Linux
- Abre un terminal con privilegios de root o sudo.
Ejecuta el siguiente comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Recursos de instalación adicionales
- Para ver otras opciones de instalación, consulta esta guía de instalación.
Configurar el agente de BindPlane para ingerir Syslog y enviarlo a Google SecOps
Accede al archivo de configuración:
- Busca el archivo
config.yaml. Normalmente, se encuentra en el directorio/etc/bindplane-agent/en Linux o en el directorio de instalación en Windows. - Abre el archivo con un editor de texto (por ejemplo,
nano,vio Bloc de notas).
- Busca el archivo
Edita el archivo
config.yamlde la siguiente manera:receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <CUSTOMER_ID> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'UBIQUITI_SWITCH' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels- Sustituye el puerto y la dirección IP según sea necesario en tu infraestructura.
- Sustituye
<CUSTOMER_IDpor el ID de cliente real. - Actualiza
/path/to/ingestion-authentication-file.jsona la ruta donde se guardó el archivo de autenticación en la sección Obtener el archivo de autenticación de ingestión de Google SecOps.
Reinicia el agente de Bindplane para aplicar los cambios
Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:
sudo systemctl restart bindplane-agentPara reiniciar el agente de Bindplane en Windows, puedes usar la consola Servicios o introducir el siguiente comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar el switch de Ubiquiti para enviar Syslog del plano de control
- Inicia sesión en la interfaz de usuario de UniFi Controller.
- Abre Unifi Network.
- Ve a Configuración > Plano de control > pestaña Integraciones.
- Busca la sección Registro de actividad (Syslog).
- Habilita la opción Servidor SIEM.
- Proporcione los siguientes detalles de configuración:
- Haga clic en Editar categorías y añada las categorías de registro necesarias.
- Dirección del servidor: introduce la dirección IP del agente de Bindplane.
- Puerto: introduce el número de puerto del agente de Bindplane (es obligatorio usar UDP).
- Haz clic en Aplicar cambios.
Configurar el switch de Ubiquiti para enviar Syslog de CyberSecure
- Inicia sesión en la interfaz de usuario de UniFi Controller.
- Abre Unifi Network.
- Ve a Ajustes > CyberSecure > pestaña Registro de tráfico.
- Busca la sección Registro de actividad (Syslog).
- Habilita la opción Servidor SIEM.
- Proporcione los siguientes detalles de configuración:
- Haga clic en Editar categorías y añada las categorías de registro necesarias.
- Dirección del servidor: introduce la dirección IP del agente de Bindplane.
- Puerto: introduce el número de puerto del agente de Bindplane (es obligatorio usar UDP).
- Inhabilita Registros de depuración.
- Haz clic en Aplicar cambios.
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica |
|---|---|---|
anomalies |
security_result.detection_fields[].key: "anomalies"security_result.detection_fields[].value: anomalies valor del registro |
Se asigna directamente desde el campo anomalies del registro sin procesar. |
application |
observer.application |
Se asigna directamente desde el campo application del registro sin procesar. |
assoc_status |
security_result.detection_fields[].key: "assoc_status"security_result.detection_fields[].value: valor assoc_status del registro |
Se asigna directamente desde el campo assoc_status del registro sin procesar. |
asset_details |
observer.asset.product_object_id: extraído con el patrón grok %{GREEDYDATA:asset_id},%{GREEDYDATA:asset_version}asset_software.version: extraído con el patrón grok %{GREEDYDATA:asset_id},%{GREEDYDATA:asset_version} |
El campo asset_details se analiza con un patrón grok para extraer asset_id y asset_version. |
asset_id |
observer.asset.product_object_id |
Se asigna directamente desde el campo asset_id extraído de asset_details. |
asset_version |
observer.asset.software.version |
Se asigna directamente desde el campo asset_version extraído de asset_details. |
bssid |
principal.mac |
Se asigna directamente desde el campo bssid del registro sin procesar. |
description |
metadata.description |
Se asigna directamente desde el campo description del registro sin procesar. |
device |
metadata.product_name |
Se asigna directamente desde el campo device del registro sin procesar. Si device no está presente, se usa el valor "UBIQUITI_SWITCH". |
dns_resp_seen |
security_result.detection_fields[].key: "dns_resp_seen"security_result.detection_fields[].value: valor dns_resp_seen del registro |
Se asigna directamente desde el campo dns_resp_seen del registro sin procesar. |
DST |
target.ip |
Se asigna directamente desde el campo DST del registro sin procesar. |
DPT |
principal.port |
Se asigna directamente desde el campo DPT del registro sin procesar después de convertirlo en un número entero. |
event_type |
security_result.detection_fields[].key: "event_type"security_result.detection_fields[].value: event_type valor del registro |
Se asigna directamente desde el campo event_type del registro sin procesar. |
host |
principal.hostname |
Se asigna directamente desde el campo host del registro sin procesar. |
ID |
additional.fields[].key: "ID"additional.fields[].value.string_value: valor ID del registro |
Se asigna directamente desde el campo ID del registro sin procesar. |
IN |
additional.fields[].key: "IN"additional.fields[].value.string_value: valor IN del registro |
Se asigna directamente desde el campo IN del registro sin procesar. |
interface |
additional.fields[].key: "interface"additional.fields[].value.string_value: valor interface del registro |
Se asigna directamente desde el campo interface del registro sin procesar. |
LEN |
additional.fields[].key: "LEN"additional.fields[].value.string_value: valor LEN del registro |
Se asigna directamente desde el campo LEN del registro sin procesar. |
mac |
principal.mac |
Se asigna directamente desde el campo mac del registro sin procesar. |
metadata.event_type |
metadata.event_type |
Derivado de la lógica del analizador. Se asigna el valor "STATUS_SHUTDOWN" si state es "Down", "STATUS_STARTUP" si state es "Up", "STATUS_UPDATE" si kv_msg y DST están presentes o principal_present es true, y "GENERIC_EVENT" en los demás casos. |
metadata.log_type |
metadata.log_type: "UBIQUITI_SWITCH" |
Valor constante definido por el analizador. |
metadata.vendor_name |
metadata.vendor_name: "UBIQUITI" |
Valor constante definido por el analizador. |
principal_ip |
principal.ip |
Se asigna directamente desde el campo principal_ip del registro sin procesar. |
process_id |
observer.process.pid |
Se asigna directamente desde el campo process_id del registro sin procesar. |
product_event_type |
metadata.product_event_type |
Se asigna directamente desde el campo product_event_type del registro sin procesar. |
PROTO |
network.ip_protocol |
Se asigna directamente desde el campo PROTO del registro sin procesar. Si PROTO es "ICMPv6", el valor cambia a "ICMP". |
query_1 |
target.administrative_domain |
Se asigna directamente desde el campo query_1 del registro sin procesar. |
query_server_1 |
target.ip |
Se asigna directamente desde el campo query_server_1 del registro sin procesar. |
radio |
security_result.detection_fields[].key: "radio"security_result.detection_fields[].value: valor radio del registro |
Se asigna directamente desde el campo radio del registro sin procesar. |
satisfaction_now |
security_result.detection_fields[].key: "satisfaction_now"security_result.detection_fields[].value: valor de satisfaction_now del registro |
Se asigna directamente desde el campo satisfaction_now del registro sin procesar. |
source_port |
principal.port |
Se asigna directamente desde el campo source_port del registro sin procesar después de convertirlo en un número entero. |
SPT |
target.port |
Se asigna directamente desde el campo SPT del registro sin procesar después de convertirlo en un número entero. |
SRC |
principal.ip, principal.hostname |
Se asigna directamente desde el campo SRC del registro sin procesar. |
sta |
principal.mac |
Se asigna directamente desde el campo sta del registro sin procesar. |
state |
additional.fields[].key: "state"additional.fields[].value.string_value: state valor del registro |
Se asigna directamente desde el campo state del registro sin procesar. |
timestamp |
metadata.event_timestamp |
Se asigna directamente desde el campo timestamp del registro sin procesar después de que el filtro de fecha lo haya analizado. |
TTL |
additional.fields[].key: "TTL"additional.fields[].value.string_value: valor TTL del registro |
Se asigna directamente desde el campo TTL del registro sin procesar. |
vap |
metadata.ingestion_labels[].key: "Vap"metadata.ingestion_labels[].value: valor vap del registro |
Se asigna directamente desde el campo vap del registro sin procesar. |
version |
metadata.product_version |
Se asigna directamente desde el campo version del registro sin procesar. |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.