集成WAF日志到Syslog系统

本文介绍了如何使用Python ProgramWeb应用防火墙(WAF)的日志集成到Syslog日志系统中,以实现合规、审计等要求,也方便您在安全操作中心统一管理所有相关日志。

背景信息

该方案的整体集成架构如下图所示:架构图

阿里云日志服务为日志数据提供一站式服务,被广泛应用于阿里巴巴集团的许多大数据场景中。日志服务在无需开发介入的前提下,帮助您快速完成数据采集、消费、投递、查询和分析,提高运维运营效率,建立DT时代海量数据的处理能力。Web应用防火墙集成了日志服务的能力,通过WAF日志服务功能提供网站访问日志的采集、查询、分析等服务。更多信息,请参见WAF日志服务概述

Python Program是运行在ECS上的一段日志投递程序,帮助您将WAF日志投递到Syslog服务器。消费库(Consumer Library)是对LogHub消费者提供的高级模式,它使用消费组(Consumer Group)统一处理消费端问题。相比于直接使用SDK读取数据,消费库让您只关注业务逻辑,而无需在意日志服务的实施细节或多消费者间的容错问题。更多信息,请参见消费组消费

Syslog服务器是一个集中的日志消息管理服务器,它可以从多个Syslog源接收数据。

前提条件

  • 您已开通WAF日志服务并为网站域名开启日志采集。更多信息,请参见快速使用WAF日志服务

  • 您拥有一个Linux ECS服务器,该服务器满足以下推荐配置:

    • Ubuntu操作系统

    • 8核处理器,2.0 Ghz以上主频率

    • 32 GB内存

    • 可用磁盘空间大于2 GB(建议在10 GB以上)

  • 您拥有一个Syslog服务器,并开放UDP协议514端口用来接收Syslog数据。

操作步骤

您需要先在ECS实例中安装日志服务的Python SDK,然后配置Python Program,投递WAF日志到Syslog服务器。具体操作步骤如下:

  1. 通过SSHECS控制台远程连接ECS实例。具体操作请参见连接ECS实例

  2. 安装Python3、pipaliyun-log-python-sdk。关于日志服务Python 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中与日志服务(SLS)、Syslog相关的配置参数,具体包括:

    参数

    释义

    描述

    SLS Project

    日志项目名称

    日志项目(Project)是日志服务的资源管理单元,用来划分和操作资源。

    您可以登录阿里云日志服务控制台查看WAF日志服务项目。

    WAF日志服务项目的名称以waf-project开头。华东1(杭州)地域的项目表示中国内地WAF实例的日志项目,新加坡地域的项目表示非中国内地WAF实例的日志项目。

    日志项目

    SLS Endpoint

    日志服务入口

    日志服务入口是访问一个日志项目及其内部日志数据的URL。它和项目所在的阿里云地域及日志项目名称相关。要查看日志服务的入口URL,请参见服务入口

    SLS Logstore

    日志库

    日志库(Logstore)是日志服务用来采集、存储和查询日志数据的单元。每个日志库归属在一个项目下,每个项目可以拥有多个日志库。

    您可以登录阿里云日志服务控制台,单击WAF日志服务项目后,在WAF日志服务项目中查看日志库的名称。

    日志库

    SLS AccessKey IDAccessKey Secret

    访问密钥

    访问密钥是您在使用API(而非控制台)访问云资源时的密码。您需要使用AccessKeyAPI请求内容签名,使其能够通过日志服务的安全认证。具体请参见访问密钥

    您可以登录用户信息管理控制台查看您的AccessKey信息。

    AccessKey

    Syslog Host

    Syslog主机

    Syslog服务器的IP地址或主机名称。

    Syslog Port

    Syslog端口

    接收Syslog的端口。UDP协议使用514,TCP协议使用1468。

    Syslog protocol

    Syslog协议

    指定使用UDPTCP协议来接收Syslog数据,具体取决于Syslog服务器的配置。

    Syslog separator

    Syslog分隔符

    指定用于分隔Syslog键值对的分隔符。

    以下是Python Program的配置示例。

    • 日志服务配置

      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日志。