1、在部署完ATD之后,您需要进行日志配置操作,以便ATD可以解析您的日志,进而进行威胁分析。
2、日志对接分为三步:
(1)日志格式配置,即添加要接入日志的log_format或进行日志字段映射设置,以便ATD可以成功解析您的日志;
(2)日志对接配置,即配置TopicName、Zookeeper地址等,以便ATD知道从哪里可以获取到您推送的日志;
(3)推日志,在完成日志配置后,您需要将日志推送到kafka相应的TopicName中。【注意】请勿将不同格式的域名日志推到同一个TopicName下,否则ATD将无法完成日志解析且不能进行威胁分析。
目前,ATD支持四种日志类型:
1、纯文本
2、JSON(无嵌套)
3、JSON嵌套文本
4、JSON嵌套JSON
请根据您实际的日志类型,添加相应的日志格式,不同日志类型的配置如下:
(1)日志样例
124.239.189.15 - [2016-07-16T15:56:04+08:00] 2ab80c0cf.yunlian.io "GET /adf/ad.php?abc=select+*+from+information_schema+where+1&testlogintest=test HTTP/1.1" 0.011 401 173 201 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "-"
(2)log_format字段
对于纯文本类型的日志,只需要填写一条原始日志及相应的log_format即可,ATD规定的log_format字段名称如下表所示:
字段名 | 解释 | 默认值 |
---|---|---|
*remote_addr | 客户端IP地址 | - |
*request_uri | 请求的uri | - |
*http_host | 请求地址(域名) | www.default.com |
http_x_forwarded_for | 反向客户端IP地址 | - |
time_local | 通用日志格式下的本地时间 | - |
status | 请求返回的状态码 | 200 |
hostname | 日志来源 | unknowh-host |
remote_user | 客户端用户名称 | - |
method | http请求方法 | GET |
body_bytes_sent | 发送给客户端的字节数,不包括响应头的大小 | 0 |
bytes_sent | 发送给客户端的总字节数 | - |
http_referer | 记录从哪个页面链接访问过来的 | |
http_user_agent | 记录客户端浏览器相关信息 | chrome |
request_length | 请求的长度(包括请求行,请求头和请求正文) | 0 |
request_time | 请求处理时间,单位为秒,精度毫秒 | 0 |
upstream_status | upstream返回的状态码信息 | - |
upstream_addr | 后端upstream地址,真正提供服务的主机地址 | - |
upstream_response_time | upstream响应时间 | 0 |
(3)log_format格式要求
- 如果您的日志是文本格式,请务必使用ATD指定的字段名称定义log_format,否则ATD将无法完成日志解析;
- 字段名以$为前缀,例如:$remote_addr
- 含有“*”字符的字段必须指定的字段;
- 如果您的日志中没有http_host,您可以在配置页面上设置http_host的默认值;
- log_format中的字段必须按顺序与原始日志中的字段一一对应,如果您的日志中包含上述字段之外的字段,可自定义名称,如:field1
(4)配置示例
原始日志:
124.239.189.15 - [2016-07-16T15:56:04+08:00] 2ab80c0cf.yunlian.io "GET /adf/ad.php?abc=select+*+from+information_schema+where+1&testlogintest=test HTTP/1.1" 0.011 401 173 201 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "-"
log_format:
$remote_addr $remote_user [$time_local] $http_host "$method $request_uri $http" $request_time $status $body_bytes_sent $request_length "$http_referer" "$http_user_agent" "$http_x_forwarded_for"
(1)日志样例
{
"remote_addr":"124.239.189.115",
"time_local":"2017-06-29T15:25:59+08:00",
"scheme":"http",
"http_host":"yunlian.io",
"method":"GET",
"request_uri":"/adf/logining/ad.php?abc=test",
"request_time":"1.187",
"status":"200",
"upstream_addr":"192.168.11.207",
"upstream_status":"200",
"upstream_response_time":"1.187",
"request_length":"2054",
"body_bytes_sent":"1181",
"http_referer":"http://2ab80c0cf.yunlian.io/123456.html",
"http_user_agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
"http_x_forwarded_for":"124.239.189.115",
"hostname":"node001131"
}
(2)配置示例
如果您的日志如上样例所示,您只需上传一条原始日志,并在界面中设置映射关系即可。
(1)日志样例
{
"message":"124.239.189.115 [2016-07-16T15:56:04+08:00] 2ab80c0cf.yunlian.io \"GET \/adf\/logining\/ad.php?abc=test HTTP\/1.1\" 0.011 401 173 201 \"-\" \"curl\/7.19.7 (x86_64-redhat-linux-gnu)libcurl\/7.19.7 NSS\/3.15.3 zlib\/1.2.3 libidn\/1.18 libssh2\/1.4.2\" \"124.239.189.16\"",
"time_local":"2016-07-16T15:56:04+08:00"
}
(2)配置示例
如果您的日志如上样例所示,您需要上传一条原始日志,并选择日志所在的Key,然后按照2.1中log_format的格式要求填写相应的log_format即可。
(1)日志样例
{
"message": {
"remote_addr": "192.168.11.86",
"time_local": "2017-11-16T19:39:19+08:00",
"scheme": "https",
"http_host": "yunlian.io",
"method": "GET",
"request_uri": "\/adf\/logining\/ad.php?abc=test",
"uri": "\/adf\/logining\/ad.php",
"request_time": "1.763",
"status": "200",
"upstream_addr": "192.168.11.112",
"upstream_status": "200",
"upstream_response_time": "1.763",
"request_length": "1743",
"body_bytes_sent": "4612",
"http_referer": "-",
"http_user_agent": "Dalvik\/2.1.0 (Linux; U; Android 7.0; SM-G9500 Build\/NRD90M)",
"http_x_forwarded_for": "120.188.38.168",
"hostname": "node001083"
},
"time_local": "2016-07-16T15:56:04+08:00"
}
或
{
"message":"{
\"remote_addr\":\"192.168.11.86\",
\"time_local\":\"2017-11-16T19:39:19+08:00\",
\"scheme\":\"https\",
\"http_host\":\"yunlian.io\",
\"method\":\"GET\",
\"request_uri\":\"\/adf\/logining\/ad.php?abc=test\",
\"uri\":\"\/adf\/logining\/ad.php\",
\"request_time\":\"1.763\",
\"status\":\"200\",
\"upstream_addr\":\"192.168.1.112:889\",
\"upstream_status\":\"200\",
\"upstream_response_time\":\"1.763\",
\"request_length\":\"1743\",
\"body_bytes_sent\":\"4612\",
\"http_referer\":\"-\",
\"http_user_agent\":\"Dalvik\/2.1.0 (Linux; U; Android 7.0; SM-G9500Build\/NRD90M)",
\"http_x_forwarded_for\":\"120.188.38.168\",
\"hostname\":\"node001083\"
}",
"time_local":"2016-07-16T15:56:04+08:00"
}
(2)配置示例
如果您的日志如上样例所示,您需要上传一条原始日志,并选择日志坐在的Key,然后进行日志字段映射设置即可。
在成功完成日志格式配置后,您可以对某个日志格式进行对接配置,选择使用ATD的kafka或是您私有的kafka,在选择了您私有的kafka后,您需要设置TopicName、Zookeeper地址或kafka地址。
1、在完成日志配置后,您需要将日志推送到kafka相应的TopicName中。
【注意】请勿将不同格式的域名日志推到同一个TopicName下,否则ATD将无法完成日志解析且不能进行威胁分析。
2、在进行推日志操作时,您可以根据每个日志格式后对应的《ATD安装说明-对接操作文档》来进行推日志操作。