通过LTS记录WAF全量日志
WAF管理控制台最多支持存储30天的攻击日志。如果您希望存储更长时间的攻击日志或访问日志,可将WAF日志对接到云日志服务(Log Tank Service,简称LTS),或通过云日志服务LTS,将日志转储至对象存储服务OBS或者数据接入服务DIS中长期保存。
系统影响
将WAF日志对接到LTS只是将WAF日志记录到LTS,不影响WAF性能。
前提条件
管理WAF全量日志
- 登录Web应用防火墙控制台。
- 在控制台左上角,单击
图标,选择区域或项目。 - (可选) 如果您已开通企业项目,在左侧导航栏上方单击“按企业项目筛选”下拉框,选择您所在的企业项目。完成后,页面将为您展示该企业项目下的相关数据。
- 在左侧导航栏,单击“防护事件”。
- 如果WAF还未对接云日志服务(LTS),需要在“全量日志”页签,单击“对接LTS配置”,完成对接操作。
表1 对接LTS配置参数说明 参数
说明
取值样例
日志类型
选择要转存到LTS的日志类型,支持转存“WAF访问日志”、“WAF攻击日志”。
攻击日志、访问日志的格式不同,如果同时选择两种日志类型,需要配置两个不同的日志流,用于分别记录日志信息。
“WAF访问日志”和“WAF攻击日志”
日志组
选择要转存的日志组。您也可以单击“创建日志组”,新建一个日志组。
日志组(LogGroup)是云日志服务进行日志管理的基本单位,用于对日志流进行分类,一个日志组下面可以创建多个日志流。日志组本身不存储任何日志数据,仅方便您管理日志流,每个账号下可以创建100个日志组。更多信息,请参见管理日志组。
lts-group-waf
WAF访问日志流
“日志类型”选择“WAF访问日志”时,需要选择WAF访问日志流。您也可以单击“创建日志流”,新建一个WAF访问日志流,用于记录每一个HTTP访问的关键信息,包括访问时间、访问客户端IP、访问资源URL等信息。
lts-topic-waf-access
WAF攻击日志流
“日志类型”选择“WAF攻击日志”时,需要选择WAF攻击日志流。您也可以单击“创建日志流”,新建一个WAF攻击日志流,用于记录每一个攻击告警信息,包括攻击事件类型、防护动作、攻击源IP等信息。
lts-topic-waf-attack
配置完成后,不会立即生效,存在10分钟左右的时延。配置生效后,云日志服务LTS会按流量单独计费。有关LTS的计费详情,请参见LTS价格详情。
- 查看或分析日志。
成功对接LTS后,“全量日志”页签会自动显示记录日志的日志组(图1①)、日志流(图1②)(包含的访问日志流、攻击日志流)。您可以单击WAF访问日志流或WAF攻击日志流,查看、搜索或分析WAF日志。更多信息,请参见搜索与分析日志。
- 选择日志流后,在“日志搜索”页签(图1③),选择(图1④),下载日志流中的上报日志。
- 前端直接下载:直接将前端查询的结果保存到本地,下载记录不会出现在日志下载历史中。单次下载支持最大5,000条日志。支持下载“.csv”或“.txt”格式的日志。
- 后台离线下载:通过后台任务将日志文件下载到临时OBS桶中,您的浏览器需要有公网访问权限才能在日志下载历史中下载结果文件。单次下载支持最大2,000万条日志。支持下载“.csv”、“.txt”或“.json”格式的日志。
您也可以通过OBS转储任务下载日志文件,详细请参考日志转储至OBS。
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_l3_ip | string | 标识请求的四层远端IP | - |
| access_log.remote_port | string | 标识请求的四层远端端口号 | 请求的客户端端口号。 |
| access_log.remote_l3_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.ja3 | string | 标识请求的JA3指纹 | - |
| access_log.ja4 | string | 标识请求的JA4指纹 | - |
| access_log.custom_traceid | string | 标识用户自定义Trace ID的请求头key。 | - |
| access_log.x_apm_version | string | 用于链路追踪,对应traceparent的version。 | - |
| access_log.x_apm_trace_id | string | 用于链路追踪,对应traceparent的trace-id。 | - |
| access_log.x_apm_parent_span_id | string | 用于链路追踪,对应traceparent的parent-id。 | - |
| access_log.x_apm_span_id | string | 用于链路追踪,服务自主生成的span-id。 | - |
| access_log.x_apm_trace_flags | string | 用于链路追踪,对应traceparent的trace-flags。 | - |
| access_log.extend_field1 | string | 标识用户自定义扩展字段的请求或响应头key。 | - |
| access_log.bot_lbl_num | string | 请求的Bot标签。 | - |
| access_log.bot_score | string | Bot评分。 | - |
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.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.geo | string | 标记地理位置信息 |
|
| 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 | 标识请求体 |
|
| attack_log.botm_asn | string | Bot检测到的asn。 | - |
| attack_log.botm_score | string | Bot评分。 | - |
| attack_log.bot_category | string | Bot类型 | - |
| attack_log.bot_sub_category | string | Bot子类型 | - |
| attack_log.tls_fingerprint | string | JA4指纹 | - |
| attack_log.tls_ja3_fingerprint | string | JA3指纹 | - |
| attack_log.bot_lbl | string | Bot标签 | - |
| attack_log.bot_lbl_id_reuse_ip_th | int | Bot会话重用IP等级 | - |
| attack_log.bot_lbl_repeat_url_th | int | 重复URL等级 | - |
| attack_log.ip_info | string | 客户端IP的来源信息 |
|
| attack_log.custom_traceid | string | 标识用户自定义Trace ID。 | - |
| access_log.extend_field1 | string | 标识用户自定义扩展字段的请求或响应头key。 | - |
| access_log.block_ruleid | string | 标识触发的攻击惩罚绑定的原始规则ID。 | - |


