启用WAF全量日志功能后,您可以将攻击日志、访问日志记录到云日志服务(Log Tank Service,简称LTS)中,通过LTS记录的WAF日志数据,快速高效地进行实时决策分析、设备运维管理以及业务趋势分析。
LTS对于采集的日志数据,通过海量日志数据的分析与处理,可以为您提供一个实时、高效、安全的日志处理能力。LTS默认存储日志的时间为7天,存储时间可以在1~30天之间进行设置,超出存储时间的日志数据将会被自动删除,对于需要长期存储的日志数据(日志持久化),LTS提供转储功能,可以将日志转储至对象存储服务(OBS)或者数据接入服务(DIS)中长期保存。
前提条件
已申请WAF。
已添加防护网站。
系统影响
开启全量日志功能是将WAF日志记录到LTS,不影响WAF性能。
将防护日志配置到LTS
登录管理控制台。
单击页面顶部的区域选择框,选择区域。
单击页面左上角的“服务列表”,选择“安全> Web应用防火墙(独享版)”。
在左侧导航栏,选择“防护事件”,进入“防护事件”页面。
选择“全量日志”页签,开启全量日志,并选择日志组和日志流。
配置全量日志:
全量日志配置参数:
参数 参数说明 取值样例 选择日志组 选择已创建的日志组。 lts-group-waf 记录攻击日志 选择已创建的日志流。
攻击日志记录每一个攻击告警信息,包括攻击事件类型、防护动作、攻击源IP等信息。
lts-topic-waf-attack 记录访问日志 选择已创建的日志流。
访问日志记录每一个HTTP访问的关键信息,包括访问时间、访问客户端IP、访问资源URL等信息。
lts-topic-waf-access 单击“确定”,全量日志配置成功。您可以在LTS管理控制台查看WAF的防护日志。
在LTS上查看WAF防护日志
当您将WAF防护日志配置记录到LTS上后,请参考以下操作步骤,在LTS管理控制台查看、分析记录的WAF日志数据。
登录管理控制台。
单击页面顶部的区域选择框,选择区域。
单击页面左上角的“服务列表”,选择“管理与部署> 云日志服务”,进入“日志管理”页面。
在日志组列表中,单击
展开图标展开waf日志组(例如,“lts-group-waf”)。
查看WAF防护日志。
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 | WAF引擎所使用的回源IP。 |
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会话是否被重用。
|
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 | 标识请求命中的规则 | 命中多条规则此处也只会显示一条。 |
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 记录时会被截断) | - |