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

概览

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

阿里云日志服务为日志数据提供一站式服务,被广泛应用于阿里巴巴集团的许多大数据场景中。日志服务在无需开发介入的前提下,帮助您快速完成数据采集、消费、投递、查询和分析,提高运维运营效率,建立DT时代海量数据的处理能力。更多信息,请查看什么是日志服务

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

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

前提条件

进行配置前,请确保满足以下条件:
  • 您已购买企业版或旗舰版Web应用防火墙,并为您的网站配置防护。更多信息,请查看购买Web应用防火墙业务接入WAF配置
  • 您拥有一个Linux ECS服务器,该服务器满足以下推荐配置:
    • Ubuntu操作系统
    • 8核处理器,2.0Ghz以上主频率
    • 32GB内存
    • 可用磁盘空间大于2GB(建议在10GB以上)
  • 您拥有一个syslog服务器,并开放UDP协议514端口用来接收syslog数据。

操作步骤

  1. 开启Web应用防火墙日志功能。
    参照以下步骤,在Web应用防火墙控制台开启日志功能:
    1. 登录云盾Web应用防火墙控制台
    2. 在左侧导航栏,选择市场管理 > 应用管理
    3. 日志服务实时查询分析应用下,单击升级

    4. 变配页面,开通日志服务, 并根据实际需求选择日志存储时长日志存储容量

    5. 开通日志服务后,在日志服务实时查询分析应用下,单击授权

    6. 云资源访问授权页面,单击同意授权

    7. 日志服务实时查询分析应用下,单击配置

    8. 在下拉框中选择要配置的域名,并打开功能开关。

  2. 在ECS中配置Python环境。
    参照以下步骤在ECS实例中安装日志服务的Python SDK:
    1. 通过SSH或控制台登录到ECS。具体操作请参考连接ECS实例
    2. 安装Python3、pip和aliyun-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. 配置Python Program。
    参照以下步骤配置Python Program,投递WAF日志到syslog服务器:
    1. GitHub下载最新的集成示例代码。
      wget https://raw.githubusercontent.com/aliyun/aliyun-log-python-sdk/master/tests/consumer_group_examples/sync_data_to_syslog.py
    2. 替换示例代码Python Program中与日志服务(SLS)、syslog相关的配置参数,具体包括:
      参数 释义 描述
      SLS Project 日志项目名称 日志项目是日志服务的资源管理单元,用来划分和操作资源。您可以在阿里云日志服务控制台上查看项目名称。

      SLS Endpoint 日志服务入口 日志服务入口是访问一个日志项目及其内部日志数据的URL。它和项目所在的阿里云地域及日志项目名称相关。您可以在服务入口中查看服务入口URL。
      SLS Logstore 日志库 日志库是日志服务用来采集、存储和查询日志数据的单元。每个日志库归属在一个项目下,每个项目可以拥有多个日志库。您可以在阿里云日志服务控制台,特定日志服务项目下查看日志库的名称。

      SLS accessKeyId和accessKey 访问密钥 访问密钥是您在使用API(而非控制台)访问云资源时的“密码”。您需要使用AccessKey为API请求内容签名,使其能够通过日志服务的安全认证。具体请参考访问密钥。您可以在用户信息管理控制台查看您的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的配置示例。
      • 日志服务配置
        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')
        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.3.4",
                        "port": 514,       
                        "protocol": "udp", 
                        "sep": ",",       
                        "cert_path": None, 
                        "timeout": 120,    
                        "facility": syslogclient.FAC_USER,  
                        "severity": syslogclient.SEV_INFO,  
                        "hostname": None,  
                        "tag": None        
                    }
    3. 启用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日志。