Recoger registros de la plataforma de servicios de fibra de ADVA
En este documento se explica cómo ingerir registros de la plataforma de servicios de fibra (FSP) de ADVA en Google Security Operations mediante Bindplane. El analizador extrae campos de los mensajes syslog del conmutador y del router, y los convierte en pares clave-valor. A continuación, asigna estos campos extraídos y sus valores a los campos correspondientes del esquema UDM de Chronicle, lo que enriquece los datos para el análisis de seguridad.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Una instancia de Google SecOps
- Un host con Windows 2012 SP2 o versiones posteriores, 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 de Bindplane.
- Acceso con privilegios a la consola de gestión de dispositivos ADVA FSP
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.yaml. A continuación, se muestran dos opciones de receptor que funcionan. Elige la que se ajuste a la forma en que tu dispositivo envía los registros:- Opción A: receptor de registros UDP (UDP simple)
receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: <CUSTOMER_ID> endpoint: malachiteingestion-pa.googleapis.com log_type: 'ADVA_FSP' raw_log_field: body ingestion_labels: service: pipelines: logs/adva-fsp: receivers: - udplog exporters: - chronicle/chronicle_w_labels- Opción B: receptor Syslog (recomendada para un encuadre estricto de Syslog)
receivers: syslog: tcp: listen_address: "0.0.0.0:514" protocol: rfc5424 # or rfc3164 if your device uses BSD syslog exporters: chronicle/chronicle_w_labels: compression: gzip creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: <CUSTOMER_ID> endpoint: malachiteingestion-pa.googleapis.com log_type: 'ADVA_FSP' raw_log_field: body ingestion_labels: source: 'adva-fsp' env: 'production' service: pipelines: logs/adva-fsp: receivers: - syslog exporters: - chronicle/chronicle_w_labels- Sustituye el puerto y la dirección IP según sea necesario en tu infraestructura.
- Sustituye
<CUSTOMER_ID>por 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 BindPlaneAgentConfigurar el reenvío de Syslog en ADVA FSP
- Inicia sesión en la consola de gestión de FSP de ADVA.
- Ve a Nodo > General > Controles.
- En la sección Destinatarios de eventos remotos (SysLog), haga clic en Añadir.
- Proporcione los siguientes detalles de configuración:
- Dirección IPv4/v6: introduce la dirección IP del agente de Bindplane.
- Puerto: introduce el número de puerto del agente de Bindplane (por ejemplo,
514). - Protocolo: selecciona UDP o TCP, en función de la configuración del agente de Bindplane.
- Extensión de mensaje: opcional. Haz clic en Añadir etiqueta de usuario para incluir identificadores adicionales en los mensajes.
- Haz clic en Guardar para activar la configuración.
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica |
|---|---|---|
| ACCESSORDER | additional.fields.value.string_value | El valor se toma del campo ACCESSORDER del registro sin procesar. |
| DIRECCIÓN | principal.ip | El valor se toma del campo ADDRESS del registro sin procesar y se analiza como una dirección IP. |
| ADMINSTATE | additional.fields.value.string_value | El valor se toma del campo ADMINSTATE del registro sin procesar. |
| AISCLIENTMDLEVEL | additional.fields.value.string_value | El valor se toma del campo AISCLIENTMDLEVEL del registro sin procesar. |
| AISGENENABLED | additional.fields.value.string_value | El valor se toma del campo AISGENENABLED del registro sin procesar. |
| AISPRIORITY | additional.fields.value.string_value | El valor se toma del campo AISPRIORITY del registro sin procesar. |
| AISTXPERIOD | additional.fields.value.string_value | El valor se toma del campo AISTXPERIOD del registro sin procesar. |
| AISTRIGGERTYPES | additional.fields.value.string_value | El valor se toma del campo AISTRIGGERTYPES del registro sin procesar. |
| BUFFERSIZE | additional.fields.value.string_value | El valor se toma del campo BUFFERSIZE del registro sin procesar. |
| CCIENABLED | additional.fields.value.string_value | El valor se toma del campo CCIENABLED del registro sin procesar. |
| CCMINTERFACESTATUSTLVCONTROL | additional.fields.value.string_value | El valor se toma del campo CCMINTERFACESTATUSTLVCONTROL del registro sin procesar. |
| CCMLTMPRIORITY | additional.fields.value.string_value | El valor se toma del campo CCMLTMPRIORITY del registro sin procesar. |
| CFMTAGETHERTYPE | additional.fields.value.string_value | El valor se toma del campo CFMTAGETHERTYPE del registro sin procesar. |
| CIR | additional.fields.value.string_value | El valor se toma del campo CIR del registro sin procesar. |
| COS | additional.fields.value.string_value | El valor se toma del campo COS del registro sin procesar. |
| CT | metadata.description | El valor se toma del campo CT del registro sin procesar. |
| DESTBMAC | target.mac | El valor se toma del campo DESTBMAC del registro sin procesar y se analiza como una dirección MAC. |
| DHCPCIDENABLED | additional.fields.value.string_value | El valor se toma del campo DHCPCIDENABLED del registro sin procesar. |
| DHCPENABLED | additional.fields.value.string_value | El valor se toma del campo DHCPENABLED del registro sin procesar. |
| DHCPHOSTNAME | network.dhcp.client_hostname | El valor se toma del campo DHCPHOSTNAME del registro sin procesar. |
| DHCPHOSTNAMEENABLED | additional.fields.value.string_value | El valor se toma del campo DHCPHOSTNAMEENABLED del registro sin procesar. |
| DHCPHOSTNAMETYPE | additional.fields.value.string_value | El valor se toma del campo DHCPHOSTNAMETYPE del registro sin procesar. |
| DHCPLOGSERVERENABLED | additional.fields.value.string_value | El valor se toma del campo DHCPLOGSERVERENABLED del registro sin procesar. |
| DHCPNTPSERVERENABLED | additional.fields.value.string_value | El valor se toma del campo DHCPNTPSERVERENABLED del registro sin procesar. |
| DHCPV6CIDENABLED | additional.fields.value.string_value | El valor se toma del campo DHCPV6CIDENABLED del registro sin procesar. |
| DHCPV6ENABLED | additional.fields.value.string_value | El valor se toma del campo DHCPV6ENABLED del registro sin procesar. |
| DHCPV6ROLE | additional.fields.value.string_value | El valor se toma del campo DHCPV6ROLE del registro sin procesar. |
| DHCPVENDORINFOTYPE | additional.fields.value.string_value | El valor se toma del campo DHCPVENDORINFOTYPE del registro sin procesar. |
| DIR | additional.fields.value.string_value | El valor se toma del campo DIR del registro sin procesar. |
| DIRECCIÓN | network.direction | El valor se define como "OUTBOUND" si el campo DIRECTION del registro sin procesar es "UP" (sin distinción entre mayúsculas y minúsculas), "INBOUND" si es "DOWN" y se deja vacío en los demás casos. |
| ENCAPSULATIONTYPE | additional.fields.value.string_value | El valor se toma del campo ENCAPSULATIONTYPE del registro sin procesar. |
| GUARANTEEDA2NBW | additional.fields.value.string_value | El valor se toma del campo GUARANTEEDA2NBW del registro sin procesar. |
| HCOSMGMTENABLED | additional.fields.value.string_value | El valor se toma del campo HCOSMGMTENABLED del registro sin procesar. |
| INT | additional.fields.value.string_value | El valor se toma del campo INT del registro sin procesar. |
| IPMODE | additional.fields.value.string_value | El valor se toma del campo IPMODE del registro sin procesar. |
| IPV6ADDR | principal.ip | El valor se toma del campo IPV6ADDR del registro sin procesar y se analiza como una dirección IP. |
| IPV6ADDRPREFIXLENGTH | additional.fields.value.string_value | El valor se toma del campo IPV6ADDRPREFIXLENGTH del registro sin procesar. |
| IPV6MTU | additional.fields.value.string_value | El valor se toma del campo IPV6MTU del registro sin procesar. |
| ITAG | additional.fields.value.string_value | El valor se toma del campo ITAG del registro sin procesar. |
| ITAGENABLED | additional.fields.value.string_value | El valor se toma del campo ITAGENABLED del registro sin procesar. |
| LBMTXDESTTYPE | additional.fields.value.string_value | El valor se toma del campo LBMTXDESTTYPE del registro sin procesar. |
| LBMTXNUMMSGS | additional.fields.value.string_value | El valor se toma del campo LBMTXNUMMSGS del registro sin procesar. |
| LBMTXVLANDROPENABLE | additional.fields.value.string_value | El valor se toma del campo LBMTXVLANDROPENABLE del registro sin procesar. |
| LBMTXVLANPRIORITY | additional.fields.value.string_value | El valor se toma del campo LBMTXVLANPRIORITY del registro sin procesar. |
| LLRESPONDERENABLED | additional.fields.value.string_value | El valor se toma del campo LLRESPONDERENABLED del registro sin procesar. |
| LLVIDLIST | additional.fields.value.string_value | El valor se toma del campo LLVIDLIST del registro sin procesar. |
| LMDUALENDEDCOUNTALLPRIOS | additional.fields.value.string_value | El valor se toma del campo LMDUALENDEDCOUNTALLPRIOS del registro sin procesar. |
| LMINPROFILEONLY | additional.fields.value.string_value | El valor se toma del campo LMINPROFILEONLY del registro sin procesar. |
| LMRXCOUNTALLPRIOS | additional.fields.value.string_value | El valor se toma del campo LMRXCOUNTALLPRIOS del registro sin procesar. |
| LMTXCOUNTALLPRIOS | additional.fields.value.string_value | El valor se toma del campo LMTXCOUNTALLPRIOS del registro sin procesar. |
| LOC | additional.fields.value.string_value | El valor se toma del campo LOC del registro sin procesar. |
| LOCN | additional.fields.value.string_value | El valor se toma del campo LOCN del registro sin procesar. |
| LOGINTIMEOUT | additional.fields.value.string_value | El valor se toma del campo LOGINTIMEOUT del registro sin procesar. |
| LOOPBACKBLOCKINGENABLED | additional.fields.value.string_value | El valor se toma del campo LOOPBACKBLOCKINGENABLED del registro sin procesar. |
| LOOPBACKCONFIG | additional.fields.value.string_value | El valor se toma del campo LOOPBACKCONFIG del registro sin procesar. |
| LOOPBACKDESTMAC | target.mac | El valor se toma del campo LOOPBACKDESTMAC del registro sin procesar y se analiza como una dirección MAC. |
| LOOPBACKDESTMACCONTROL | additional.fields.value.string_value | El valor se toma del campo LOOPBACKDESTMACCONTROL del registro sin procesar. |
| LOOPBACKINNERVLAN1 | additional.fields.value.string_value | El valor se toma del campo LOOPBACKINNERVLAN1 del registro sin procesar. |
| LOOPBACKINNERVLAN1ENABLED | additional.fields.value.string_value | El valor se toma del campo LOOPBACKINNERVLAN1ENABLED del registro sin procesar. |
| LOOPBACKINNERVLAN2 | additional.fields.value.string_value | El valor se toma del campo LOOPBACKINNERVLAN2 del registro sin procesar. |
| LOOPBACKINNERVLAN2ENABLED | additional.fields.value.string_value | El valor se toma del campo LOOPBACKINNERVLAN2ENABLED del registro sin procesar. |
| LOOPBACKINNERVLAN3 | additional.fields.value.string_value | El valor se toma del campo LOOPBACKINNERVLAN3 del registro sin procesar. |
| LOOPBACKINNERVLAN3ENABLED | additional.fields.value.string_value | El valor se toma del campo LOOPBACKINNERVLAN3ENABLED del registro sin procesar. |
| LOOPBACKOUTERITAG1 | additional.fields.value.string_value | El valor se toma del campo LOOPBACKOUTERITAG1 del registro sin procesar. |
| LOOPBACKOUTERITAG1ENABLED | additional.fields.value.string_value | El valor se toma del campo LOOPBACKOUTERITAG1ENABLED del registro sin procesar. |
| LOOPBACKOUTERITAG2 | additional.fields.value.string_value | El valor se toma del campo LOOPBACKOUTERITAG2 del registro sin procesar. |
| LOOPBACKOUTERITAG2ENABLED | additional.fields.value.string_value | El valor se toma del campo LOOPBACKOUTERITAG2ENABLED del registro sin procesar. |
| LOOPBACKOUTERITAG3 | additional.fields.value.string_value | El valor se toma del campo LOOPBACKOUTERITAG3 del registro sin procesar. |
| LOOPBACKOUTERITAG3ENABLED | additional.fields.value.string_value | El valor se toma del campo LOOPBACKOUTERITAG3ENABLED del registro sin procesar. |
| LOOPBACKOUTERVLAN1 | additional.fields.value.string_value | El valor se toma del campo LOOPBACKOUTERVLAN1 del registro sin procesar. |
| LOOPBACKOUTERVLAN1ENABLED | additional.fields.value.string_value | El valor se toma del campo LOOPBACKOUTERVLAN1ENABLED del registro sin procesar. |
| LOOPBACKOUTERVLAN2 | additional.fields.value.string_value | El valor se toma del campo LOOPBACKOUTERVLAN2 del registro sin procesar. |
| LOOPBACKOUTERVLAN2ENABLED | additional.fields.value.string_value | El valor se toma del campo LOOPBACKOUTERVLAN2ENABLED del registro sin procesar. |
| LOOPBACKOUTERVLAN3 | additional.fields.value.string_value | El valor se toma del campo LOOPBACKOUTERVLAN3 del registro sin procesar. |
| LOOPBACKOUTERVLAN3ENABLED | additional.fields.value.string_value | El valor se toma del campo LOOPBACKOUTERVLAN3ENABLED del registro sin procesar. |
| LOOPBACKSOURCEMAC | principal.mac | El valor se toma del campo LOOPBACKSOURCEMAC del registro sin procesar y se analiza como una dirección MAC. |
| LOOPBACKSWAPSADA | additional.fields.value.string_value | El valor se toma del campo LOOPBACKSWAPSADA del registro sin procesar. |
| LOOPBACKTIMER | additional.fields.value.string_value | El valor se toma del campo LOOPBACKTIMER del registro sin procesar. |
| LOWESTPRIODEFECT | additional.fields.value.string_value | El valor se toma del campo LOWESTPRIODEFECT del registro sin procesar. |
| LTMTXDESTTYPE | additional.fields.value.string_value | El valor se toma del campo LTMTXDESTTYPE del registro sin procesar. |
| LTMTXEGRESSID | metadata.product_log_id | El valor se toma del campo LTMTXEGRESSID del registro sin procesar. |
| LTMTXFLAGS | additional.fields.value.string_value | El valor se toma del campo LTMTXFLAGS del registro sin procesar. |
| LTMTXTTL | additional.fields.value.string_value | El valor se toma del campo LTMTXTTL del registro sin procesar. |
| MT | additional.fields.value.string_value | El valor se toma del campo MT del registro sin procesar. |
| MAXIMUMA2NBW | additional.fields.value.string_value | El valor se toma del campo MAXIMUMA2NBW del registro sin procesar. |
| MVAL | additional.fields.value.string_value | El valor se toma del campo MVAL del registro sin procesar. |
| NOMBRE | additional.fields.value.string_value | El valor se toma del campo NAME del registro sin procesar. |
| NC | additional.fields.value.string_value | El valor se toma del campo NC del registro sin procesar. |
| PORTEID | additional.fields.value.string_value | El valor se toma del campo PORTEID del registro sin procesar. |
| PORTLLENABLED | additional.fields.value.string_value | El valor se toma del campo PORTLLENABLED del registro sin procesar. |
| PRIMARYSERVER | target.ip | El valor se toma del campo PRIMARYSERVER del registro sin procesar y se analiza como una dirección IP. |
| PRIMARYVID | additional.fields.value.string_value | El valor se toma del campo PRIMARYVID del registro sin procesar. |
| QUEUEPROFILEID | additional.fields.value.string_value | El valor se toma del campo QUEUEPROFILEID del registro sin procesar. |
| RXSHAPEREID | additional.fields.value.string_value | El valor se toma del campo RXSHAPEREID del registro sin procesar. |
| SATRESPONDENABLED | additional.fields.value.string_value | El valor se toma del campo SATRESPONDENABLED del registro sin procesar. |
| SE | additional.fields.value.string_value | El valor se toma del campo SE del registro sin procesar. |
| SHAREDVIM | additional.fields.value.string_value | El valor se toma del campo SHAREDVIM del registro sin procesar. |
| SVLANENABLED | additional.fields.value.string_value | El valor se toma del campo SVLANENABLED del registro sin procesar. |
| SVLANID | additional.fields.value.string_value | El valor se toma del campo SVLANID del registro sin procesar. |
| SYSLOCATION | principal.location.country_or_region | El valor se toma del campo SYSLOCATION del registro sin procesar. |
| THVAL | additional.fields.value.string_value | El valor se toma del campo THVAL del registro sin procesar. |
| TIPO | additional.fields.value.string_value | El valor se toma del campo TYPE del registro sin procesar. |
| USERACCESSTYPE | additional.fields.value.string_value | El valor se toma del campo USERACCESSTYPE del registro sin procesar. |
| USERAUTHKEY | additional.fields.value.string_value | El valor se toma del campo USERAUTHKEY del registro sin procesar. |
| USERAUTHKEYLOCAL | additional.fields.value.string_value | El valor se toma del campo USERAUTHKEYLOCAL del registro sin procesar. |
| USERAUTHPROTOCOL | additional.fields.value.string_value | El valor se toma del campo USERAUTHPROTOCOL del registro sin procesar. |
| USERENGINEID | additional.fields.value.string_value | El valor se toma del campo USERENGINEID del registro sin procesar. |
| USERKEYSLOCAL | additional.fields.value.string_value | El valor se toma del campo USERKEYSLOCAL del registro sin procesar. |
| NOMBRE DE USUARIO | principal.user.userid | El valor se toma del campo USERNAME del registro sin procesar. |
| USERPRIVKEY | additional.fields.value.string_value | El valor se toma del campo USERPRIVKEY del registro sin procesar. |
| USERPRIVKEYLOCAL | additional.fields.value.string_value | El valor se toma del campo USERPRIVKEYLOCAL del registro sin procesar. |
| USERPRIVPROTOCOL | additional.fields.value.string_value | El valor se toma del campo USERPRIVPROTOCOL del registro sin procesar. |
| USERSECURITYLEVEL | additional.fields.value.string_value | El valor se toma del campo USERSECURITYLEVEL del registro sin procesar. |
| USERSECURITYNAME | principal.user.user_display_name | El valor se toma del campo USERSECURITYNAME del registro sin procesar. |
| página | principal.application | El valor se toma del campo de aplicación extraído por el analizador grok. |
| description | security_result.description | El valor se toma del campo de descripción extraído por el analizador grok. |
| metadata.description | El valor es "Backup NTP Server Failed" si el campo CT del registro sin procesar es "Backup NTP Server Failed". | |
| metadata.event_timestamp.seconds | El valor se toma del campo de marca de tiempo extraído por el analizador grok y se convierte a segundos de época. | |
| metadata.event_type | El valor se define según la siguiente lógica: - NETWORK_DHCP si network_dhcp_present es true y principal_present o target_present es true. - NETWORK_CONNECTION si target_present y principal_present son true. - USER_RESOURCE_ACCESS si user_present es true. - STATUS_UPDATE si principal_present es true. - GENERIC_EVENT en cualquier otro caso. |
|
| metadata.product_log_id | El valor se toma del campo LTMTXEGRESSID del registro sin procesar. | |
| metadata.product_name | El valor se establece como "ADVA_FSP". | |
| metadata.vendor_name | El valor se establece como "ADVA_FSP". | |
| network.application_protocol | El valor se define como "DHCP" si network_dhcp_present es true y principal_present o target_present es true. | |
| principal.hostname | El valor se toma del campo principal_hostname extraído por el analizador grok, con los guiones bajos eliminados. | |
| principal.ip | El valor se toma del campo IPADDR del registro sin procesar y se analiza como una dirección IP. | |
| timestamp.seconds | El valor se toma del campo de marca de tiempo extraído por el analizador grok y se convierte a segundos de época. |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.