Rules (XIF)
[MODEL: dataset="barracuda_cgfw_raw"]
filter _raw_log ~= "Allow\:|Detect\:"
| alter
priority = to_integer(arrayindex(regextract(_raw_log, "^\<(\d{1,3})\>"),0))
| alter
severity = to_string(subtract(priority, multiply(floor(divide(priority, 8)), 8)))
| alter
xdm.event.log_level = if(severity = "0", XDM_CONST.LOG_LEVEL_EMERGENCY, severity = "1", XDM_CONST.LOG_LEVEL_ALERT , severity = "2", XDM_CONST.LOG_LEVEL_CRITICAL, severity = "3" OR parsedFields1 -> level = "Error", XDM_CONST.LOG_LEVEL_ERROR, severity = "4" OR parsedFields1 -> level = "Warning", XDM_CONST.LOG_LEVEL_WARNING, severity = "5" OR parsedFields1 -> level = "Notice", XDM_CONST.LOG_LEVEL_NOTICE, severity = "6" or parsedFields1 -> level = "Info" , XDM_CONST.LOG_LEVEL_INFORMATIONAL, severity = "7", XDM_CONST.LOG_LEVEL_DEBUG, severity),
xdm.observer.name = coalesce(parsedFields1 -> observerHostname2, parsedFields1 -> observerHostname1),
xdm.observer.action = parsedFields1 -> action,
xdm.event.type = parsedFields1 -> type,
xdm.network.ip_protocol = if(parsedFields1 -> proto = "ICMP", XDM_CONST.IP_PROTOCOL_ICMP, parsedFields1 -> proto = "TCP", XDM_CONST.IP_PROTOCOL_TCP, parsedFields1 -> proto = "UDP", XDM_CONST.IP_PROTOCOL_UDP, parsedFields1 -> proto),
xdm.source.interface = if(parsedFields1 -> srcIF ="", null, parsedFields1 -> srcIF),
xdm.source.ipv4 = if(is_ipv4(parsedFields1 -> srcIP) = TRUE, parsedFields1 -> srcIP),
xdm.source.ipv6 = if(is_ipv6(parsedFields1 -> srcIP) = TRUE, parsedFields1 -> srcIP),
xdm.source.port = if(parsedFields1 -> proto = "ICMP", null, to_integer(parsedFields1 -> srcPort)), //ICMP does not support using port numbers. Instead, ICMP identifier is logged as the source (srcPort) and destination port (dstPort).
xdm.source.host.mac_addresses = arraycreate(parsedFields1 -> srcMAC),
xdm.target.ipv4 = if(is_ipv4(parsedFields1 -> dstIP) = TRUE, parsedFields1 -> dstIP),
xdm.target.ipv6 = if(is_ipv6(parsedFields1 -> dstIP) = TRUE, parsedFields1 -> dstIP),
xdm.target.port = if(parsedFields1 -> proto = "ICMP", null, to_integer(parsedFields1 -> dstPort)), //ICMP does not support using port numbers. Instead, ICMP identifier is logged as the source (srcPort) and destination port (dstPort).
xdm.target.resource.name = if(parsedFields1 -> dstService ="", null, parsedFields1 -> dstService),
xdm.target.resource.type = if(parsedFields1 -> dstService ="", null, "Destination service"),
xdm.target.interface = if(parsedFields1 -> dstIF ="", null, parsedFields1 -> dstIF),
xdm.network.rule = if(parsedFields1 -> rule = "", null, parsedFields1 -> rule),
xdm.network.http.url = if(json_extract_scalar(parsedFields1, "$.target") ="", null, json_extract_scalar(parsedFields1, "$.target")),
xdm.event.description = parsedFields1 -> info,
xdm.event.duration = to_integer(parsedFields1 -> duration),
xdm.target.sent_bytes = to_integer(parsedFields1 -> receivedBytes),
xdm.source.sent_bytes = to_integer(parsedFields1 -> sentBytes),
xdm.target.sent_packets = to_integer(parsedFields1 -> receivedPackets),
xdm.source.sent_packets = to_integer(parsedFields1 -> sentPackets),
xdm.source.user.username = if(parsedFields1 -> user = "", null, parsedFields1 -> user),
xdm.target.application.name = if(parsedFields1 -> application = "", null, parsedFields1 -> application),
xdm.network.http.url_category = if(parsedFields1 -> urlcat = "", null, parsedFields1 -> urlcat),
xdm.event.tags = arraycreate(XDM_CONST.EVENT_TAG_NETWORK, XDM_CONST.EVENT_TAG_CLOUD);
filter _raw_log contains "BYF"
| alter
priority = to_integer(arrayindex(regextract(_raw_log, "^\<(\d{1,3})\>"),0))
| alter
severity = to_string(subtract(priority, multiply(floor(divide(priority, 8)), 8)))
| alter
xdm.event.log_level = if(severity = "0", XDM_CONST.LOG_LEVEL_EMERGENCY, severity = "1", XDM_CONST.LOG_LEVEL_ALERT, severity = "2", XDM_CONST.LOG_LEVEL_CRITICAL, severity = "3", XDM_CONST.LOG_LEVEL_ERROR, severity = "4" OR parsedFields1 -> level = "Warning", XDM_CONST.LOG_LEVEL_WARNING, severity = "5" OR parsedFields1 -> level = "Notice", XDM_CONST.LOG_LEVEL_NOTICE, severity = "6" or parsedFields1 -> level = "Info" , XDM_CONST.LOG_LEVEL_INFORMATIONAL, severity = "7", XDM_CONST.LOG_LEVEL_DEBUG, severity),
xdm.observer.name = parsedFields1 -> hostname,
xdm.source.ipv4 = if(is_ipv4(parsedFields1 -> srcIP) = TRUE, parsedFields1 -> srcIP),
xdm.source.ipv6 = if(is_ipv6(parsedFields1 -> srcIP) = TRUE, parsedFields1 -> srcIP),
xdm.target.ipv4 = if(is_ipv4(parsedFields1 -> dstIP) = TRUE, parsedFields1 -> dstIP),
xdm.target.ipv6 = if(is_ipv6(parsedFields1 -> dstIP) = TRUE, parsedFields1 -> dstIP),
xdm.network.http.content_type = if(parsedFields1 -> contentType = "-", null, parsedFields1 -> contentType),
xdm.network.http.url = if(parsedFields1 -> url = "-", null,parsedFields1 -> url),
xdm.observer.action = parsedFields1 -> action,
xdm.network.http.url_category = if(parsedFields1 -> urlCategoryCode = "-", null, parsedFields1 -> urlCategoryCode),
xdm.target.host.hostname = if(parsedFields1 -> targetHostname = "0", null, parsedFields1 -> targetHostname),
xdm.target.user.username = if(parsedFields1 -> targetUser = "-", null, parsedFields1 -> targetUser),
xdm.event.tags = arraycreate(XDM_CONST.EVENT_TAG_NETWORK, XDM_CONST.EVENT_TAG_CLOUD);
filter _raw_log NOT IN ("*BYF*", "*Allow:*", "*Detect:*")
| alter
priority = to_integer(arrayindex(regextract(_raw_log, "^\<(\d{1,3})\>"),0))
| alter
severity = to_string(subtract(priority, multiply(floor(divide(priority, 8)), 8)))
| alter
xdm.event.log_level = if(severity = "0", XDM_CONST.LOG_LEVEL_EMERGENCY , severity = "1", XDM_CONST.LOG_LEVEL_ALERT , severity = "2", XDM_CONST.LOG_LEVEL_CRITICAL, severity = "3" OR parsedFields2 -> level = "Error" OR parsedFields1 -> level = "Error", XDM_CONST.LOG_LEVEL_ERROR, severity = "4" OR parsedFields2 -> level = "Warning" OR parsedFields1 -> level = "Warning" , XDM_CONST.LOG_LEVEL_WARNING, severity = "5" OR parsedFields2 -> level = "Notice" OR parsedFields1 -> level = "Notice", XDM_CONST.LOG_LEVEL_NOTICE, severity = "6" or parsedFields2 -> level = "Info" or parsedFields1 -> level = "Info", XDM_CONST.LOG_LEVEL_INFORMATIONAL, severity = "7", XDM_CONST.LOG_LEVEL_DEBUG, severity),
xdm.event.description = coalesce(parsedFields2 -> message, _raw_log),
xdm.observer.name = coalesce(parsedFields2 -> observerHostname2, parsedFields2 -> observerHostname1),
xdm.event.tags = arraycreate(XDM_CONST.EVENT_TAG_NETWORK, XDM_CONST.EVENT_TAG_CLOUD);