From aec103ffe4e4618c57d4b06dabab56cfb74533e9 Mon Sep 17 00:00:00 2001 From: rfaircloth-splunk Date: Wed, 11 Mar 2020 20:55:20 -0400 Subject: [PATCH 1/2] Cisco ASA conflict with Cisco IOS While the IOS and ASA sources are not sharing a code base there is overlap in some variations of the format. The Cisco IOS parser will now be the cisco_syslog parser and ASA and IOS can share --- .../conf.d/conflib/_common/syslog_format.conf | 6 -- .../conf.d/filters/cisco/cisco_syslog.conf | 62 +++++++++++++++++++ package/etc/conf.d/filters/cisco/ios.conf | 51 --------------- .../log_paths/lp-cisco_asa_legacy.conf.tmpl | 4 +- .../conf.d/log_paths/lp-cisco_ios.conf.tmpl | 4 +- package/etc/go_templates/source_network.t | 4 +- tests/docker-compose.yml | 5 +- tests/test_cisco_ios.py | 15 +---- 8 files changed, 72 insertions(+), 79 deletions(-) create mode 100644 package/etc/conf.d/filters/cisco/cisco_syslog.conf diff --git a/package/etc/conf.d/conflib/_common/syslog_format.conf b/package/etc/conf.d/conflib/_common/syslog_format.conf index 1a8ed16..f4ca24d 100644 --- a/package/etc/conf.d/conflib/_common/syslog_format.conf +++ b/package/etc/conf.d/conflib/_common/syslog_format.conf @@ -34,12 +34,6 @@ rewrite set_rfc3164{ filter f_is_rfc3164{ match("rfc3164" value("fields.sc4s_syslog_format")) }; -rewrite set_cisco_ios{ - set("cisco_ios" value("fields.sc4s_syslog_format")); -}; -filter f_is_cisco_ios{ - match("cisco_ios" value("fields.sc4s_syslog_format")) -}; rewrite set_no_parse{ set("no_parse" value("fields.sc4s_syslog_format")); }; diff --git a/package/etc/conf.d/filters/cisco/cisco_syslog.conf b/package/etc/conf.d/filters/cisco/cisco_syslog.conf new file mode 100644 index 0000000..1f2d7a2 --- /dev/null +++ b/package/etc/conf.d/filters/cisco/cisco_syslog.conf @@ -0,0 +1,62 @@ +filter f_cisco_syslog{ + match("cisco_syslog", value("fields.sc4s_vendor_product") type(glob)); +}; +rewrite set_cisco_syslog{ + set("cisco_syslog" value("fields.sc4s_syslog_format")); +}; +filter f_is_cisco_syslog{ + match("cisco_syslog" value("fields.sc4s_syslog_format")) +}; + +parser cisco-parser-ex{ + channel { + filter { + #message('^<\d*> ?(?:(\d+)\: )?(?:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]): )?(?:(\d+): )?(?:(\d\d:\d\d:\d\d|\d{1,6} \d{1,2}))?(?:(\*)?((?:\w\w\w {1,2}\d{1,2} (?:\d{2,4} )?\d\d:\d\d:\d\d)(?:\.\d{3,6})?( [AP]M)?)( [A-Z]{3,3})?)?( \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} )?: ((\%[^\: ]+)\:? ?.*)' flags(store-matches)); + message('^^<\d*> ?(?:(\d+)\: )?(?:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]): )?(?:(\d+): )?(?:(\d\d:\d\d:\d\d|\d{1,6} \d{1,2}))?(?:(\*)?((?:\w\w\w {1,2}\d{1,2} (?:\d{2,4} )?\d\d:\d\d:\d\d)(?:\.\d{3,6})?( [AP]M)?)( [A-Z]{3,3})?)? ?(?:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]))? ?: ((\%[^\: ]+)\:? ?.*)' flags(store-matches)); + }; + if { + #Mar 4 11:45:20 + #Apr 29 13:58:46.000001 + #Apr 29 13:58:46.411 + #Mar 1 18:48:50.483 UTC NOTE: Reverse TZ "%Z" parsing will not work for non-local timezones. + # guess-timezone() will be used to reconcile timezones + parser { + date-parser(format( + '%b %d %H:%M:%S.%f', + '%b %d %H:%M:%S', + '%b %d %I:%M:%S %p.%f', + '%b %d %I:%M:%S %p', + '%b %d %Y %H:%M:%S.%f' + '%b %d %Y %H:%M:%S', + ) + template("$8") + flags(guess-timezone) + ); + }; + } else { +# rewrite { set("date/time parser failed", value("fields.sc4s_error")); }; + rewrite { set("date/time parser failed on string $8" value("fields.sc4s_error")); }; + }; + rewrite { + set( + "${4}", + value("HOST") + condition(match('..' value('4'))) + ); + set( + "${13}", + value("HOST") + condition(match('..' value('13'))) + ); + set( + "${15}", + value("PROGRAM") + ); + set( + "${14}", + value("MESSAGE") + ); + }; + + }; +}; \ No newline at end of file diff --git a/package/etc/conf.d/filters/cisco/ios.conf b/package/etc/conf.d/filters/cisco/ios.conf index 4b7f995..ec484d2 100644 --- a/package/etc/conf.d/filters/cisco/ios.conf +++ b/package/etc/conf.d/filters/cisco/ios.conf @@ -1,54 +1,3 @@ # In general this will not be used; parser setting will override the need for this -filter f_cisco_ios{ - match("cisco_ios", value("fields.sc4s_vendor_product") type(glob)); -}; - -parser cisco-parser-ex{ - channel { - filter { - #message('^<\d*>(?:(?\d+)\: )?(?:(?\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]): )?(?:(?\d+): )?(?:(?\*)?(?(?