收集 Fortinet FortiClient 日志

支持的平台:

本文档介绍了如何使用 Bindplane 代理将 Fortinet FortiClient 日志注入到 Google Security Operations。

FortiClient 是一款端点安全解决方案,可为 Windows、macOS、Linux 和 Chromebook 端点提供防病毒、网页过滤、VPN、漏洞扫描和应用防火墙功能。FortiClient 通过 FortiClient EMS(端点管理服务器)集中管理,该服务器会将安全政策和配置配置文件推送到端点。

准备工作

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

  • Google SecOps 实例
  • Windows Server 2016 或更高版本,或者带有 systemd 的 Linux 主机
  • Bindplane 代理与 FortiClient 端点之间的网络连接
  • 如果在代理后面运行,请确保防火墙端口根据 Bindplane 代理要求处于开放状态
  • 对 FortiClient EMS 管理控制台的特权访问权限
  • FortiClient EMS 版本 7.0 或更高版本,且具有许可的 FortiClient 端点

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

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

获取 Google SecOps 客户 ID

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

安装 Bindplane 代理

按照以下说明在 Windows 或 Linux 操作系统上安装 Bindplane 代理。

Windows 安装

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

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. 等待安装完成。

  4. 运行以下命令来验证安装:

    sc query observiq-otel-collector
    

该服务应显示为 RUNNING

Linux 安装

  1. 打开具有 root 或 sudo 权限的终端。
  2. 运行以下命令:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. 等待安装完成。

  4. 运行以下命令来验证安装:

    sudo systemctl status observiq-otel-collector
    

该服务应显示为有效(正在运行)

其他安装资源

如需了解其他安装选项和问题排查信息,请参阅 Bindplane 代理安装指南

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

找到配置文件

Linux

sudo nano /etc/bindplane-agent/config.yaml

Windows

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

修改配置文件

config.yaml 的全部内容替换为以下配置:

receivers:
    udplog:
    listen_address: "0.0.0.0:514"

exporters:
    chronicle/forticlient:
    compression: gzip
    creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
    customer_id: 'your-customer-id-here'
    endpoint: malachiteingestion-pa.googleapis.com
    log_type: FORTINET_FORTICLIENT
    raw_log_field: body
    ingestion_labels:
        env: production
        source: forticlient

service:
    pipelines:
    logs/forticlient_to_chronicle:
        receivers:
        - udplog
        exporters:
        - chronicle/forticlient

配置参数

替换以下占位符:

接收器配置

  • listen_address:要监听的 IP 地址和端口。使用 0.0.0.0:514 在端口 514 上监听所有接口。

导出器配置

  • creds_file_path:提取身份验证文件的完整路径:
    • Linux/etc/bindplane-agent/ingestion-auth.json
    • WindowsC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
  • customer_id:Google SecOps 控制台中的客户 ID
  • endpoint:区域端点网址:
    • 美国malachiteingestion-pa.googleapis.com
    • 欧洲europe-malachiteingestion-pa.googleapis.com
    • 亚洲asia-southeast1-malachiteingestion-pa.googleapis.com
    • 如需查看完整列表,请参阅区域级端点
  • log_typeFORTINET_FORTICLIENT
  • ingestion_labels:YAML 格式的可选标签

保存配置文件

修改后,保存文件:

  • Linux:依次按 Ctrl+OEnterCtrl+X
  • Windows:依次点击文件 > 保存

重启 Bindplane 代理以应用更改

  • Linux

    sudo systemctl restart observiq-otel-collector
    
    1. 验证服务是否正在运行:

      sudo systemctl status observiq-otel-collector
      
    2. 检查日志是否存在错误:

      sudo journalctl -u observiq-otel-collector -f
      
  • Windows

    请从下列选项中选择一项:

    • 以管理员身份使用命令提示符或 PowerShell:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • 使用“服务”控制台:

      1. Win+R,输入 services.msc,然后按 Enter 键。
      2. 找到 observIQ OpenTelemetry 收集器
      3. 右键点击并选择重新启动

      4. 验证服务是否正在运行:

        sc query observiq-otel-collector
        
      5. 检查日志是否存在错误:

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

配置 FortiClient 端点日志记录,以将日志发送到 Bindplane 代理

FortiClient 端点日志记录通过 FortiClient EMS 集中配置,方法是使用 XML 配置编辑端点配置文件。EMS 将日志记录配置推送到 FortiClient 端点,然后这些端点将日志直接发送到 Bindplane 代理 syslog 监听器。

登录 FortiClient EMS

  1. 登录 FortiClient EMS Web 控制台。
  2. 依次前往端点配置文件 > 管理配置文件

修改或创建端点配置文件

  1. 选择要修改的现有个人资料,或点击添加以创建新的个人资料。
  2. 配置文件名称字段中,输入一个描述性名称(例如 Chronicle-Logging-Profile)。
  3. 点击高级
  4. 点击 XML 配置标签页。
  5. 点击修改

在 XML 中配置远程日志记录

EMS 会显示两个窗格。使用右侧窗格修改 XML 配置。

<system> 中找到 <log_settings> 部分。如果不存在,请添加。在 <log_settings> 中,找到或添加 <remote_logging> 部分,并按如下方式进行配置:

<forticlient_configuration>
    <system>
    <log_settings>
        <onnet_local_logging>1</onnet_local_logging>
        <level>6</level>
        <log_events>ipsecvpn,sslvpn,scheduler,update,firewall,av,proxy,shield,webfilter,endpoint,fssoma,configd,vuln,sandboxing,antiexploit</log_events>
        <remote_logging>
        <log_upload_enabled>1</log_upload_enabled>
        <log_protocol>syslog</log_protocol>
        <netlog_server>192.168.1.100</netlog_server>
        <netlog_categories>7</netlog_categories>
        <log_upload_freq_minutes>5</log_upload_freq_minutes>
        </remote_logging>
    </log_settings>
    </system>
</forticlient_configuration>

配置参数

  • <log_upload_enabled>:设置为 1 可启用远程日志记录。
  • <log_protocol>:设置为 syslog 可将日志发送到 syslog 服务器。请改用 faz 将日志发送到 FortiAnalyzer。
  • <netlog_server>:输入 Bindplane 代理主机(例如 192.168.1.100)的 IP 地址。此参数仅在 <log_protocol> 设置为 syslog 时使用。
  • <netlog_categories>:输入要上传的日志类别的位掩码:
    • 1 = 流量日志
    • 2 = 漏洞日志
    • 4 = 事件日志
    • 7 = 所有类别 (1 + 2 + 4)
  • <log_upload_freq_minutes>:以分钟为单位输入日志上传频率(例如,5 表示每 5 分钟上传一次)。
  • <level>:FortiClient 日志记录级别。输入以下任一内容:
    • 0 = 紧急
    • 1 = 提醒
    • 2 = 严重
    • 3 = 错误
    • 4 = 警告
    • 5 = 通知
    • 6 = 信息(推荐)
    • 7 = 调试
  • <log_events>:要记录的 FortiClient 事件或进程的英文逗号分隔列表。添加要捕获的事件(例如 ipsecvpn,sslvpn,firewall,av,webfilter,endpoint)。

保存配置文件

  1. 点击 Test XML 以验证 XML 配置。
  2. 点击保存以保存配置文件。

将配置文件应用于端点

  1. 依次前往端点政策 > 管理政策
  2. 选择现有政策,或点击添加以创建新政策。
  3. 个人资料下拉菜单中,选择您创建或修改的个人资料。
  4. 端点组部分中,选择要应用相应政策的端点组。
  5. 点击保存

EMS 会在下一次遥测通信时将配置文件配置推送到端点。FortiClient 端点将开始向 Bindplane 代理 syslog 监听器发送日志。

验证日志转发

  1. 在 Bindplane 代理主机上,检查代理日志以验证是否正在接收日志:

    Linux

    sudo journalctl -u observiq-otel-collector -f
    

    Windows

    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
    
  2. 在 FortiClient 端点上,通过检查 FortiClient 日志来验证远程日志记录是否已启用:

    Windows

    C:\Program Files\Fortinet\FortiClient\logs\
    

    macOS

    /Library/Application Support/Fortinet/FortiClient/logs/
    

    Linux

    /var/log/forticlient/
    
  3. 在 Google SecOps 控制台中,验证是否正在提取 FortiClient 日志:

    • 前往搜索
    • 输入 FortiClient 日志的搜索查询(例如,metadata.log_type = "FORTINET_FORTICLIENT")。
    • 验证日志是否显示在搜索结果中。

UDM 映射表

日志字段 UDM 映射 逻辑
emsserial、devid、usingpolicy、itime、fctsn、logver、site、fctver、browsetime、event_id、SubjectUserName、SubjectLogonId、ThreadID additional.fields 使用每个字段中的键和值创建的标签,合并到 additional.fields 中
时间戳 metadata.collected_timestamp 解析为 UNIX 时间戳
ts metadata.event_timestamp 使用“MMM d HH:mm:ss”“MMM d HH:mm:ss”“yyyy-MM-dd HH:mm:ss”格式通过日期过滤器进行解析
deviceip、client_ip、devicemac、hostname、user、uid metadata.event_type 如果用户/uid 和机器 ID 都存在,则设置为 USER_RESOURCE_ACCESS;如果机器 ID 存在,则设置为 USER_UNCATEGORIZED;否则设置为 GENERIC_EVENT
eventtype metadata.product_event_type 直接复制值
id metadata.product_log_id 已转换为字符串,值已复制
服务 network.application_protocol 大写,然后如果与列表匹配,则设置为预定义协议(例如 “SSH”表示“22”“SSH”“SSHD”;“HTTP”表示“80”“8080”“HTTP”),否则如果服务在扩展列表中,则为服务,否则为空
方向 network.direction 如果与 (?i)inbound 匹配,则设置为 INBOUND;如果与 (?i)outbound 匹配,则设置为 OUTBOUND
proto network.ip_protocol 如果 proto == "6",则设置为“TCP”
rcvdbyte network.received_bytes 转换为无符号整数,如果非空/非 0,则复制值
sentbyte network.sent_bytes 转换为无符号整数,如果非空/非 0,则复制值
sessionid network.session_id 直接复制值
pcdomain principal.administrative_domain 直接复制值
srcproduct principal.application 直接复制值
主机名 principal.hostname 直接复制值
deviceip、client_ip principal.ip 如果 deviceip 不为空,则取自 deviceip;否则,如果 client_ip 是有效的 IP,则取自 client_ip
devicemac principal.mac 转换为 MAC 格式,如果有效则复制值
操作系统、来源 principal.platform 如果操作系统/来源与 (?i)windows 匹配,则设置为 WINDOWS;如果与 (?i)mac|ios 匹配,则设置为 MAC;如果与 (?i)linux 匹配,则设置为 LINUX
source_ver principal.platform_version 直接复制值
srcport principal.port 已转换为整数,值已复制
ProcessId principal.process.pid 直接复制值
srcname、source_type、type principal.resource.attribute.labels 使用每个字段中的键和值创建的标签,合并到 attribute.labels 中
devname principal.resource.name 直接复制值
ProviderGuid principal.resource.product_object_id 直接复制值
子类型 principal.resource.resource_subtype 直接复制值
网址 principal.url 直接复制值
uid、fctuid principal.user.product_object_id 如果 uid 不为空,则返回 uid 中的值;否则返回 fctuid
用户 principal.user.user_display_name 直接复制值
用户 principal.user.userid 直接复制值
SubjectUserSid principal.user.windows_sid 如果与 SID 正则表达式匹配,则复制值
utmaction security_result.action 如果为 [accept,allow,passthrough,pass,permit,detected],则设置为 ALLOW;如果为 [deny,dropped,blocked,block],则设置为 BLOCK;否则设置为 UNKNOWN_ACTION
utmevent security_result.category_details 直接复制值
utmaction security_result.description 设置为“utmaction:
userinitiated security_result.detection_fields 使用键“userinitiated”和来自 userinitiated 的值创建的标签,已合并
level security_result.severity 如果级别为“info”,则设置为 INFORMATIONAL
威胁 security_result.threat_name 直接复制值
emshostname、remotename target.hostname 如果 emshostname 不为空,则为 emshostname 中的值;否则为 remotename
dstip target.ip 从 dstip 中提取了有效的 IP
dstport target.port 转换为整数,如果不是 0,则复制值
metadata.product_name 设置为“FORTINET_FORTICLIENT”
metadata.vendor_name 设置为“FORTINET_FORTICLIENT”

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