收集 Microsoft IIS 日志

支持的平台:

本指南介绍了如何使用 Bindplane 将 Microsoft Internet Information Services (IIS) 日志注入到 Google Security Operations。

准备工作

请确保满足以下前提条件:

  • Google SecOps 实例
  • 安装了 IIS 的 Windows Server 2016 或更高版本
  • 对 IIS 服务器的管理员访问权限
  • 如果通过代理运行,请确保防火墙端口已根据 Bindplane 代理要求打开

获取 Google SecOps 注入身份验证文件

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 收集代理
  3. 下载注入身份验证文件。将文件安全地保存在将要安装 Bindplane 的系统上。

获取 Google SecOps 客户 ID

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 个人资料
  3. 复制并保存组织详细信息部分中的客户 ID

配置 IIS W3C 扩展日志记录

打开 IIS 管理器

  1. 点击开始
  2. 输入 inetmgr 并按 Enter 键。
  3. 系统会打开 Internet Information Services (IIS) 管理器窗口。

替代方法

  1. Windows 键 + R
  2. 输入 inetmgr 并按 Enter 键。
  1. 连接窗格中,展开您的服务器名称。
  2. 如需配置服务器范围的日志记录(推荐):
    • 点击根级别的服务器名称
  3. 如需配置特定于网站的日志记录,请执行以下操作:
    • 展开网站,然后点击具体网站(例如,默认网站)。
  4. 功能视图中,双击日志记录

选择 W3C 扩展日志格式

  1. 日志记录页面上的日志文件部分中:
    • 格式下拉菜单中,选择 W3C
  2. 点击选择字段按钮。

配置 W3C 日志记录字段

W3C 日志记录字段对话框中,根据以下模式之一选择字段:

如果您需要完整的请求上下文(包括引荐来源网址和查询字符串)以进行安全分析,并且您在一台服务器上托管多个网站,请使用此模式。

按以下确切顺序启用这些字段:

  1. Date(日期)
  2. 时间(时间)
  3. 服务名称 (s-sitename)
  4. 服务器 IP 地址 (s-ip)
  5. 方法(cs-method)
  6. URI 词干 (cs-uri-stem)
  7. URI 查询 (cs-uri-query)
  8. 服务器端口(s-port)
  9. 用户名 (cs-username)
  10. 客户端 IP 地址 (c-ip)
  11. 用户代理 (cs(User-Agent))
  12. 引荐来源网址 (cs(Referer))
  13. 协议状态 (sc-status)
  14. 发送的字节数 (sc-bytes)
  15. 接收的字节数 (cs-bytes)

模式 2:基本模式,包含子状态和效果

如果您需要详细的错误代码(子状态、Win32 状态)和请求时间来排查问题,请使用此模式。

按以下确切顺序启用这些字段:

  1. Date(日期)
  2. 时间(时间)
  3. 服务器 IP 地址 (s-ip)
  4. 方法(cs-method)
  5. URI 词干 (cs-uri-stem)
  6. 服务器端口(s-port)
  7. 用户名 (cs-username)
  8. 客户端 IP 地址 (c-ip)
  9. 用户代理 (cs(User-Agent))
  10. 引荐来源网址 (cs(Referer))
  11. 协议状态 (sc-status)
  12. 协议子状态 (sc-substatus)
  13. Win32 状态 (sc-win32-status)
  14. 所用时间 (time-taken)

如果您需要包含网站标识、详细错误、带宽指标和性能数据的全面日志记录,请使用此模式。

按以下确切顺序启用这些字段:

  1. Date(日期)
  2. 时间(时间)
  3. 服务名称 (s-sitename)
  4. 服务器 IP 地址 (s-ip)
  5. 方法(cs-method)
  6. URI 词干 (cs-uri-stem)
  7. URI 查询 (cs-uri-query)
  8. 服务器端口(s-port)
  9. 用户名 (cs-username)
  10. 客户端 IP 地址 (c-ip)
  11. 用户代理 (cs(User-Agent))
  12. 协议状态 (sc-status)
  13. 协议子状态 (sc-substatus)
  14. Win32 状态 (sc-win32-status)
  15. 发送的字节数 (sc-bytes)
  16. 接收的字节数 (cs-bytes)
  17. 所用时间 (time-taken)

模式 4:具有完整上下文的多网站

此模式在功能上与模式 3 完全相同。

如果您有多个网站,并且需要全面的可观测性,请使用此模式。

按以下确切顺序启用这些字段:

  1. Date(日期)
  2. 时间(时间)
  3. 服务名称 (s-sitename)
  4. 服务器 IP 地址 (s-ip)
  5. 方法(cs-method)
  6. URI 词干 (cs-uri-stem)
  7. URI 查询 (cs-uri-query)
  8. 服务器端口(s-port)
  9. 用户名 (cs-username)
  10. 客户端 IP 地址 (c-ip)
  11. 用户代理 (cs(User-Agent))
  12. 协议状态 (sc-status)
  13. 协议子状态 (sc-substatus)
  14. Win32 状态 (sc-win32-status)
  15. 发送的字节数 (sc-bytes)
  16. 接收的字节数 (cs-bytes)
  17. 所用时间 (time-taken)

模式 5:包含完整指标的网站上下文(替代)

此模式在功能上与模式 3 和 4 完全相同。

按以下确切顺序启用这些字段:

  1. Date(日期)
  2. 时间(时间)
  3. 服务名称 (s-sitename)
  4. 服务器 IP 地址 (s-ip)
  5. 方法(cs-method)
  6. URI 词干 (cs-uri-stem)
  7. URI 查询 (cs-uri-query)
  8. 服务器端口(s-port)
  9. 用户名 (cs-username)
  10. 客户端 IP 地址 (c-ip)
  11. 用户代理 (cs(User-Agent))
  12. 协议状态 (sc-status)
  13. 协议子状态 (sc-substatus)
  14. Win32 状态 (sc-win32-status)
  15. 发送的字节数 (sc-bytes)
  16. 接收的字节数 (cs-bytes)
  17. 所用时间 (time-taken)

模式 6:具有子状态和性能的 TLS 感知

当您需要跟踪 HTTP/HTTPS 协议版本(HTTP/1.1、HTTP/2、HTTP/3)以进行安全分析或 TLS 故障排除时,请使用此模式。

按以下确切顺序启用这些字段:

  1. Date(日期)
  2. 时间(时间)
  3. 服务器 IP 地址 (s-ip)
  4. 方法(cs-method)
  5. URI 词干 (cs-uri-stem)
  6. URI 查询 (cs-uri-query)
  7. 服务器端口(s-port)
  8. 用户名 (cs-username)
  9. 客户端 IP 地址 (c-ip)
  10. 协议版本 (cs-version)
  11. 用户代理 (cs(User-Agent))
  12. 引荐来源网址 (cs(Referer))
  13. 协议状态 (sc-status)
  14. 协议子状态 (sc-substatus)
  15. Win32 状态 (sc-win32-status)
  16. 所用时间 (time-taken)

模式 7:支持 TLS 但没有性能指标

在以下情况下使用此模式:与模式 6 相同,但您不需要“完成时间”指标。

按以下确切顺序启用这些字段:

  1. Date(日期)
  2. 时间(时间)
  3. 服务器 IP 地址 (s-ip)
  4. 方法(cs-method)
  5. URI 词干 (cs-uri-stem)
  6. URI 查询 (cs-uri-query)
  7. 服务器端口(s-port)
  8. 用户名 (cs-username)
  9. 客户端 IP 地址 (c-ip)
  10. 协议版本 (cs-version)
  11. 用户代理 (cs(User-Agent))
  12. 引荐来源网址 (cs(Referer))
  13. 协议状态 (sc-status)
  14. 协议子状态 (sc-substatus)
  15. Win32 状态 (sc-win32-status)

模式 8:极简风格,兼具性能

如果您需要包含效果指标的最低限度日志记录,但不在意查询字符串、引荐来源网址或协议版本,请使用此模式。

按以下确切顺序启用这些字段:

  1. Date(日期)
  2. 时间(时间)
  3. 服务器 IP 地址 (s-ip)
  4. 方法(cs-method)
  5. URI 词干 (cs-uri-stem)
  6. 服务器端口(s-port)
  7. 用户名 (cs-username)
  8. 客户端 IP 地址 (c-ip)
  9. 用户代理 (cs(User-Agent))
  10. 协议状态 (sc-status)
  11. 协议子状态 (sc-substatus)
  12. Win32 状态 (sc-win32-status)
  13. 所用时间 (time-taken)

模式选择指南

对于大多数部署,请使用模式 1 或模式 3。

  • 模式 1:最适合注重安全性的部署,包含多个网站(包括引荐来源网址、查询字符串、网站名称)。
  • 模式 3:最适合需要全面指标(包括子状态、Win32 错误、带宽、时间、网站名称)的生产环境
  • 模式 6/7:如果您需要跟踪 HTTP 协议版本(HTTP/2 采用情况、TLS 故障排除),请使用此模式。
  • 模式 2/8:用于记录最少的日志,但包含错误详情。

应用配置

  1. 点击确定以关闭 W3C 日志记录字段对话框。
  2. 验证日志将写入的目录路径。
    • 默认值:%SystemDrive%\inetpub\logs\LogFiles
  3. 日志文件轮换下,选择每天(建议用于 Google SecOps 提取)。
  4. 操作窗格中,点击应用

验证 IIS 日志记录

  1. 通过在浏览器中打开网页,为您的 IIS 网站生成测试流量。
  2. 前往日志目录:C:\inetpub\logs\LogFiles\W3SVC1\
  3. 在记事本中打开最新的日志文件(例如 u_ex251020.log)。
  4. 验证 #Fields: 行是否包含您启用的所有字段。

    • 示例 #Fields: 行:

      #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-taken
      
    • 日志条目示例:

      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
      

安装 Bindplane 代理

按照以下说明在 Windows 服务器上安装 Bindplane 代理。

Windows 安装

  1. 以管理员身份打开命令提示符PowerShell
  2. 运行以下命令:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

其他安装资源

  • 如需了解其他安装选项,请参阅此安装指南

配置 Bindplane 代理以注入 IIS 日志并将其发送到 Google SecOps

停止 Bindplane 服务

  • 在修改配置文件之前,请先停止服务:

    Stop-Service "observIQ OpenTelemetry Collector"
    

修改配置文件

  1. 找到 config.yaml 文件。
    • 默认路径:C:\Program Files\observIQ OpenTelemetry Collector\config.yaml
  2. 使用文本编辑器(例如记事本、VS Code 或 Notepad++)以管理员身份打开该文件。
  3. 将整个内容替换为以下配置:

    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
    
    • 替换以下占位符:
      • creds: - 您的提取身份验证文件的路径(例如,C:\SecOps\ingestion-auth.json)。
      • customer_id: - 获取 Google SecOps 客户 ID 部分中的实际 Google SecOps 客户 ID。

重启 Bindplane 代理以应用更改

  • 保存 config.yaml 文件后,重启 Bindplane 服务:

    Start-Service "observIQ OpenTelemetry Collector"
    
  • 验证服务是否正在运行:

    Get-Service "observIQ OpenTelemetry Collector"
    
  • 预期输出:

    Status   Name                               DisplayName
    ------   ----                               -----------
    Running  observiq-otel-collector            observIQ OpenTelemetry Collector
    

UDM 映射表

日志字段 UDM 映射 逻辑
@timestamp metadata.event_timestamp 原始日志中记录的事件时间戳。
@version metadata.product_version IIS 服务器的版本。
AgentDevice additional.fields.AgentDevice.value.string_value 生成日志的设备。
AgentLogFile additional.fields.AgentLogFile.value.string_value 日志文件的名称。
ASP.NET_SessionId network.session_id 用户的会话 ID。
c-ip principal.ip 客户端的 IP 地址。
渠道 security_result.about.resource.attribute.labels.Channel.value 记录事件的渠道。
ChannelID security_result.about.resource.attribute.labels.ChannelID.value 记录相应事件的渠道的 ID。
计算机 target.hostname 目标机器的主机名。
cs-bytes network.received_bytes 从客户端接收的字节数。
cs-host principal.hostname、principal.asset.hostname 客户端的主机名。
cs-method network.http.method 客户端使用的 HTTP 方法。
cs-uri-query target.url 客户端请求的网址的查询字符串。
cs-uri-stem target.url 客户端所请求网址的路径。
cs-username principal.user.user_display_name 客户端的用户名。
cs-version network.tls.version_protocol 客户端使用的 HTTP 版本。
cs(Cookie) 用于提取 Cookie 信息。
cs(Referer) network.http.referral_url 将客户端引荐到当前网页的网址。
cs(User-Agent) network.http.user_agent 客户端的用户代理。
csbyte network.received_bytes 从客户端接收的字节数。
cshost principal.hostname、principal.asset.hostname 客户端的主机名。
csip principal.ip、principal.asset.ip 客户端的 IP 地址。
csmethod network.http.method 客户端使用的 HTTP 方法。
csreferer network.http.referral_url 将客户端引荐到当前网页的网址。
csuseragent network.http.user_agent 客户端的用户代理。
csusername principal.user.user_display_name 客户端的用户名。
csversion network.tls.version_protocol 客户端使用的 HTTP 版本。
日期 用于在原始日志时间戳无效时构建事件时间戳。
说明 security_result.description 活动说明。
devicename target.hostname 目标机器的主机名。
dst_ip target.ip、target.asset.ip 目标机器的 IP 地址。
dst_port target.port 目标机器的端口号。
时长 请求的时长(以毫秒为单位)。
EventEnqueuedUtcTime additional.fields.EventEnqueuedUtcTime.value.string_value 相应事件在队列中排队的时间(以世界协调时间 [UTC] 为单位)。
EventID metadata.product_log_id 活动的 ID。
EventProcessedUtcTime additional.fields.EventProcessedUtcTime.value.string_value 事件处理时间(世界协调时间)。
EventTime metadata.event_timestamp 事件的时间戳。
EventType metadata.product_event_type 事件的类型。
file_path target.file.full_path 涉及相应事件的文件的完整路径。
FilterId security_result.about.resource.attribute.labels.FilterId.value 过滤器的 ID。
FilterKey security_result.about.resource.attribute.labels.FilterKey.value 过滤器的键。
FilterName security_result.about.resource.attribute.labels.FilterName.value 过滤器的名称。
FilterType security_result.about.resource.attribute.labels.FilterType.value 过滤器的类型。
主机 target.hostname 目标机器的主机名。
host.architecture principal.asset.hardware.cpu_platform 宿主机的架构。
host.geo.name additional.fields.geo_name.value.string_value 宿主机的地理位置。
host.hostname target.hostname、target.asset.hostname 宿主机的主机名。
host.id observer.asset_id 宿主机的 ID。
host.ip principal.ip、principal.asset.ip 宿主机的 IP 地址。
host.mac principal.mac 宿主机设备的 MAC 地址。
host.os.build additional.fields.os_build.value.string_value 宿主机上操作系统的 build 编号。
host.os.kernel principal.platform_patch_level 宿主机上操作系统的内核版本。
host.os.name additional.fields.os_name.value.string_value 宿主机上操作系统的名称。
host.os.platform principal.platform 宿主机上操作系统的平台。
host.os.version principal.platform_version 宿主机上的操作系统版本。
http_method network.http.method 客户端使用的 HTTP 方法。
http_response network.http.response_code HTTP 响应代码。
http_status_code network.http.response_code 相应请求的 HTTP 状态代码。
http_substatus additional.fields.sc_substatus.value.string_value 响应的 HTTP 子状态代码。
实例 additional.fields.instance.value.string_value 任务的实例 ID。
intermediary_devicename intermediary.hostname、intermediary.asset.hostname 中间设备的 hostname。
json_message JSON 格式的原始日志消息。
kv_fields 用于从原始日志消息中提取键值对。
LayerKey security_result.about.resource.attribute.labels.LayerKey.value 图层的键。
LayerName security_result.about.resource.attribute.labels.LayerName.value 图层的名称。
LayerId security_result.about.resource.attribute.labels.LayerId.value 图层的 ID。
log.file.path target.file.full_path 日志文件的完整路径。
log.offset metadata.product_log_id 相应事件在日志文件中的偏移量。
logstash.collect.host observer.hostname 收集日志的机器的主机名。
logstash.process.host intermediary.hostname 处理日志的机器的主机名。
logstash_json_message JSON 格式的原始日志消息。
消息 security_result.description 原始日志消息。
additional.fields.ministry.value.string_value 与活动相关的部门。
name 实体的名称。
NewValue additional.fields.NewValue.value.string_value 配置设置的新值。
OldValue additional.fields.OldValue.value.string_value 配置设置的旧值。
端口 principal.port 客户端的端口号。
priority_code syslog 消息的优先级代码。
ProcessID principal.process.pid 生成相应事件的进程的进程 ID。
ProviderGuid security_result.about.resource.attribute.labels.ProviderGuid.value 提供商的 GUID。
ProviderKey security_result.about.resource.attribute.labels.ProviderKey.value 提供商的密钥。
ProviderName security_result.about.resource.attribute.labels.ProviderName.value 提供方的名称。
referrer_url network.http.referral_url 将客户端引荐到当前网页的网址。
request_url target.url 客户端请求的网址。
s-computername target.hostname 目标机器的主机名。
s-ip target.ip、target.asset.ip 目标机器的 IP 地址。
s-port target.port 目标机器的端口号。
s-sitename additional.fields.sitename.value.string_value 网站的名称。
sc-bytes network.sent_bytes 发送到客户端的字节数。
sc-status network.http.response_code 相应请求的 HTTP 状态代码。
sc-substatus additional.fields.sc_substatus.value.string_value 响应的 HTTP 子状态代码。
sc-win32-status 响应的 Windows 状态代码。
scbyte network.sent_bytes 发送到客户端的字节数。
scstatus network.http.response_code 相应请求的 HTTP 状态代码。
和程度上减少 security_result.severity 事件的严重程度。
service.type additional.fields.service_type.value.string_value 服务的类型。
sIP principal.ip、principal.asset.ip 客户端的 IP 地址。
sPort principal.port 客户端的端口号。
sSiteName additional.fields.sitename.value.string_value 网站的名称。
src_ip principal.ip、principal.asset.ip、observer.ip 客户端的 IP 地址。
src_port principal.port 客户端的端口号。
sysdate syslog 消息的日期和时间。
syslog_facility security_result.severity_details syslog 消息的设备。
syslog_pri syslog 消息的优先级。
syslog_severity security_result.severity_details syslog 消息的严重程度。
syslog_severity_code syslog 消息的严重程度代码。
标签 security_result.rule_name 与活动关联的标记。
任务 additional.fields.task.value.string_value 任务的名称。
时间 用于在原始日志时间戳无效时构建事件时间戳。
所用时间 请求的时长(以毫秒为单位)。
uri_query target.url 客户端请求的网址的查询字符串。
user_agent network.http.user_agent 客户端的用户代理。
用户名 target.user.userid 用户的用户名。
UserSid target.user.windows_sid 用户的 Windows SID。
权重 security_result.about.resource.attribute.labels.Weight.value 过滤器的权重。
win32_status 响应的 Windows 状态代码。
xforwardedfor X-Forwarded-For 标头,包含以英文逗号分隔的 IP 地址列表。
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"

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。