本文介绍了如何使用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日志。