【雷池】syslog 详解
背景
常见咨询:
- syslog 配置;
- syslog 投递格式;
- syslog 日志字段;
扩展知识: - syslog投递原理
- syslog注意事项
常见咨询
syslog 配置
系统设置->告警收信配置->告警配置方式配置->添加一个新的告警服务->告警方式选择syslog;
配置后如下图所示:
告警方式
告警方式主要有sysLog和email
两者区别sysLog可以投递所有日志信息,而email不支持访问、攻击以及频率日志。
syslog 服务器
填写服务器地址和端口,只要是能接收日志消息,可以是logstash、elasticsearch等等...
在填写时需要确定,IP和端口可以正常访问。
RFC
Syslog常被用来日志等数据的传输协议,数据格式遵循规范主要有RFC3164,RFC5424;
RFC5424 相比 RFC3164 主要是数据格式的不同,RFC3164相对来说格式较为简单,能适应大部分使用场景,但是已废弃,RFC5424已作为Syslog的业界规范。
协议
雷池默认选择是tcp协议,但是在市面上常用日志协议是udp方式,在这需要根据实际需求选择。
通用与安全
通用选项,主要是管理节点数据监控,syslog和email均支持发送。
安全,主要为策略日志和域名管理记录,比如编辑站点或策略都可记录系统日志,而这可选择使用syslog投递或者email告警。访问、攻击以及频率日志只支持syslog投递。
可根据需求选择,需要投递哪些类型日志。
投递格式
syslog 默认投递都是json,在投递的日志中有syslog消息头,在此之后便是完整消息内容。
如果有不想投递的字段可以使用自定义格式,本次以攻击日志为例:
因在waf上默认即使json,如果业务需求是数组、元组、或者其他日志格式,即可通过自定义方式设置,自定义日志字段和格式。
- 数组格式
- 验证结果
日志字段
在自定义格式的格式化字符串中,以美元符()开头的单词代表一个字段,在 Syslog 发送的时候会被检测日志中对应的字段替换。假设请求的源 IP 是 127.0.0.1,src_ip 会被替换 127.0.0.1。若希望对应的字段被替换时其包含的特殊字符串(控制字符 \r \n、不可见字符、引号)被转义,可以使用双引号将其包裹,即 "src_ip" 会被替换为 "127.0.0.1"。如果希望在格式化字符串中使用美元符,可以使用两个美元符 :即 src_ip 不会被认为是字段,而会直接输出为 src_ip。
日志字段介绍
字段(key) | 字段解释名 | 值(value) |
---|---|---|
$action | 雷池对于该攻击所执行的动作 | deny(拦截)、allow(放行)、unknown(未知) |
$attack_type | 攻击类型 | 见下表详情 |
$body | 原始 HTTP 请求体 | - |
$cookie | HTTP 请求的 cookie | |
$country | 攻击 IP 的归属国家 | CountryCode,对应的国家字段 |
$decode_path | 解码攻击载荷的方式 | - |
$dest_ip | HTTP 请求的目的 IP | 普通 IP 字段 |
$dest_port | HTTP 请求的目的端口 | 普通字段 |
$event_id | 攻击事件的 ID | 普通 ID 字段 |
$host | HTTP 请求的 Host | - |
$location | 攻击载荷所处于请求中的位置 | - |
$method | HTTP 请求的 Method | - |
$module | 检测到该攻击的检测模块名称 | 见下表详情 |
$node | 检测到该攻击的检测节点名称 | 普通字段 |
$payload | 攻击载荷 | Payload 字段 |
$protocol | 请求的协议类型 | http、https |
$province | 攻击 IP 的归属省份 | 国内对应省份的汉字,国外对应 IP 数据库中的 NAME ,格式比较乱 |
$referer | HTTP 请求的 Referer | - |
$req_header_raw | 原始 HTTP 请求头 | - |
$resp_body | 原始 HTTP 返回体 | - |
$resp_header_raw | HTTP 的原始返回头 | - |
$resp_reason_phrase | HTTP 返回状态码的解释 | - |
$resp_status_code | 原始 HTTP 返回状态码 | - |
$risk_level | 攻击危害等级 | high(高危)、low(低危)、none(无威胁)、medium(中危)、unknown(未知) |
$rule_id | 命中的自定义规则 ID | 普通 ID 字段 |
$selector_id | 请求所使用的策略组 ID | 普通 ID 字段 |
$session | HTTP 请求的 session | session 字段 |
$src_ip | 发起攻击的源 IP | 普通 IP 字段 |
$src_port | 发起攻击的源端口 | 普通字段 |
$timestamp | 攻击记录时间 | Unix 的时间戳形式 |
$timestamp_human | 人可读的时间戳 | 如:2019-05-17 23:59:20 |
$urlpath | HTTP 请求的 URL | - |
$user_agent | HTTP 请求的 User-Agent | - |
challenge_id | 主动 BOT 防护中,通过 challenge_id 标识 challenge 的唯一性 | - |
detector_ip_source | 源IP获取方式 | - |
is_bot | 取值范围为[0,1,2];为 1 表示未通过验证;为 2 表示通过验证;为 0 表示请求第一次到达,还未进行验证 | |
query_string | - | 请求参数,不包括问号(?)前缀,且已被 URL encoding 解码 |
reason | 拦截原因 | - |
req_action | 检测服务对该 请求 执行的动作 | - |
req_attack_type | 请求攻击类型 | |
req_block_reason | 检测服务拦截该 请求 的原因 | |
req_body | 请求体(存在于请求阶段,明确截断) | |
req_decode_path | req_payload 对应的解码路径,内部为不透明的结构化数据 | |
req_detector_name | 处理该 请求 的检测服务所在的节点名称检测是无状态的,因此存在同一会话的请求和响应被不同的检测服务处理的情况 | |
req_end_time | 请求结束时间 | 单位为毫秒(millisecond)的 Unix 时间戳 |
req_header | 请求头 | 包含 HTTP request line,末尾需保留两个 \r\n |
req_location | req_payload/rsp_payload 在 请求 中所处的位置 | |
req_payload | 请求/响应 中触发攻击的部分,即「有效载荷」 | |
req_policy_group_id | 策略 ID | |
req_policy_id_list | 请求/响应的历史自定义规则 ID 列表 | |
req_proxy_name | 处理该 请求 的「代理服务」节点名称 | |
req_risk_level | ||
req_rule_id | rule_id 把 "/" 前的部分拆分之后单独存成一个字段,比如"m_sql/xxxx",这里存 "m_sql" | |
req_start_time | 请求开始时间(proxy 收到来来自 client 的 request 的第一个 byte 的时间) | 单位为毫秒(millisecond)的 Unix 时间戳 |
rsp_action | 检测服务对该 响应 执行的动作,对应 patronus/skynet-interface 中提供的 skynet_action_t | |
rsp_attack_type | ||
rsp_block_reason | 检测服务拦截该 响应 | |
rsp_body | 响应体存在于响应阶段,明确截断 | |
rsp_decode_path | rsp_payload 对应的解码路径,内部为不透明的结构化数据 | |
rsp_detector_name | 处理该 响应 的检测服务所在的节点名称检测是无状态的,因此存在同一会话的请求和响应被不同的检测服务处理的情况 | |
rsp_end_time | 响应结束时间 | 位为毫秒(millisecond)的 Unix 时间戳 |
rsp_header | 响应头,包含 HTTP response line,末尾需保留两个 \r\n | |
rsp_location | req_payload/rsp_payload 在 响应 中所处的位置 | |
rsp_payload | 请求/响应 中触发攻击的部分,即「有效载荷」 | |
rsp_policy_group_id | 策略 ID | |
rsp_policy_id_list | 请求/响应的历史自定义规则 ID 列表 | |
rsp_proxy_name | 处理该 响应 的「代理服务」节点名称,「代理服务」可能是 Nginx、Ripley 或者Evnoy; | |
rsp_risk_level | ||
rsp_rule_id | 响应命中的规则 ID并非特指自定义规则) | |
rsp_rule_module | rule_id 把 "/" 前的部分拆分之后单独存成一个字段,比如"m_sql/xxxx",这里存 "m_sql" | |
rsp_start_time | 响应开始时间(proxy 收到来自 upstream 的 response 的第一个 byte 的时间) | 单位为毫秒(millisecond)的 Unix 时间戳 |
scheme | http/https | |
site_uuid | 站点 id | |
socket_ip | socket_ip | |
status_code | 响应码 | |
tenant_id | 租户 ID,非多租户模式下无此字段 | |
url_path | 请求路径,包含 root(/) 前缀(如果有的话)且已被 URL encoding 解码;不包含请求参数(即 query_string) | |
verify_mode | 取值范围为[1,2],分别表示验证方式为浏览器验证和验证码验证 |