Recopila registros de Juniper Junos

Compatible con:

En este documento, se explica cómo transferir registros de Juniper Junos a Google Security Operations con Bindplane.

Junos OS de Juniper es el sistema operativo que potencia los routers, los switches y los dispositivos de seguridad de Juniper Networks. Proporciona una plataforma unificada para la administración de la infraestructura de red, el enrutamiento, la conmutación y las funciones de seguridad con un registro completo de los eventos del sistema, los eventos de seguridad y el tráfico de red. El analizador extrae campos de los registros con formato de par clave-valor y syslog de Juniper Junos. Usa grok o kv para analizar el mensaje de registro y, luego, asigna estos valores al modelo de datos unificado (UDM). También establece valores de metadatos predeterminados para la fuente y el tipo de evento.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • Windows Server 2016 o posterior, o host de Linux con systemd
  • Si se ejecuta detrás de un proxy, asegúrate de que los puertos del firewall estén abiertos según los requisitos del agente de Bindplane
  • Acceso con privilegios al dispositivo Juniper que ejecuta Junos OS

Obtén credenciales de Google SecOps para el agente de Bindplane

Para autenticar el agente de Bindplane en Google SecOps, elige uno de los siguientes métodos:

  • Implementaciones nuevas: Usa la API de Chronicle (opción 1).
  • Implementaciones heredadas: Sigue usando el archivo de autenticación de transferencia (opción 2) hasta que se descontinúe la API de Ingestion el 20 de julio de 2027.
  1. Accede a la consola deGoogle Cloud y selecciona el proyecto de Google Cloud que está vinculado a tu instancia de Google SecOps.
  2. Ve a IAM y administración > Cuentas de servicio.
  3. Haga clic en Crear cuenta de servicio.
  4. Proporciona los siguientes detalles de configuración:
    • Nombre de la cuenta de servicio: Ingresa un nombre para la cuenta (por ejemplo, bindplane-ingest).
    • Descripción de la cuenta de servicio: Ingresa una descripción (por ejemplo, Bindplane agent log ingestion).
  5. Haz clic en Crear y continuar.
  6. En la sección Otorga a esta cuenta de servicio acceso al proyecto, haz clic en Seleccionar un rol y elige Editor de Chronicle.
  7. Haz clic en Continuar y, luego, en Listo.
  8. Haz clic en la cuenta de servicio que creaste y, luego, ve a la pestaña Claves.
  9. Haz clic en Agregar clave > Crear clave nueva.
  10. Selecciona JSON y haz clic en Crear. El archivo de claves se descargará en tu computadora.
  11. Guarda el archivo de claves como ingestion-auth.json en el directorio del recopilador de Bindplane (/opt/observiq-otel-collector/ingestion-auth.json en Linux o C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json en Windows) o actualiza creds_file_path en config.yaml para que coincida con la ruta de acceso en la que lo guardas.
  12. Ve a IAM y administración > Configuración y copia el Número de proyecto. Lo necesitarás para la configuración del exportador.

Opción 2: Descarga el archivo de autenticación de transferencia (heredado)

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración > Administración de datos > Agentes de recopilación. Si estás en una plataforma solo de SIEM, ve a Configuración > Agentes de recopilación.
  3. Descarga el archivo de autenticación de transferencia.
  4. Guarda el archivo de forma segura en el sistema en el que se instalará el agente de Bindplane.

Obtén el ID de cliente de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración > Administración > Perfil. Si estás en una plataforma solo de SIEM, ve a Configuración > Perfil.
  3. Copia y guarda el ID de cliente de la sección Detalles de la organización.

Instala el agente de Bindplane

Instala el agente de Bindplane en tu sistema operativo Windows o Linux según las siguientes instrucciones.

Instalación en Windows

  1. Abre el símbolo del sistema o PowerShell como administrador.
  2. Ejecuta el comando siguiente:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Espera a que se complete la instalación.

  4. Ejecuta el siguiente comando para verificar la instalación:

    sc query observiq-otel-collector
    

El servicio debería mostrarse como RUNNING.

Instalación en Linux

  1. Abre una terminal con privilegios de raíz o sudo.
  2. Ejecuta el comando siguiente:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Espera a que se complete la instalación.

  4. Ejecuta el siguiente comando para verificar la instalación:

    sudo systemctl status observiq-otel-collector
    

El servicio debería mostrarse como active (running).

Recursos de instalación adicionales

Para obtener más opciones de instalación y solución de problemas, consulta la guía de instalación del agente de Bindplane.

Configura el agente de BindPlane para transferir syslog y enviarlo a Google SecOps

Ubica el archivo de configuración

  • Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Edita el archivo de configuración

  • Reemplaza todo el contenido de config.yaml por la siguiente configuración:

    receivers:
      udplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/chronicle_w_labels:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        customer_id: 'YOUR_CUSTOMER_ID'
        endpoint: chronicle.googleapis.com
        log_type: 'JUNIPER_JUNOS'
        raw_log_field: body
        ingestion_labels:
    
    service:
      pipelines:
        logs/source0__chronicle_w_labels-0:
          receivers:
            - udplog
          exporters:
            - chronicle/chronicle_w_labels
    

Parámetros de configuración

  • Reemplaza los marcadores de posición que se indican más abajo:

    • Configuración del receptor:

      • udplog: Usa udplog para el registro del sistema de UDP o tcplog para el registro del sistema de TCP.
      • 0.0.0.0: Dirección IP en la que se escuchará (0.0.0.0 para escuchar en todas las interfaces)
      • 514: Es el número de puerto que se escuchará (puerto de syslog estándar).
    • Configuración del exportador:

      • creds_file_path: Ruta de acceso completa al archivo de claves JSON de la cuenta de servicio (opción 1):
        • Linux: /opt/observiq-otel-collector/ingestion-auth.json
        • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • YOUR_CUSTOMER_ID: Es el ID de cliente de la sección Obtén el ID de cliente.
      • location: Reemplaza <LOCATION> por la región de tu instancia de Google SecOps (por ejemplo, us, europe o asia-southeast1). El exportador agrega el prefijo chronicle.googleapis.com con este valor. Consulta Extremos regionales para obtener la lista completa.
      • project: Reemplaza <PROJECT_NUMBER> por el número de proyecto de IAM y administración > Configuración.
      • endpoint: Mantén la configuración como chronicle.googleapis.com.
      • log_type: Tipo de registro exactamente como aparece en Chronicle (JUNIPER_JUNOS)

Exportador de la API de transferencia heredada

  • Si usas el archivo de autenticación de transferencia de la opción 2, reemplaza el bloque exporters por lo siguiente. Establece creds_file_path en la ruta de acceso al archivo de autenticación de transferencia y, si tu instancia está fuera de EE.UU., reemplaza malachiteingestion-pa.googleapis.com por tu extremo regional (por ejemplo, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/chronicle_w_labels:
        compression: gzip
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        customer_id: 'YOUR_CUSTOMER_ID'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: 'JUNIPER_JUNOS'
        raw_log_field: body
        ingestion_labels:
    

Guarda el archivo de configuración

  • Después de editarlo, guarda el archivo:
    • Linux: Presiona Ctrl+O, luego Enter y, por último, Ctrl+X
    • Windows: Haz clic en Archivo > Guardar.

Reinicia el agente de Bindplane para aplicar los cambios.

  • Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:

    sudo systemctl restart observiq-otel-collector
    
    1. Verifica que el servicio esté en ejecución:

        sudo systemctl status observiq-otel-collector
      
    2. Revisa los registros en busca de errores:

        sudo journalctl -u observiq-otel-collector -f
      
  • Para reiniciar el agente de Bindplane en Windows, elige una de las siguientes opciones:

    • Símbolo del sistema o PowerShell como administrador:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Consola de servicios:

      1. Presiona Win+R, escribe services.msc y presiona Intro.
      2. Busca observIQ OpenTelemetry Collector.
      3. Haz clic con el botón derecho y selecciona Reiniciar.

      4. Verifica que el servicio esté en ejecución:

        sc query observiq-otel-collector
        
      5. Revisa los registros en busca de errores:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

Configura el reenvío de Syslog en Juniper Junos

  1. Conéctate al dispositivo Juniper a través de SSH o la consola.
  2. Ingresa al modo de configuración:

    configure
    
  3. Configura el host de syslog con los siguientes comandos:

    set system syslog host BINDPLANE_IP any info
    set system syslog host BINDPLANE_IP port 514
    set system syslog host BINDPLANE_IP facility-override local7
    set system syslog host BINDPLANE_IP log-prefix JUNOS
    
    • Reemplaza BINDPLANE_IP por la dirección IP del host del agente de Bindplane.
  4. Configura fuentes de registro adicionales (opcional, pero recomendado):

    set system syslog host BINDPLANE_IP authorization info
    set system syslog host BINDPLANE_IP daemon info
    set system syslog host BINDPLANE_IP kernel info
    set system syslog host BINDPLANE_IP firewall any
    set system syslog host BINDPLANE_IP interactive-commands info
    
  5. Configura los datos de syslog estructurados (opcional para un análisis mejorado):

    set system syslog host BINDPLANE_IP structured-data
    
  6. Confirma la configuración:

    commit and-quit
    
  7. Verifica la configuración de syslog:

    show system syslog host BINDPLANE_IP
    
  8. Verifica que se estén enviando mensajes de syslog revisando los registros del agente de Bindplane.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
DPT target.port Es el puerto de destino de la conexión de red, convertido en un número entero.
DST target.ip Es la dirección IP de destino de la conexión de red.
FLAG additional.fields{}.key: "FLAG", additional.fields{}.value.string_value: Valor de FLAG Es la marca de TCP asociada con la conexión de red.
ID additional.fields{}.key: "ID", additional.fields{}.value.string_value: Valor del ID El campo de identificación de IP
IN additional.fields{}.key: "IN", additional.fields{}.value.string_value: Valor de IN Es la interfaz de red entrante.
LEN additional.fields{}.key: "LEN", additional.fields{}.value.string_value: Valor de LEN Es la longitud del paquete IP.
MAC principal.mac Es la dirección MAC extraída del campo MAC.
OUT additional.fields{}.key: "OUT", additional.fields{}.value.string_value: Valor de OUT Es la interfaz de red saliente.
PREC additional.fields{}.key: "PREC", additional.fields{}.value.string_value: Valor de PREC El campo Precedencia en el encabezado de IP.
PROTO network.ip_protocol Es el protocolo IP que se usa en la conexión de red.
RES additional.fields{}.key: "RES", additional.fields{}.value.string_value: Valor de RES Es un campo reservado en el encabezado de TCP.
SPT principal.port Es el puerto de origen de la conexión de red, convertido en un número entero.
SRC principal.ip Es la dirección IP de origen de la conexión de red.
TOS additional.fields{}.key: "TOS", additional.fields{}.value.string_value: Valor de TOS El campo Tipo de servicio en el encabezado de IP.
TTL network.dns.additional.ttl Es el valor de tiempo de actividad, convertido en un número entero sin signo.
URGP additional.fields{}.key: "URGP", additional.fields{}.value.string_value: Valor de URGP Es el campo de puntero de urgencia en el encabezado de TCP.
WINDOW additional.fields{}.key: "WINDOW_SIZE", additional.fields{}.value.string_value: Valor de WINDOW Es el tamaño de la ventana de TCP.
acción security_result.action Es la acción que realiza el firewall, extraída del mensaje de CEF.
agt observer.ip Es la dirección IP del agente.
amac target.mac Es la dirección MAC del destino, convertida a minúsculas y con los guiones reemplazados por dos puntos.
app target.application Es la aplicación involucrada en el evento.
artz observer.zone Es la zona horaria del observador.
atz target.location.country_or_region Es la zona horaria de destino.
categoryBehavior additional.fields{}.key: "Category Behavior", additional.fields{}.value.string_value: Valor de categoryBehavior sin barras El comportamiento de la categoría.
categoryDeviceGroup additional.fields{}.key: "Category Device Group", additional.fields{}.value.string_value: Valor de categoryDeviceGroup sin barras Es la categoría del grupo de dispositivos.
categoryObject additional.fields{}.key: "Category Object", additional.fields{}.value.string_value: Valor de categoryObject sin barras Es el objeto de categoría.
categoryOutcome additional.fields{}.key: "Category Outcome", additional.fields{}.value.string_value: Valor de categoryOutcome sin barras Es el resultado de la categoría.
categorySignificance additional.fields{}.key: "category Significance", additional.fields{}.value.string_value: Valor de categorySignificance La importancia de la categoría.
comando target.process.command_line El comando se ejecutó.
cs1Label additional.fields{}.key: cs1Label, additional.fields{}.value.string_value: Valor del campo CEF correspondiente Etiqueta y valor del campo de cadena personalizado 1 del mensaje de CEF.
cs2Label additional.fields{}.key: cs2Label, additional.fields{}.value.string_value: Valor del campo CEF correspondiente Etiqueta y valor del campo de cadena personalizado 2 del mensaje de CEF.
cs3Label additional.fields{}.key: cs3Label, additional.fields{}.value.string_value: Valor del campo CEF correspondiente Etiqueta y valor del campo de cadena personalizado 3 del mensaje de CEF.
cs4Label additional.fields{}.key: cs4Label, additional.fields{}.value.string_value: Valor del campo CEF correspondiente Etiqueta y valor del campo de cadena personalizado 4 del mensaje de CEF.
cs5Label additional.fields{}.key: cs5Label, additional.fields{}.value.string_value: Valor del campo CEF correspondiente Etiqueta y valor del campo de cadena personalizado 5 del mensaje de CEF.
cs6Label additional.fields{}.key: cs6Label, additional.fields{}.value.string_value: Valor del campo CEF correspondiente Etiqueta y valor del campo de cadena personalizado 6 del mensaje de CEF.
dhost target.hostname Es el nombre de host de destino.
deviceCustomString1 additional.fields{}.key: cs1Label, additional.fields{}.value.string_value: Value of deviceCustomString1 Cadena personalizada del dispositivo 1.
deviceCustomString2 additional.fields{}.key: cs2Label, additional.fields{}.value.string_value: Value of deviceCustomString2 Es la cadena personalizada 2 del dispositivo.
deviceCustomString3 additional.fields{}.key: cs3Label, additional.fields{}.value.string_value: Valor de deviceCustomString3 Cadena personalizada 3 del dispositivo.
deviceCustomString4 additional.fields{}.key: cs4Label, additional.fields{}.value.string_value: Value of deviceCustomString4 Cadena personalizada 4 del dispositivo.
deviceCustomString5 additional.fields{}.key: cs5Label, additional.fields{}.value.string_value: Value of deviceCustomString5 Es la cadena personalizada 5 del dispositivo.
deviceCustomString6 additional.fields{}.key: cs6Label, additional.fields{}.value.string_value: Value of deviceCustomString6 Es la cadena personalizada 6 del dispositivo.
deviceDirection network.direction La dirección del tráfico de red.
deviceEventClassId additional.fields{}.key: "eventId", additional.fields{}.value.string_value: Value of deviceEventClassId Es el ID de la clase de evento del dispositivo.
deviceFacility observer.product.subproduct La instalación del dispositivo.
deviceProcessName about.process.command_line Es el nombre del proceso del dispositivo.
deviceSeverity security_result.severity La gravedad del dispositivo.
deviceTimeZone observer.zone La zona horaria del dispositivo.
deviceVendor metadata.vendor_name Es el proveedor del dispositivo.
deviceVersion metadata.product_version Es la versión del dispositivo.
dpt target.port Es el puerto de destino.
DST target.ip Es la dirección IP de destino.
duser target.user.user_display_name Es el usuario de destino.
eventId additional.fields{}.key: "eventId", additional.fields{}.value.string_value: Value of eventId ID del evento.
event_time metadata.event_timestamp Es la hora en que ocurrió el evento, analizada a partir del mensaje.
firewall_action security_result.action_details La acción de firewall que se realizó.
host principal.hostname, intermediary.hostname Es el nombre de host del dispositivo que genera el registro. Se usa para el principal y el intermediario en diferentes casos.
msg security_result.summary Es el mensaje asociado con el evento, que se usa como resumen del resultado de seguridad.
nombre metadata.product_event_type Es el nombre del evento.
process_name additional.fields{}.key: "process_name", additional.fields{}.value.string_value: Value of process_name Es el nombre del proceso.
p_id target.process.pid Es el ID de proceso, convertido en una cadena.
sha256 principal.process.file.sha256 Es el hash SHA256 de un archivo, extraído de la información de la clave SSH2.
shost principal.hostname Es el nombre de host de origen.
source_address principal.ip La dirección IP de origen.
source_port principal.port Es el puerto de origen, convertido en un número entero.
src principal.ip La dirección IP de origen.
src_ip principal.ip La dirección IP de origen.
src_port principal.port Es el puerto de origen, convertido en un número entero.
ssh2 security_result.detection_fields{}.key: "ssh2", security_result.detection_fields{}.value: Value of ssh2 Información de la clave SSH2.
subtype metadata.product_event_type Es el subtipo del evento.
task_summary security_result.description Es el resumen de la tarea, que se usa como descripción del resultado de seguridad.
timestamp metadata.event_timestamp Es la marca de tiempo del evento.
usuario target.user.userid Es el usuario asociado con el evento.
nombre de usuario principal.user.userid Es el nombre de usuario asociado con el evento.
user_name principal.user.userid Es el nombre de usuario.
metadata.vendor_name Está codificado como "Juniper Firewall". Está codificado como "Juniper Firewall". Está codificado como "JUNIPER_JUNOS". Se determina por la lógica del analizador según el contenido del registro. Se establece de forma predeterminada en "STATUS_UPDATE" si no es un mensaje de CEF y no se identifica ningún otro tipo de evento específico. Establece el valor en "NETWORK_HTTP" para los mensajes de CEF. Si no hay un campo desc, este campo se completa con el message_description extraído del mensaje de registro sin procesar.
protocol-name network.ip_protocol Asignado desde el registro de cambios
application_name target.application Asignado desde el registro de cambios
desc sec_result.summary Asignado desde el registro de cambios
mac-address principal.mac Asignado desde el registro de cambios

Registro de cambios

Consulta el registro de cambios de este analizador

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.