2024년 3월 14일 목요일

Filebeat의 processors - 3rd

프로토콜별로 불필요한 필드는 지우고 싶다.
processors:
  - include_fields:
      fields: "message"
  - dissect:
      tokenizer: "%{timestamp} %{+timestamp} %{action} %{protocol} %{sip} %{dip} %{sport} %{dport} %{tcpflags} %{icmptype} %{icmpcode}"
      target_prefix: ""
{
  "@timestamp": "2024-03-14T10:46:36.387Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "8.12.0"
  },
  "icmpcode": "-",
  "action": "ALLOW",
  "icmptype": "-",
  "message": "2024-03-05 00:03:04 ALLOW TCP 192.168.31.177 192.168.31.1 3638 8089 24 - -",
  "dport": "8089",
  "dip": "192.168.31.1",
  "protocol": "TCP",
  "tcpflags": "24",
  "sip": "192.168.31.177",
  "timestamp": "2024-03-05 00:03:04",
  "sport": "3638"
}
{
  "@timestamp": "2024-03-14T10:46:36.387Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "8.12.0"
  },
  "sip": "192.168.31.177",
  "icmptype": "0",
  "action": "ALLOW",
  "protocol": "ICMP",
  "timestamp": "2024-03-05 00:03:04",
  "sport": "-",
  "message": "2024-03-05 00:03:04 ALLOW ICMP 192.168.31.177 192.168.31.1 - - - 0 8",
  "dport": "-",
  "icmpcode": "8",
  "dip": "192.168.31.1",
  "tcpflags": "-"
}
{
  "@timestamp": "2024-03-14T10:46:36.387Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "8.12.0"
  },
  "timestamp": "2024-03-05 00:03:05",
  "protocol": "UDP",
  "icmpcode": "-",
  "message": "2024-03-05 00:03:05 ALLOW UDP 192.168.31.177 192.168.31.1 50958 53 - - -",
  "dport": "53",
  "sport": "50958",
  "tcpflags": "-",
  "icmptype": "-",
  "sip": "192.168.31.177",
  "dip": "192.168.31.1",
  "action": "ALLOW"
}

프로토콜별로 다른 처리를 해주면 간단한데,
if
...tcp...
else if
...udp...
else
...icmp...

else if 구문을 지원하지 않네? 이럴 때 중첩 if-then-else 구문이 대안이 될 수 있다.
processors:
  - include_fields:
      fields: "message"
  - dissect:
      tokenizer: "%{timestamp} %{+timestamp} %{action} %{protocol} %{sip} %{dip} %{sport} %{dport} %{tcpflags} %{icmptype} %{icmpcode}"
      target_prefix: ""
  - if:
      equals.protocol: "TCP"
    then:
      - drop_fields:
          fields: ["icmptype", "icmpcode"]
    else:
      if:
        equals.protocol: "UDP"
      then:
        - drop_fields:
            fields: ["tcpflags", "icmptype", "icmpcode"]
      else:
        - drop_fields:
            fields: ["sport", "dport", "tcpflags"]
{
  "@timestamp": "2024-03-14T10:50:02.502Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "8.12.0"
  },
  "message": "2024-03-05 00:03:04 ALLOW TCP 192.168.31.177 192.168.31.1 3638 8089 24 - -",
  "sip": "192.168.31.177",
  "sport": "3638",
  "timestamp": "2024-03-05 00:03:04",
  "protocol": "TCP",
  "dip": "192.168.31.1",
  "dport": "8089",
  "action": "ALLOW",
  "tcpflags": "24"
}
{
  "@timestamp": "2024-03-14T10:50:02.502Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "8.12.0"
  },
  "icmpcode": "8",
  "timestamp": "2024-03-05 00:03:04",
  "action": "ALLOW",
  "icmptype": "0",
  "dip": "192.168.31.1",
  "protocol": "ICMP",
  "sip": "192.168.31.177",
  "message": "2024-03-05 00:03:04 ALLOW ICMP 192.168.31.177 192.168.31.1 - - - 0 8"
}
{
  "@timestamp": "2024-03-14T10:50:02.502Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "8.12.0"
  },
  "message": "2024-03-05 00:03:05 ALLOW UDP 192.168.31.177 192.168.31.1 50958 53 - - -",
  "sip": "192.168.31.177",
  "protocol": "UDP",
  "timestamp": "2024-03-05 00:03:05",
  "action": "ALLOW",
  "dip": "192.168.31.1",
  "sport": "50958",
  "dport": "53"
}

그냥 필요 없는 필드 다 지우고 시작하는 게 나을래나?
  - script:
      lang: javascript
      source: >
        function process(event) {
          var list = event.Get();
          for (var i in list) {
            if (event.Get(i) == "-") {
              event.Delete(i);
            }
          }
        }

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스