psdpan
发布于

【雷池】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],分别表示验证方式为浏览器验证和验证码验证
浏览 (647)
点赞 (6)
收藏
打赏
评论