全部產品
Search
文件中心

Web Application Firewall:整合WAF日誌到Syslog系統

更新時間:Jul 01, 2024

本文介紹了如何使用Python Program將Web Application Firewall(WAF)的日誌整合到Syslog日誌系統中,以實現合規、審計等要求,也方便您在安全控制中心統一管理所有相關日誌。

背景資訊

該方案的整體整合架構如下圖所示:架構圖

阿里雲Log Service為日誌資料提供一站式服務,被廣泛應用於阿里巴巴集團的許多巨量資料情境中。Log Service在無需開發介入的前提下,協助您快速完成資料擷取、消費、投遞、查詢和分析,提高營運營運效率,建立DT時代海量資料的處理能力。Web Application Firewall整合了Log Service的能力,通過WAFLog Service功能提供網站訪問日誌的採集、查詢、分析等服務。更多資訊,請參見WAFLog Service概述

Python Program是運行在ECS上的一段日誌投遞程式,協助您將WAF日誌投遞到Syslog伺服器。消費庫(Consumer Library)是對LogHub消費者提供的進階模式,它使用消費組(Consumer Group)統一處理消費端問題。相比於直接使用SDK讀取資料,消費庫讓您只關注商務邏輯,而無需在意Log Service的實施細節或多消費者間的容錯問題。更多資訊,請參見消費組消費

Syslog伺服器是一個集中的日誌訊息管理伺服器,它可以從多個Syslog源接收資料。

前提條件

  • 您已開通WAFLog Service並為網站網域名稱開啟日誌採集。更多資訊,請參見快速使用WAFLog Service

  • 您擁有一個Linux ECS伺服器,該伺服器滿足以下推薦配置:

    • Ubuntu作業系統

    • 8核處理器,2.0 Ghz以上主頻率

    • 32 GB記憶體

    • 可用磁碟空間大於2 GB(建議在10 GB以上)

  • 您擁有一個Syslog伺服器,並開放UDP協議514連接埠用來接收Syslog資料。

操作步驟

您需要先在ECS執行個體中安裝Log Service的Python SDK,然後配置Python Program,投遞WAF日誌到Syslog伺服器。具體操作步驟如下:

  1. 通過SSH或ECS控制台遠端連線ECS執行個體。具體操作請參見串連ECS執行個體

  2. 安裝Python3、pip和aliyun-log-python-sdk。關於Log ServicePython SDK的介紹,請參見使用者指南

    apt-get update
    apt-get install -y python3-pip python3-dev
    cd /usr/local/bin
    ln -s /usr/bin/python3 python
    pip3 install --upgrade pip
    pip install aliyun-log-python-sdk
  3. 執行以下命令,從GitHub下載最新的整合範例程式碼。

    wget https://raw.githubusercontent.com/aliyun/aliyun-log-python-sdk/master/tests/consumer_group_examples/sync_data_to_syslog.py
  4. 替換範例程式碼Python Program中與Log Service(SLS)、Syslog相關的配置參數,具體包括:

    參數

    釋義

    描述

    SLS Project

    記錄項目名稱

    記錄項目(Project)是Log Service的資源嵌入式管理單元,用來劃分和操作資源。

    您可以登入阿里雲Log Service控制台查看WAFLog Service專案。

    WAFLog Service專案的名稱以waf-project開頭。華東1(杭州)地區的專案表示中國內地WAF執行個體的記錄項目,新加坡地區的專案表示非中國內地WAF執行個體的記錄項目。

    記錄項目

    SLS Endpoint

    Log Service入口

    Log Service入口是訪問一個記錄項目及其內部日誌資料的URL。它和專案所在的阿里雲地區及記錄項目名稱相關。要查看Log Service的入口URL,請參見服務入口

    SLS Logstore

    日誌庫

    日誌庫(Logstore)是Log Service用來採集、儲存和查詢日誌資料的單元。每個日誌庫歸屬在一個專案下,每個專案可以擁有多個日誌庫。

    您可以登入阿里雲Log Service控制台,單擊WAFLog Service專案後,在WAFLog Service專案中查看日誌庫的名稱。

    日誌庫

    SLS AccessKey ID和AccessKey Secret

    存取金鑰

    存取金鑰是您在使用API(而非控制台)訪問雲資源時的密碼。您需要使用AccessKey為API請求內容簽名,使其能夠通過Log Service的安全認證。具體請參見存取金鑰

    您可以登入使用者資訊管理主控台查看您的AccessKey資訊。

    AccessKey

    Syslog Host

    Syslog主機

    Syslog伺服器的IP地址或主機名稱。

    Syslog Port

    Syslog連接埠

    接收Syslog的連接埠。UDP協議使用514,TCP協議使用1468。

    Syslog protocol

    Syslog協議

    指定使用UDP或TCP協議來接收Syslog資料,具體取決於Syslog伺服器的配置。

    Syslog separator

    Syslog分隔字元

    指定用於分隔Syslog索引值對的分隔字元。

    以下是Python Program的配置樣本。

    • Log Service配置

      endpoint = os.environ.get('SLS_ENDPOINT', 'http://ap-southeast-1.log.aliyuncs.com')
      accessKeyId = os.environ.get('SLS_AK_ID', '替換成您自己的AccessKey ID')
      accessKey = os.environ.get('SLS_AK_KEY', '替換成您自己的AccessKey Secret')
      project = os.environ.get('SLS_PROJECT', 'waf-project-548613414276****-ap-southeast-1')
      logstore = os.environ.get('SLS_LOGSTORE', 'waf-logstore')
      consumer_group = os.environ.get('SLS_CG', 'WAF-SLS')
    • Syslog配置

      settings = {
                      "host": "1.2.xx.xx",
                      "port": 514,       
                      "protocol": "udp", 
                      "sep": ",",       
                      "cert_path": None, 
                      "timeout": 120,    
                      "facility": syslogclient.FAC_USER,  
                      "severity": syslogclient.SEV_INFO,  
                      "hostname": None,  
                      "tag": None        
                  }
  5. 啟用Python Program。假設Python program被儲存為sync_data_to_syslog.py,您可以使用以下命令啟用它:

    python sync_data_to_syslog.py

    啟用Python Program後,會顯示成功投遞日誌到Syslog伺服器。

    *** start to consume data...
    consumer worker "WAF-SLS-1" start 
    heart beat start
    heart beat result: [] get: [0, 1]
    Get data from shard 0, log count: 6
    Complete send data to remote
    Get data from shard 0, log count: 2
    Complete send data to remote
    heart beat result: [0, 1] get: [0, 1]

完成以上操作後,您可以在Syslog伺服器中查詢WAF日誌。