Recopila registros de Juniper Junos

Se admite en los siguientes sistemas operativos:

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 impulsa los routers, los conmutadores 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 integral 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 clave-valor y de syslog de Juniper Junos. Utiliza grok o kv para analizar el mensaje de registro y, luego, asigna estos valores al Modelo de datos unificados (UDM). También establece valores de metadatos predeterminados para el origen y el tipo del evento.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

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

Obtén el archivo de autenticación de transferencia de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recopilación.
  3. Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará BindPlane.

Obtén el ID de cliente de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > 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. Ejecute el siguiente comando para verificar la instalación:

    sc query observiq-otel-collector
    

El servicio debe mostrarse como RUNNING.

Instalación en Linux

  1. Abre una terminal con privilegios de administrador 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. Ejecute el siguiente comando para verificar la instalación:

    sudo systemctl status observiq-otel-collector
    

El servicio debería mostrarse como activo (en ejecución).

Recursos de instalación adicionales

Para obtener más opciones de instalación y solucionar 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 /etc/bindplane-agent/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 con la siguiente configuración:

    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: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.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 UDP o tcplog para el registro del sistema TCP.
      • 0.0.0.0: Dirección IP en la que se realizará la escucha (0.0.0.0 para escuchar en todas las interfaces)
      • 514: Número de puerto en el que se debe escuchar (puerto syslog estándar)
    • Configuración del exportador:

      • creds_file_path: Ruta de acceso completa al archivo de autenticación de la transferencia:
        • Linux: /etc/bindplane-agent/ingestion-auth.json
        • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • YOUR_CUSTOMER_ID: ID de cliente de la sección Obtén el ID de cliente
      • endpoint: URL del extremo regional:
        • EE.UU.: malachiteingestion-pa.googleapis.com
        • Europa: europe-malachiteingestion-pa.googleapis.com
        • Asia: asia-southeast1-malachiteingestion-pa.googleapis.com
        • Consulta Extremos regionales para obtener la lista completa.
      • log_type: Tipo de registro tal como aparece en Chronicle (JUNIPER_JUNOS)

Guarda el archivo de configuración

  • Después de editarlo, guarda el archivo:
    • Linux: Presiona Ctrl+O, luego Enter y, después, 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 Services:

      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 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 estructurados de syslog (opcional para el 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. Para verificar que se envíen los mensajes de syslog, consulta 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 a la conexión de red.
ID additional.fields{}.key: "ID", additional.fields{}.value.string_value: Value of ID Es el campo de identificación de IP.
IN additional.fields{}.key: "IN", additional.fields{}.value.string_value: Value of 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.
OCT 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 Es el campo de precedencia en el encabezado 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 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 las condiciones del servicio Es el campo Tipo de servicio en el encabezado IP.
TTL network.dns.additional.ttl Es el valor de Time To Live, 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 realizó el firewall, extraída del mensaje de CEF.
agt observer.ip Es la dirección IP del agente.
amac target.mac Dirección MAC del objetivo, convertida en minúsculas y con 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 Zona horaria objetivo.
categoryBehavior additional.fields{}.key: "Category Behavior", additional.fields{}.value.string_value: Valor de categoryBehavior sin barras Es el comportamiento de la categoría.
categoryDeviceGroup additional.fields{}.key: "Category Device Group", additional.fields{}.value.string_value: Valor de categoryDeviceGroup sin barras Es el grupo de dispositivos de la categoría.
categoryObject additional.fields{}.key: "Category Object", additional.fields{}.value.string_value: Valor de categoryObject con las barras quitadas Es el objeto de categoría.
categoryOutcome additional.fields{}.key: "Category Outcome", additional.fields{}.value.string_value: Valor de categoryOutcome con las barras quitadas Es el resultado de la categoría.
categorySignificance additional.fields{}.key: "category Significance", additional.fields{}.value.string_value: Valor de categorySignificance Es la importancia de la categoría.
comando target.process.command_line Es el comando que 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 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 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 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 Es la cadena personalizada 1 del dispositivo.
deviceCustomString2 additional.fields{}.key: cs2Label, additional.fields{}.value.string_value: Value of deviceCustomString2 Es la cadena personalizada del dispositivo 2.
deviceCustomString3 additional.fields{}.key: cs3Label, additional.fields{}.value.string_value: Value of deviceCustomString3 Es la cadena personalizada del dispositivo 3.
deviceCustomString4 additional.fields{}.key: cs4Label, additional.fields{}.value.string_value: Value of deviceCustomString4 Es la cadena personalizada del dispositivo 4.
deviceCustomString5 additional.fields{}.key: cs5Label, additional.fields{}.value.string_value: Value of deviceCustomString5 Es la cadena personalizada del dispositivo 5.
deviceCustomString6 additional.fields{}.key: cs6Label, additional.fields{}.value.string_value: Value of deviceCustomString6 Es la cadena personalizada del dispositivo 6.
deviceDirection network.direction Es 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 Es la instalación del dispositivo.
deviceProcessName about.process.command_line Es el nombre del proceso del dispositivo.
deviceSeverity security_result.severity Es la gravedad del dispositivo.
deviceTimeZone observer.zone Zona horaria del dispositivo.
deviceVendor metadata.vendor_name Es el proveedor del dispositivo.
deviceVersion metadata.product_version 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 Es el ID del evento.
event_time metadata.event_timestamp Es la fecha y hora en que ocurrió el evento, analizada a partir del mensaje.
firewall_action security_result.action_details Es la acción del firewall que se llevó a cabo.
host principal.hostname, intermediary.hostname Es el nombre de host del dispositivo que genera el registro. Se usa tanto para el principal como para el intermediario en diferentes casos.
msg security_result.summary Es el mensaje asociado al 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 del 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 Es la dirección IP de origen.
source_port principal.port Es el puerto de origen, convertido en un número entero.
src principal.ip Es la dirección IP de origen.
src_ip principal.ip Es 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 Es la 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 al evento.
nombre de usuario principal.user.userid Es el nombre de usuario asociado al 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 según la lógica del analizador basada en el contenido del registro. El valor predeterminado es "STATUS_UPDATE" si no es un mensaje de CEF y no se identifica ningún otro tipo de evento específico. Se establece 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.

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