input {
beats { port => 5044 }
}
output {
stdout {}
if [winlog][event_data][DestPort] == 53 {
elasticsearch {
hosts => "192.168.56.1"
index => "dns-request"
}
}
}
하지만 인덱스는 만들어지지 않는다. 로그스태시 실행 결과를 보니 SourcePort, DestPort 모두 값이 큰따옴표가 씌워진 채 전달되고 있음. 숫자가 아닌 문자로 넘어오고 있다는 얘기.
output 조건을 숫자가 아닌 문자를 검사하게끔 바꿔주면 인덱스가 만들어진다. 저장된 데이터형은 모두 문자열.
만약 데이터형을 숫자로 바꿔주고 싶다면 파이프라인 설정에 mutate 플러그인 등을 이용한 데이터형 변환 설정을 추가해주면 된다.
[2020-11-10T22:33:58,508][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2020-11-10T22:33:58,576][INFO ][org.logstash.beats.Server][main][f0b7fe9f6237399673b5dbc8719ce2c4ba8f397236df9529f752390bf390b730] Starting server on port: 5044
[2020-11-10T22:33:58,815][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
{
"tags" => [
[0] "beats_input_raw_event"
],
"@timestamp" => 2020-11-10T13:33:57.245Z,
"@version" => "1",
"winlog" => {
"event_id" => 5156,
"event_data" => {
"SourceAddress" => "192.168.56.1",
"Application" => "\\device\\harddiskvolume3\\elk\\jdk-14\\bin\\java.exe",
"Direction" => "%%14593",
"DestAddress" => "192.168.56.1",
"LayerRTID" => "48",
"ProcessID" => "17044",
"SourcePort" => "9996",
"FilterRTID" => "66198",
"LayerName" => "%%14611",
"Protocol" => "6",
"RemoteMachineID" => "S-1-0-0",
"RemoteUserID" => "S-1-0-0",
"DestPort" => "9200"
}
}
}
if [winlog][event_data][DestPort] == "53"
다른 방법은 없나?
winlogbeat를 엘라스틱과 다이렉트로 연동하면 데이터 형식에 따라 필드별로 다른 데이터형이 지정된다는 사실을 알 수 있다.
PS D:\ELK\winlogbeat-7.10.0-windows-x86_64> .\winlogbeat.exe
{
"@timestamp": "2020-11-10T13:39:10.545Z",
"@metadata": {
"beat": "winlogbeat",
"type": "_doc",
"version": "7.10.0"
},
"winlog": {
"event_id": 5156,
"event_data": {
"RemoteMachineID": "S-1-0-0",
"DestAddress": "239.255.255.250",
"FilterRTID": "66199",
"SourceAddress": "192.168.56.1",
"SourcePort": "57163",
"Protocol": "17",
"ProcessID": "5960",
"Application": "\\device\\harddiskvolume10\\program files (x86)\\google\\chrome\\application\\chrome.exe",
"LayerName": "%%14611",
"Direction": "%%14593",
"LayerRTID": "48",
"RemoteUserID": "S-1-0-0",
"DestPort": "1900"
}
}
}
해당 작업은 winlogbeat-security.js가 담당하는데, 포트 관련 설정은 로그온 성공을 의미하는 4624 이벤트 하나뿐이다.
PS D:\ELK\winlogbeat-7.10.0-windows-x86_64> .\winlogbeat.exe
{
"@timestamp": "2020-11-10T13:58:11.941Z",
"@metadata": {
"beat": "winlogbeat",
"type": "_doc",
"version": "7.10.0"
},
"winlog": {
"event_id": 5156,
"event_data": {
"DestPort": 443,
"RemoteMachineID": "S-1-0-0",
"ProcessID": "13656",
"Application": "\\device\\harddiskvolume10\\program files (x86)\\google\\chrome\\application\\chrome.exe",
"SourceAddress": "192.168.31.189",
"LayerRTID": "48",
"Protocol": "17",
"FilterRTID": "66199",
"LayerName": "%%14611",
"Direction": "%%14593",
"SourcePort": 65378,
"RemoteUserID": "S-1-0-0",
"DestAddress": "216.58.220.110"
}
}
}
output {
stdout {}
if [winlog][event_data][DestPort] == 53 {
elasticsearch {
hosts => "192.168.56.1"
index => "dns-request2"
}
}
}
[2020-11-10T23:12:46,961][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2020-11-10T23:12:46,968][INFO ][org.logstash.beats.Server][main][260006b9ffce1409a2650c9a547e710c858be37b8c494ffcf5ed606790a94c9b] Starting server on port: 5044
{
"tags" => [
[0] "beats_input_raw_event"
],
"@timestamp" => 2020-11-13T14:12:25.754Z,
"@version" => "1",
"winlog" => {
"event_id" => 5156,
"event_data" => {
"SourceAddress" => "192.168.31.189",
"Direction" => "%%14593",
"DestAddress" => "110.35.63.236",
"Application" => "\\device\\harddiskvolume10\\program files (x86)\\google\\chrome\\application\\chrome.exe",
"LayerRTID" => "48",
"ProcessID" => "13656",
"SourcePort" => 57067,
"LayerName" => "%%14611",
"FilterRTID" => "66199",
"Protocol" => "17",
"RemoteMachineID" => "S-1-0-0",
"RemoteUserID" => "S-1-0-0",
"DestPort" => 443
}
}
}
댓글 없음:
댓글 쓰기