通过LTS记录WAF全量日志
启用WAF全量日志功能后,您可以将攻击日志、访问日志记录到云日志服务(Log Tank Service,简称LTS)中,通过LTS记录的WAF日志数据,快速高效地进行实时决策分析、设备运维管理以及业务趋势分析。
LTS对于采集的日志数据,通过海量日志数据的分析与处理,可以为您提供一个实时、高效、安全的日志处理能力。LTS默认存储日志的时间为7天,存储时间可以在1~30天之间进行设置,超出存储时间的日志数据将会被自动删除,对于需要长期存储的日志数据(日志持久化),LTS提供转储功能,可以将日志转储至对象存储服务(OBS)或者数据接入服务(DIS)中长期保存。
- 在WAF管理控制台,您可以查看最近30天的防护日志。
- LTS按流量单独计费。有关LTS的计费详情,请参见LTS价格详情。
- 如果您已开通企业项目,您需要在“企业项目”下拉列表中选择您所在的企业项目并确保已开通操作权限,才能开启该企业项目的全量日志。
前提条件
系统影响
开启全量日志功能是将WAF日志记录到LTS,不影响WAF性能。
将防护日志配置到LTS
- 登录管理控制台。
- 单击管理控制台左上角的,选择区域或项目。
- 单击页面左上方的,选择 。
- 在左侧导航树中,选择“防护事件”,进入“防护事件”页面。
- 选择“全量日志”页签,开启全量日志,并选择日志组和日志流,相关参数说明如表1所示。
图1 配置全量日志
表1 全量日志配置参数 参数
参数说明
取值样例
选择日志组
选择已创建的日志组,或者单击“查看日志组”,跳转到LTS管理控制台创建新的日志组。
lts-group-waf
记录攻击日志
选择已创建的日志流,或者单击“查看日志流”,跳转到LTS管理控制台创建新的日志流。
攻击日志记录每一个攻击告警信息,包括攻击事件类型、防护动作、攻击源IP等信息。
lts-topic-waf-attack
记录访问日志
选择已创建的日志流,或者单击“查看日志流”,跳转到LTS管理控制台创建新的日志流。
访问日志记录每一个HTTP访问的关键信息,包括访问时间、访问客户端IP、访问资源URL等信息。
lts-topic-waf-access
- 单击“确定”,全量日志配置成功。
您可以在LTS管理控制台查看WAF的防护日志。
在LTS上查看并下载WAF防护日志
当您将WAF防护日志配置记录到LTS上后,请参考以下操作步骤,在LTS管理控制台查看、分析、下载记录的WAF日志数据。
- 登录管理控制台。
- 单击管理控制台左上角的,选择区域或项目。
- 单击页面左上方的,选择“日志管理”页面。 ,进入
- 在日志组列表中,单击展开waf日志组(例如,“lts-group-waf”)。
- 在日志流列表,单击日志流名称,进入日志流日志页面,查看并分析日志。
- 在“日志搜索”页签,单击可下载日志流中的上报日志。
本地下载:将日志文件直接下载到本地,单次下载支持最大5,000条日志。
在下拉框中选择“.csv”或“.txt”,单击“开始下载日志”,可将日志导出至本地。
图2 下载日志
WAF访问日志access_log字段说明
字段 |
类型 |
字段说明 |
描述 |
---|---|---|---|
access_log.requestid |
string |
随机ID标识 |
与攻击日志的“req_id” 字段末尾8个字符一致。 |
access_log.time |
string |
访问请求的时间 |
日志内容记录的GMT时间。 |
access_log.connection_requests |
string |
标识该长链接第几个请求 |
- |
access_log.eng_ip |
string |
WAF引擎IP |
- |
access_log.pid |
string |
标识处理该请求的引擎 |
引擎(worker PID)。 |
access_log.hostid |
string |
访问请求的域名标识 |
防护域名ID(upstream_id)。 |
access_log.tenantid |
string |
防护域名的租户ID |
一个华为账号对应一个租户ID。 |
access_log.projectid |
string |
防护域名的项目ID |
用户在对应区域下的项目ID。 |
access_log.remote_ip |
string |
标识请求的四层远端 IP |
请求的客户端IP。
须知:
如果在WAF前部署了7层代理,本字段表示最靠近WAF的代理节点的IP地址。此时,真实访问者IP参考“x-forwarded-for”,“x_real_ip”字段。 |
access_log.remote_port |
string |
标识请求的四层远端端口号 |
请求的客户端端口号。 |
access_log.sip |
string |
标识请求的客户端 IP |
如,XFF等。 |
access_log.scheme |
string |
请求协议类型 |
请求所使用的协议有:
|
access_log.response_code |
string |
请求响应码 |
源站返回给WAF的响应状态码。 |
access_log.method |
string |
请求方法 |
请求行中的请求类型。通常为“GET”或“POST”。 |
access_log.http_host |
string |
请求的服务器域名 |
浏览器的地址栏中输入的地址,域名或IP地址。 |
access_log.url |
string |
请求URL |
URL链接中的路径(不包含域名)。 |
access_log.request_length |
string |
请求的长度 |
包括请求地址、HTTP请求头和请求体的字节数。 |
access_log.bytes_send |
string |
发送给客户端的总字节数 |
WAF返回给客户端的总字节数。 |
access_log.body_bytes_sent |
string |
发送给客户端的响应体字节数 |
WAF返回给客户端的响应体字节数。 |
access_log.upstream_addr |
string |
选择的后端服务器地址 |
请求所对应的源站IP。例如,WAF回源到ECS,则返回源站ECS的IP。 |
access_log.request_time |
string |
标识请求处理时间 |
从读取客户端的第一个字节开始计时(单位:s)。 |
access_log.upstream_response_time |
string |
标识后端服务器响应时间 |
后端服务器响应WAF请求的时间(单位:s)。 |
access_log.upstream_status |
string |
标识后端服务器的响应码 |
后端服务器返回给WAF的响应状态码。 |
access_log.upstream_connect_time |
string |
源站与后端服务建立连接的时间,单位为秒。 |
在使用SSL的情况下,握手过程所消耗的时间也会被记录下来。多次请求建立的时间,使用逗号分隔。 |
access_log.upstream_header_time |
string |
后端服务器接收到第一个响应头字节的用时,单位为秒。 |
多次请求响应的时间,使用逗号分隔。 |
access_log.bind_ip |
string |
WAF引擎回源IP |
引擎回源用网卡的具体IP值,若引擎通过挂载EIP回源,此值并非EIP的值。 |
access_log.group_id |
string |
对接LTS服务的日志组ID |
WAF对接云日志服务日志组ID。 |
access_log.access_stream_id |
string |
日志流ID |
与“group_id”相关,是日志组下用户的access_stream的ID。 |
access_log.engine_id |
string |
WAF引擎标识 |
WAF引擎的唯一标识。 |
access_log.time_iso8601 |
string |
日志的ISO 8601格式时间 |
- |
access_log.sni |
string |
通过SNI请求的域名 |
- |
access_log.tls_version |
string |
建立SSL连接的协议版本 |
请求所使用的TLS协议版本。 |
access_log.ssl_curves |
string |
客户端支持的曲线列表 |
- |
access_log.ssl_session_reused |
string |
SSL会话是否被重用。 |
表示SSL会话是否被重用。 r:是 .:否 |
access_log.process_time |
string |
引擎的检测用时(单位:ms) |
- |
access_log.args |
string |
标识URL中的参数数据 |
- |
access_log.x_forwarded_for |
string |
当WAF前部署代理时,代理节点IP链 |
代理节点IP链,为1个或多个IP组成的字符串。 最左边为最原始客户端的IP地址,代理服务器每成功收到一个请求,就将请求来源IP地址添加到右边。 |
access_log.cdn_src_ip |
string |
当WAF前部署CDN时CDN识别到的客户端IP |
当WAF前部署CDN时,此字段记录的为CDN节点识别到的真实客户端IP。
须知:
部分CDN厂商可能使用其他字段,WAF仅记录最常见的字段。 |
access_log.x_real_ip |
string |
当WAF前部署代理时,真实的客户端IP |
代理节点识别到的真实客户端IP。 |
access_log.intel_crawler |
string |
用于情报反爬虫分析 |
- |
access_log.ssl_ciphers_md5 |
string |
标识ssl_ciphers的md5值 |
- |
access_log.ssl_cipher |
string |
标识使用的ssl_cipher |
- |
access_log.web_tag |
string |
标识网站名称 |
- |
access_log.user_agent |
string |
标识请求header中的user-agent |
- |
access_log.upstream_response_length |
string |
标识后端响应的大小 |
- |
access_log.region_id |
string |
标识请求所属Region |
- |
access_log.enterprise_project_id |
string |
标识请求域名所属企业项目ID |
- |
access_log.referer |
string |
标识请求头中的Referer内容 |
最大长度为128字符,大于128字符会被截断。 |
access_log.rule |
string |
标识请求命中的规则 |
命中多条规则此处也只会显示一条。 |
access_log.category |
string |
标识请求命中的日志分类 |
- |
access_log.waf_time |
string |
访问请求的时间 |
- |
access_log.geo |
string |
标记地理位置信息 |
|
WAF攻击日志attack_log字段说明
字段 |
类型 |
字段说明 |
描述 |
---|---|---|---|
attack_log.category |
string |
日志分类 |
值为“attack”。 |
attack_log.time |
string |
日志时间 |
- |
attack_log.time_iso8601 |
string |
日志的ISO 8601格式时间 |
- |
attack_log.policy_id |
string |
防护策略ID |
- |
attack_log.level |
string |
防护策略层级 |
表示Web基础防护策略级别。
|
attack_log.attack |
string |
发生攻击的类型 |
发生攻击的类型,仅在攻击日志中出现。
|
attack_log.action |
string |
防护动作 |
WAF防护攻击动作。
|
attack_log.sub_type |
string |
爬虫的子类型 |
当attack为robot时,该字段不为空。
|
attack_log.rule |
string |
触发的规则ID或者自定义的策略类型描述 |
- |
attack_log.rule_name |
string |
标识自定义的策略类型描述。 |
命中基础防护规则时该字段为空。 |
attack_log.location |
string |
触发恶意负载的位置 |
- |
attack_log.req_body |
sting |
标识请求体 |
- |
attack_log.resp_headers |
string |
响应头 |
- |
attack_log.hit_data |
string |
触发恶意负载的字符串 |
- |
attack_log.resp_body |
string |
响应体 |
- |
attack_log.backend.protocol |
string |
标识当前后端协议 |
- |
attack_log.backend.alive |
string |
标识当前后端状态 |
- |
attack_log.backend.port |
string |
标识当前后端端口 |
- |
attack_log.backend.host |
string |
标识当前后端Host值 |
- |
attack_log.backend.type |
string |
标识当前后端Host 类型 |
IP 或域名 |
attack_log.backend.weight |
number |
标识当前后端权重 |
- |
attack_log.status |
string |
请求的响应状态码 |
- |
attack_log.upstream_status |
string |
标识请求的源站响应状态码 |
- |
attack_log.reqid |
string |
随机ID标识 |
由引擎IP尾缀、请求时间戳、NGINX分配的请求ID组成。 |
attack_log.requestid |
string |
标识请求唯一ID |
NGINX分配的请求ID。 |
attack_log.id |
string |
攻击ID |
攻击的ID标识。 |
attack_log.method |
string |
请求方法 |
- |
attack_log.sip |
string |
客户端请求IP |
- |
attack_log.sport |
string |
客户端请求端口 |
- |
attack_log.host |
string |
请求的服务器域名 |
- |
attack_log.http_host |
string |
请求的服务器域名 |
- |
attack_log.hport |
string |
请求的服务器端口 |
- |
attack_log.uri |
string |
请求URL |
不包括域名。 |
attack_log.header |
json string,decode后为json table |
请求header信息 |
- |
attack_log.mutipart |
json string,decode后为json table |
请求multipart header |
用于文件上传。 |
attack_log.cookie |
json string,decode后为json table |
请求Cookie信息 |
- |
attack_log.params |
json string,decode后为json table |
请求URI后的参数信息 |
- |
attack_log.body_bytes_sent |
string |
发送给客户端的响应体字节数 |
WAF发送给客户端的响应体字节数。 |
attack_log.upstream_response_time |
string |
后端服务器从上游服务接收响应内容所经过的时间,单位为秒。 |
多次请求响应的时间,使用逗号分隔。 |
attack_log.engine_id |
string |
引擎的唯一标识 |
- |
attack_log.region_id |
string |
标识引擎所在region的ID |
- |
attack_log.engine_ip |
string |
标识引擎IP |
- |
attack_log.process_time |
string |
引擎的检测用时 |
- |
attack_log.remote_ip |
string |
标识请求的四层客户端IP |
- |
attack_log.x_forwarded_for |
string |
标识请求头中“X-Forwarded-For”的内容 |
- |
attack_log.cdn_src_ip |
string |
标识请求头中“Cdn-Src-Ip”的内容 |
- |
attack_log.x_real_ip |
string |
标识请求头中“X-Real-IP”的内容 |
- |
attack_log.group_id |
string |
日志组ID |
对接LTS服务的日志组ID。 |
attack_log.attack_stream_id |
string |
日志流ID |
与“group_id”相关,是日志组下用户的 access_stream的ID。 |
attack_log.hostid |
string |
防护域名ID(upstream_id) |
- |
attack_log.tenantid |
string |
防护域名的租户ID |
- |
attack_log.projectid |
string |
防护域名的项目ID |
- |
attack_log.enterprise_project_id |
string |
标识请求域名所属企业项目ID |
- |
attack_log.web_tag |
string |
标识网站名称 |
- |
attack_log.req_body |
string |
识请求体(超过 1K 记录时会被截断) |
- |