Recopila registros de Microsoft IIS
En esta guía, se explica cómo puedes transferir registros de Microsoft Internet Information Services (IIS) a Google Security Operations con Bindplane.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Una instancia de Google SecOps
- Windows Server 2016 o una versión posterior con IIS instalado
- Acceso de administrador al servidor de IIS
- 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.
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. Guarda el archivo de forma segura en el sistema en el que se instalará BindPlane.
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.
Configura el registro extendido W3C de IIS
Abre el Administrador de IIS
- Haz clic en Iniciar.
- Escribe
inetmgry presiona Intro. - Se abrirá la ventana Administrador de Internet Information Services (IIS).
Método alternativo:
- Presiona Tecla de Windows + R.
- Escribe
inetmgry presiona Intro.
Navega a la configuración de registro
- En el panel Conexiones, expande el nombre de tu servidor.
- Para configurar el registro en todo el servidor (recomendado), haz lo siguiente:
- Haz clic en el nombre del servidor en el nivel raíz.
- Para configurar el registro específico del sitio, haz lo siguiente:
- Expande Sitios y, luego, haz clic en el sitio específico (por ejemplo, Sitio web predeterminado).
- En la vista de funciones, haz doble clic en Logging.
Selecciona el formato de registro extendido de W3C
- En la página Logging, en la sección Log File, haz lo siguiente:
- En el menú desplegable Formato, selecciona W3C.
- Haz clic en el botón Seleccionar campos.
Configura los campos de registro de W3C
En el diálogo W3C Logging Fields, selecciona los campos según uno de los siguientes patrones:
Patrón 1: Contexto del sitio completo con cadena de consulta (recomendado para la mayoría de las implementaciones)
Usa este patrón cuando necesites el contexto completo de la solicitud, incluidas las cadenas de referencia y de consulta para el análisis de seguridad, y cuando alojes varios sitios en un solo servidor.
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Nombre del servicio (s-sitename)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- URI Stem (cs-uri-stem)
- URI Query (cs-uri-query)
- Puerto del servidor (s-port)
- Nombre de usuario (cs-username)
- Dirección IP del cliente (c-ip)
- User Agent (cs(User-Agent))
- Referer (cs(Referer))
- Estado del protocolo (sc-status)
- Bytes enviados (sc-bytes)
- Bytes recibidos (cs-bytes)
Patrón 2: Básico con subestado y rendimiento
Usa este patrón cuando necesites códigos de error detallados (subestado, estado de Win32) y tiempos de solicitud para solucionar problemas.
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- URI Stem (cs-uri-stem)
- Puerto del servidor (s-port)
- Nombre de usuario (cs-username)
- Dirección IP del cliente (c-ip)
- User Agent (cs(User-Agent))
- Referer (cs(Referer))
- Estado del protocolo (sc-status)
- Protocol Substatus (sc-substatus)
- Estado de Win32 (sc-win32-status)
- Tiempo utilizado (time-taken)
Patrón 3: Contexto del sitio con métricas completas (recomendado para producción)
Usa este patrón cuando necesites un registro integral con identificación del sitio, errores detallados, métricas de ancho de banda y datos de rendimiento.
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Nombre del servicio (s-sitename)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- URI Stem (cs-uri-stem)
- URI Query (cs-uri-query)
- Puerto del servidor (s-port)
- Nombre de usuario (cs-username)
- Dirección IP del cliente (c-ip)
- User Agent (cs(User-Agent))
- Estado del protocolo (sc-status)
- Protocol Substatus (sc-substatus)
- Estado de Win32 (sc-win32-status)
- Bytes enviados (sc-bytes)
- Bytes recibidos (cs-bytes)
- Tiempo utilizado (time-taken)
Patrón 4: Multisitio con contexto completo
Este patrón es funcionalmente idéntico al patrón 3.
Usa este patrón si tienes varios sitios y necesitas una observabilidad completa.
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Nombre del servicio (s-sitename)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- URI Stem (cs-uri-stem)
- URI Query (cs-uri-query)
- Puerto del servidor (s-port)
- Nombre de usuario (cs-username)
- Dirección IP del cliente (c-ip)
- User Agent (cs(User-Agent))
- Estado del protocolo (sc-status)
- Protocol Substatus (sc-substatus)
- Estado de Win32 (sc-win32-status)
- Bytes enviados (sc-bytes)
- Bytes recibidos (cs-bytes)
- Tiempo utilizado (time-taken)
Patrón 5: Contexto del sitio con métricas completas (alternativo)
Este patrón es funcionalmente idéntico a los patrones 3 y 4.
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Nombre del servicio (s-sitename)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- URI Stem (cs-uri-stem)
- URI Query (cs-uri-query)
- Puerto del servidor (s-port)
- Nombre de usuario (cs-username)
- Dirección IP del cliente (c-ip)
- User Agent (cs(User-Agent))
- Estado del protocolo (sc-status)
- Protocol Substatus (sc-substatus)
- Estado de Win32 (sc-win32-status)
- Bytes enviados (sc-bytes)
- Bytes recibidos (cs-bytes)
- Tiempo utilizado (time-taken)
Patrón 6: Compatible con TLS, con subestado y rendimiento
Usa este patrón cuando necesites hacer un seguimiento de las versiones del protocolo HTTP/HTTPS (HTTP/1.1, HTTP/2, HTTP/3) para el análisis de seguridad o la solución de problemas de TLS.
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- URI Stem (cs-uri-stem)
- URI Query (cs-uri-query)
- Puerto del servidor (s-port)
- Nombre de usuario (cs-username)
- Dirección IP del cliente (c-ip)
- Versión del protocolo (cs-version)
- User Agent (cs(User-Agent))
- Referer (cs(Referer))
- Estado del protocolo (sc-status)
- Protocol Substatus (sc-substatus)
- Estado de Win32 (sc-win32-status)
- Tiempo utilizado (time-taken)
Patrón 7: Compatible con TLS sin métricas de rendimiento
Usa este patrón en los siguientes casos: Es igual que el patrón 6, pero no necesitas métricas de tiempo empleado.
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- URI Stem (cs-uri-stem)
- URI Query (cs-uri-query)
- Puerto del servidor (s-port)
- Nombre de usuario (cs-username)
- Dirección IP del cliente (c-ip)
- Versión del protocolo (cs-version)
- User Agent (cs(User-Agent))
- Referer (cs(Referer))
- Estado del protocolo (sc-status)
- Protocol Substatus (sc-substatus)
- Estado de Win32 (sc-win32-status)
Patrón 8: Mínimo con rendimiento
Usa este patrón cuando necesites un registro mínimo con métricas de rendimiento, pero no te interesen las cadenas de consulta, los sitios de referencia ni las versiones de protocolo.
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- URI Stem (cs-uri-stem)
- Puerto del servidor (s-port)
- Nombre de usuario (cs-username)
- Dirección IP del cliente (c-ip)
- User Agent (cs(User-Agent))
- Estado del protocolo (sc-status)
- Protocol Substatus (sc-substatus)
- Estado de Win32 (sc-win32-status)
- Tiempo utilizado (time-taken)
Orientación para la selección de patrones
Para la mayoría de las implementaciones, usa el patrón 1 o el patrón 3.
- Patrón 1: Es el mejor para las implementaciones centradas en la seguridad con varios sitios (incluye el sitio de referencia, la cadena de consulta y el nombre del sitio).
- Patrón 3: Es el mejor para los entornos de producción que necesitan métricas integrales (incluye el subestado, los errores de Win32, el ancho de banda, la sincronización y el nombre del sitio).
- Patrón 6/7: Úsalo si necesitas hacer un seguimiento de las versiones del protocolo HTTP (adopción de HTTP/2, solución de problemas de TLS).
- Patrón 2 de 8: Se usa para el registro mínimo con detalles de errores.
Aplicar configuración
- Haz clic en Aceptar para cerrar el cuadro de diálogo W3C Logging Fields.
- Verifica la ruta de acceso del Directorio en el que se escribirán los registros.
- Valor predeterminado:
%SystemDrive%\inetpub\logs\LogFiles
- Valor predeterminado:
- En Log File Rollover, selecciona Daily (se recomienda para la transferencia de datos de Google SecOps).
- Haz clic en Aplicar en el panel Acciones.
Verifica el registro de IIS
- Para generar tráfico de prueba en tu sitio de IIS, abre una página web en un navegador.
- Navega al directorio de registros:
C:\inetpub\logs\LogFiles\W3SVC1\ - Abre el archivo de registro más reciente (por ejemplo,
u_ex251020.log) en el Bloc de notas. Verifica que la línea
#Fields:contenga todos los campos que habilitaste.Línea de
#Fields:de ejemplo:#Fields: date time s-sitename s-computername s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-takenEjemplo de entrada de registro:
2025-10-20 14:23:15 Default_Web_Site SERVER01 192.168.1.10 GET /index.html - 80 - 203.0.113.45 Mozilla/5.0+(Windows+NT+10.0) - 200 0 0 1234 567 125
Instala el agente de BindPlane
Instala el agente de BindPlane en tu servidor de Windows según las siguientes instrucciones.
Instalación en Windows
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el comando siguiente:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Recursos de instalación adicionales
- Para obtener más opciones de instalación, consulta esta guía de instalación.
Configura el agente de BindPlane para transferir registros de IIS y enviarlos a Google SecOps
Detén el servicio de Bindplane
Antes de editar el archivo de configuración, detén el servicio:
Stop-Service "observIQ OpenTelemetry Collector"
Edita el archivo de configuración
- Ubica el archivo
config.yaml.- Ruta predeterminada:
C:\Program Files\observIQ OpenTelemetry Collector\config.yaml
- Ruta predeterminada:
- Abre el archivo con un editor de texto (por ejemplo, Bloc de notas, VS Code o Notepad++) como administrador.
Reemplaza todo el contenido por la siguiente configuración:
receivers: iis: collection_interval: 60s processors: resourcedetection: detectors: ["system"] system: hostname_sources: ["os"] normalizesums: batch: exporters: chronicle/iis: endpoint: malachiteingestion-pa.googleapis.com creds: 'C:\SecOps\ingestion-auth.json' log_type: 'IIS' override_log_type: false raw_log_field: body customer_id: '<CUSTOMER_ID>' compression: gzip service: pipelines: logs/iis: receivers: - iis processors: - resourcedetection - normalizesums - batch exporters: - chronicle/iis- Reemplaza los siguientes marcadores de posición:
creds:: Es la ruta de acceso a tu archivo de autenticación de transferencia (por ejemplo,C:\SecOps\ingestion-auth.json).customer_id:: Tu ID de cliente real de Google SecOps de la sección Obtén el ID de cliente de Google SecOps
- Reemplaza los siguientes marcadores de posición:
Reinicia el agente de Bindplane para aplicar los cambios
Después de guardar el archivo
config.yaml, reinicia el servicio de Bindplane:Start-Service "observIQ OpenTelemetry Collector"Verifica que el servicio esté en ejecución:
Get-Service "observIQ OpenTelemetry Collector"Resultado esperado:
Status Name DisplayName ------ ---- ----------- Running observiq-otel-collector observIQ OpenTelemetry Collector
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica |
|---|---|---|
| @timestamp | metadata.event_timestamp | Es la marca de tiempo del evento tal como se registró en el registro sin procesar. |
| @version | metadata.product_version | Es la versión del servidor IIS. |
| AgentDevice | additional.fields.AgentDevice.value.string_value | Es el dispositivo que generó el registro. |
| AgentLogFile | additional.fields.AgentLogFile.value.string_value | Nombre del archivo de registro. |
| ASP.NET_SessionId | network.session_id | ID de sesión del usuario. |
| c-ip | principal.ip | Es la dirección IP del cliente. |
| Canal | security_result.about.resource.attribute.labels.Channel.value | Es el canal en el que se registró el evento. |
| ChannelID | security_result.about.resource.attribute.labels.ChannelID.value | Es el ID del canal en el que se registró el evento. |
| Computadora | target.hostname | Es el nombre de host de la máquina de destino. |
| cs-bytes | network.received_bytes | Es la cantidad de bytes recibidos del cliente. |
| cs-host | principal.hostname, principal.asset.hostname | Es el nombre de host del cliente. |
| cs-method | network.http.method | Es el método HTTP que usa el cliente. |
| cs-uri-query | target.url | Es la cadena de consulta de la URL que solicitó el cliente. |
| cs-uri-stem | target.url | Es la ruta de la URL que solicitó el cliente. |
| cs-username | principal.user.user_display_name | Es el nombre de usuario del cliente. |
| cs-version | network.tls.version_protocol | Es la versión de HTTP que usa el cliente. |
| cs(Cookie) | Se usa para extraer información de las cookies. | |
| cs(Referer) | network.http.referral_url | Es la URL que remitió al cliente a la página actual. |
| cs(User-Agent) | network.http.user_agent | Es el usuario-agente del cliente. |
| csbyte | network.received_bytes | Es la cantidad de bytes recibidos del cliente. |
| cshost | principal.hostname, principal.asset.hostname | Es el nombre de host del cliente. |
| csip | principal.ip, principal.asset.ip | Es la dirección IP del cliente. |
| csmethod | network.http.method | Es el método HTTP que usa el cliente. |
| csreferer | network.http.referral_url | Es la URL que remitió al cliente a la página actual. |
| csuseragent | network.http.user_agent | Es el usuario-agente del cliente. |
| csusername | principal.user.user_display_name | Es el nombre de usuario del cliente. |
| csversion | network.tls.version_protocol | Es la versión de HTTP que usa el cliente. |
| fecha | Se usa para construir la marca de tiempo del evento si la marca de tiempo del registro sin procesar no es válida. | |
| descripción | security_result.description | Es una descripción del evento. |
| devicename | target.hostname | Es el nombre de host de la máquina de destino. |
| dst_ip | target.ip, target.asset.ip | Es la dirección IP de la máquina de destino. |
| dst_port | target.port | Número de puerto de la máquina de destino. |
| duración | Es la duración de la solicitud en milisegundos. | |
| EventEnqueuedUtcTime | additional.fields.EventEnqueuedUtcTime.value.string_value | Es la fecha y hora en que se puso en cola el evento en UTC. |
| EventID | metadata.product_log_id | Es el ID del evento. |
| EventProcessedUtcTime | additional.fields.EventProcessedUtcTime.value.string_value | Fecha y hora en que se procesó el evento en UTC. |
| EventTime | metadata.event_timestamp | Es la marca de tiempo del evento. |
| EventType | metadata.product_event_type | Es el tipo de evento. |
| file_path | target.file.full_path | Es la ruta de acceso completa del archivo involucrado en el evento. |
| FilterId | security_result.about.resource.attribute.labels.FilterId.value | Es el ID del filtro. |
| FilterKey | security_result.about.resource.attribute.labels.FilterKey.value | Es la clave del filtro. |
| FilterName | security_result.about.resource.attribute.labels.FilterName.value | Es el nombre del filtro. |
| FilterType | security_result.about.resource.attribute.labels.FilterType.value | Es el tipo de filtro. |
| host | target.hostname | Es el nombre de host de la máquina de destino. |
| host.architecture | principal.asset.hardware.cpu_platform | Es la arquitectura de la máquina anfitrión. |
| host.geo.name | additional.fields.geo_name.value.string_value | Ubicación geográfica de la máquina anfitrión. |
| host.hostname | target.hostname, target.asset.hostname | Es el nombre de host de la máquina anfitrión. |
| host.id | observer.asset_id | Es el ID de la máquina anfitrión. |
| host.ip | principal.ip, principal.asset.ip | Es la dirección IP de la máquina anfitrión. |
| host.mac | principal.mac | Es la dirección MAC de la máquina anfitrión. |
| host.os.build | additional.fields.os_build.value.string_value | Número de compilación del sistema operativo en la máquina anfitrión. |
| host.os.kernel | principal.platform_patch_level | Es la versión del kernel del sistema operativo en la máquina anfitrión. |
| host.os.name | additional.fields.os_name.value.string_value | Nombre del sistema operativo en la máquina anfitrión. |
| host.os.platform | principal.platform | Es la plataforma del sistema operativo en la máquina anfitrión. |
| host.os.version | principal.platform_version | Es la versión del sistema operativo en la máquina anfitrión. |
| http_method | network.http.method | Es el método HTTP que usa el cliente. |
| http_response | network.http.response_code | El código de respuesta HTTP. |
| http_status_code | network.http.response_code | Es el código de estado HTTP de la respuesta. |
| http_substatus | additional.fields.sc_substatus.value.string_value | Es el código de subestado HTTP de la respuesta. |
| instancia | additional.fields.instance.value.string_value | Es el ID de instancia de la tarea. |
| intermediary_devicename | intermediary.hostname, intermediary.asset.hostname | Es el nombre de host del dispositivo intermediario. |
| json_message | Es el mensaje de registro sin procesar en formato JSON. | |
| kv_fields | Se usa para extraer pares clave-valor del mensaje de registro sin procesar. | |
| LayerKey | security_result.about.resource.attribute.labels.LayerKey.value | Es la clave de la capa. |
| LayerName | security_result.about.resource.attribute.labels.LayerName.value | Es el nombre de la capa. |
| LayerId | security_result.about.resource.attribute.labels.LayerId.value | Es el ID de la capa. |
| log.file.path | target.file.full_path | Es la ruta de acceso completa del archivo de registro. |
| log.offset | metadata.product_log_id | Es el desplazamiento del evento en el archivo de registro. |
| logstash.collect.host | observer.hostname | Es el nombre de host de la máquina que recopiló el registro. |
| logstash.process.host | intermediary.hostname | Es el nombre de host de la máquina que procesó el registro. |
| logstash_json_message | Es el mensaje de registro sin procesar en formato JSON. | |
| mensaje | security_result.description | Es el mensaje de registro sin procesar. |
| ministerio | additional.fields.ministry.value.string_value | Es el ministerio asociado con el evento. |
| nombre | Es el nombre de la entidad. | |
| NewValue | additional.fields.NewValue.value.string_value | Es el valor nuevo del parámetro de configuración. |
| OldValue | additional.fields.OldValue.value.string_value | Es el valor anterior del parámetro de configuración. |
| puerto | principal.port | Número de puerto del cliente. |
| priority_code | Es el código de prioridad del mensaje de syslog. | |
| ProcessID | principal.process.pid | Es el ID del proceso que generó el evento. |
| ProviderGuid | security_result.about.resource.attribute.labels.ProviderGuid.value | Es el GUID del proveedor. |
| ProviderKey | security_result.about.resource.attribute.labels.ProviderKey.value | Es la clave del proveedor. |
| ProviderName | security_result.about.resource.attribute.labels.ProviderName.value | Es el nombre del proveedor. |
| referrer_url | network.http.referral_url | Es la URL que remitió al cliente a la página actual. |
| request_url | target.url | Es la URL que solicitó el cliente. |
| s-computername | target.hostname | Es el nombre de host de la máquina de destino. |
| s-ip | target.ip, target.asset.ip | Es la dirección IP de la máquina de destino. |
| s-port | target.port | Número de puerto de la máquina de destino. |
| s-sitename | additional.fields.sitename.value.string_value | Es el nombre del sitio. |
| sc-bytes | network.sent_bytes | Es la cantidad de bytes enviados al cliente. |
| sc-status | network.http.response_code | Es el código de estado HTTP de la respuesta. |
| sc-substatus | additional.fields.sc_substatus.value.string_value | Es el código de subestado HTTP de la respuesta. |
| sc-win32-status | Es el código de estado de Windows de la respuesta. | |
| scbyte | network.sent_bytes | Es la cantidad de bytes enviados al cliente. |
| scstatus | network.http.response_code | Es el código de estado HTTP de la respuesta. |
| gravedad, | security_result.severity | Es la gravedad del evento. |
| service.type | additional.fields.service_type.value.string_value | Es el tipo de servicio. |
| sIP | principal.ip, principal.asset.ip | Es la dirección IP del cliente. |
| sPort | principal.port | Número de puerto del cliente. |
| sSiteName | additional.fields.sitename.value.string_value | Es el nombre del sitio. |
| src_ip | principal.ip, principal.asset.ip, observer.ip | Es la dirección IP del cliente. |
| src_port | principal.port | Número de puerto del cliente. |
| sysdate | Fecha y hora del mensaje de syslog. | |
| syslog_facility | security_result.severity_details | Es la instalación del mensaje de syslog. |
| syslog_pri | Es la prioridad del mensaje de syslog. | |
| syslog_severity | security_result.severity_details | Es la gravedad del mensaje de syslog. |
| syslog_severity_code | Es el código de gravedad del mensaje de syslog. | |
| etiquetas | security_result.rule_name | Son las etiquetas asociadas al evento. |
| tarea | additional.fields.task.value.string_value | Es el nombre de la tarea. |
| hora | Se usa para construir la marca de tiempo del evento si la marca de tiempo del registro sin procesar no es válida. | |
| time-taken | Es la duración de la solicitud en milisegundos. | |
| uri_query | target.url | Es la cadena de consulta de la URL que solicitó el cliente. |
| user_agent | network.http.user_agent | Es el usuario-agente del cliente. |
| UserName | target.user.userid | Nombre de usuario de la persona. |
| UserSid | target.user.windows_sid | Es el SID de Windows del usuario. |
| Peso | security_result.about.resource.attribute.labels.Weight.value | Es el peso del filtro. |
| win32_status | Es el código de estado de Windows de la respuesta. | |
| xforwardedfor | El encabezado X-Forwarded-For, que contiene una lista de direcciones IP separadas por comas. | |
| metadata.log_type | "IIS" | |
| network.direction | "INBOUND" | |
| metadata.vendor_name | "Microsoft" | |
| metadata.product_name | "Internet Information Server" | |
| metadata.event_type | "NETWORK_HTTP", "USER_UNCATEGORIZED", "GENERIC_EVENT", "STATUS_UPDATE", "USER_LOGOUT", "USER_LOGIN" | |
| extensions.auth.type | "MACHINE" |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.