收集 Fortinet FortiClient 記錄

剖析器版本:5.0

支援:

本文說明如何使用 Bindplane 代理程式,將 Fortinet FortiClient 記錄檔擷取至 Google Security Operations。

FortiClient 是一種端點安全防護解決方案,可為 Windows、macOS、Linux 和 Chromebook 端點提供防毒、網頁篩選、VPN、弱點掃描和應用程式防火牆功能。FortiClient 透過 FortiClient EMS (端點管理伺服器) 集中管理,將安全性政策和設定檔推送至端點。

事前準備

請確認您已完成下列事前準備事項:

  • Google SecOps 執行個體
  • Windows Server 2016 以上版本,或搭載 systemd 的 Linux 主機
  • Bindplane 代理程式與 FortiClient 端點之間的網路連線
  • 如果是在 Proxy 後方執行,請確認防火牆通訊埠已按照 Bindplane 代理程式規定開啟
  • FortiClient EMS 管理控制台的特殊存取權
  • FortiClient EMS 7.0 以上版本,且具備授權的 FortiClient 端點

取得 Bindplane 代理程式的 Google SecOps 憑證

如要向 Google SecOps 驗證 Bindplane 代理程式,請選擇下列其中一種方法:

  • 新部署作業:使用 Chronicle API (選項 1)。
  • 舊版部署作業:繼續使用擷取驗證檔案 (選項 2),直到 Ingestion API 於 2027 年 7 月 20 日停用。
  1. 登入 Google Cloud 控制台,選取連結至 Google SecOps 執行個體的 Google Cloud 專案。
  2. 依序前往 「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
  3. 按一下「建立服務帳戶」。
  4. 請提供下列設定詳細資料:
    • 「Service account name」(服務帳戶名稱):輸入帳戶名稱 (例如 bindplane-ingest)。
    • 「服務帳戶說明」:輸入說明 (例如 Bindplane agent log ingestion)。
  5. 點按「Create and continue」(建立並繼續)。
  6. 在「將專案存取權授予這個服務帳戶」部分,按一下「選取角色」,然後選取「Chronicle 編輯者」。
  7. 依序點選「繼續」和「完成」。
  8. 按一下您建立的服務帳戶,然後前往「金鑰」分頁。
  9. 依序點選「新增金鑰」>「建立新的金鑰」。
  10. 選取「JSON」,然後按一下「建立」。金鑰檔案會下載到電腦。
  11. 將金鑰檔案儲存為 Bindplane 收集器目錄中的 ingestion-auth.json (Linux 為 /opt/observiq-otel-collector/ingestion-auth.json,Windows 為 C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json),或更新 config.yaml 中的 creds_file_path,使其與儲存檔案的路徑相符。
  12. 依序前往「IAM & Admin」(IAM 與管理) >「Settings」(設定),然後複製「Project number」(專案編號)。設定匯出工具時會用到。

方法 2:下載擷取驗證檔案 (舊版)

  1. 登入 Google SecOps 控制台。
  2. 依序前往「SIEM Settings」 > 「Collection Agents」。
  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
    

服務應顯示為「active (running)」。

其他安裝資源

如需其他安裝選項和疑難排解資訊,請參閱 Bindplane 代理程式安裝指南。

設定 Bindplane 代理程式,擷取系統記錄檔並傳送至 Google SecOps

找出設定檔

Linux:

sudo nano /opt/observiq-otel-collector/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:
    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: '/opt/observiq-otel-collector/ingestion-auth.json'
    customer_id: 'your-customer-id-here'
    endpoint: chronicle.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:服務帳戶 JSON 金鑰檔案的完整路徑 (選項 1):
    • Linux:/opt/observiq-otel-collector/ingestion-auth.json
    • Windows:C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
  • customer_id:Google SecOps 控制台的客戶 ID
  • location:將 <LOCATION> 替換為 Google SecOps 執行個體的區域 (例如 us、europe 或 asia-southeast1)。匯出工具會在這個值前面加上 chronicle.googleapis.com。如需完整清單,請參閱「區域性端點」。
  • project:將 <PROJECT_NUMBER> 替換為「IAM 與管理」>「設定」中的專案編號。
  • endpoint:請將此值設為 chronicle.googleapis.com。
  • log_type:FORTINET_FORTICLIENT
  • ingestion_labels:YAML 格式的選用標籤

舊版擷取 API 匯出工具

  • 如果您使用方式 2 的擷取驗證檔案,請將 exporters 區塊替換成下列內容。將 creds_file_path 設為擷取驗證檔案的路徑。如果執行個體位於美國境外,請將 malachiteingestion-pa.googleapis.com 替換為區域端點 (例如 europe-malachiteingestion-pa.googleapis.com)。

    exporters:
      chronicle/forticlient:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/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
    

儲存設定檔

編輯完畢後,請儲存檔案:

  • Linux:依序按下 Ctrl+O、Enter 和 Ctrl+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 Collector」。
      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 網頁控制台。
  2. 依序前往「Endpoint Profiles」 > 「Manage Profiles」。

編輯或建立端點設定檔

  1. 選取要編輯的現有設定檔,或按一下「新增」建立新的設定檔。
  2. 在「Profile Name」欄位中,輸入描述性名稱 (例如 Chronicle-Logging-Profile)。
  3. 按一下 [進階]。
  4. 按一下「XML Configuration」分頁標籤。
  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,將記錄傳送至系統記錄伺服器。請改用 faz 將記錄傳送至 FortiAnalyzer。
  • <netlog_server>:輸入 Bindplane 代理程式主機的 IP 位址 (例如 192.168.1.100)。只有在 <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. 按一下「測試 XML」,驗證 XML 設定。
  2. 按一下「儲存」即可儲存設定檔。

將設定檔套用至端點

  1. 依序前往 「端點政策」 > 「管理政策」。
  2. 選取現有政策,或按一下「新增」建立新政策。
  3. 在「設定檔」下拉式選單中,選取您建立或編輯的設定檔。
  4. 在「Endpoint Groups」(端點群組) 部分,選取要套用政策的端點群組。
  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 轉換為 uinteger,如果不是空白/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 格式,如果有效,則複製值
os, source principal.platform 如果 OS/來源與 (?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 直接複製值
subtype principal.resource.resource_subtype 直接複製值
網址 principal.url 直接複製值
uid、fctuid principal.user.product_object_id 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 如果 level == "info",則設為 INFORMATIONAL
威脅 security_result.threat_name 直接複製值
emshostname, remotename target.hostname 如果 emshostname 不是空白,則為該值,否則為 remotename
dstip target.ip 從 dstip 擷取有效的 IP
dstport target.port 轉換為整數,如果不是 0,則複製值
metadata.product_name 設為「FORTINET_FORTICLIENT」
metadata.vendor_name 設為「FORTINET_FORTICLIENT」
sec_action security_result.action 從變更記錄對應
date" and time metadata.event_timestamp 從變更記錄對應

變更記錄

查看這個剖析器的變更記錄

還有其他問題嗎?向社群成員和 Google SecOps 專家尋求解答。