相关文章推荐
满身肌肉的人字拖  ·  ​ ...·  1 年前    · 
忐忑的眼镜  ·  android:process=":remo ...·  1 年前    · 
高大的毛衣  ·  macos - /bin/sh: ...·  1 年前    · 

本文介绍了如何使用Python Program将Web应用防火墙(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服务器。具体操作步骤如下:

  • 通过SSH或ECS控制台远程连接ECS实例。具体操作请参见 连接ECS实例
  • 安装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
  • 执行以下命令,从 GitHub 下载最新的集成示例代码。
    wget https://raw.githubusercontent.com/aliyun/aliyun-log-python-sdk/master/tests/consumer_group_examples/sync_data_to_syslog.py
  • 替换示例代码Python Program中与日志服务(SLS)、Syslog相关的配置参数,具体包括:
    SLS AccessKey ID和AccessKey Secret 访问密钥是您在使用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 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        
                         
  • 启用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日志。

  •