logstash-filter-cidrtagmap 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8a84d59293902f5d951c56c730f818b102505a79
4
- data.tar.gz: 8386370459f96c62abb44299c286e50099842b22
3
+ metadata.gz: edb209f7d360805f5be547d28728b63e180f3a89
4
+ data.tar.gz: 3e67480b82b0747e954f43d7ff0891b9db9ab3d6
5
5
  SHA512:
6
- metadata.gz: 3bd56f6e098c2d190d66e5ae6c3e2c87fce7ac4fe34aefaf5ff59ec6a21698abe16094c218657e25fa681bb9658cab2c8f74ccb31318fdd45ca469e1556a675d
7
- data.tar.gz: 755b109660dea605cfaf2c18704a819afa1f4f61db63017f8cfd169653393d40976376df5e55cff5a30fc1e2857e6b3621eade55c9ae91012082fa34d1fb5778
6
+ metadata.gz: 9025ea9cce3c73b21487e8d4ae7278e1fefe300684e960fb555b64d9372a547b2d37333edae89bad3a88ab0d15287cd2e5007478ffac1f4f6942204e51475ccf
7
+ data.tar.gz: 3623e9fe0dc6f99ec37b23ea5ea5cde0ca5cbc51b6e2d9785590b9d20de23b2ef5824804a8c6d6f9e2921dbc92c80f5d50e604854a11fee43e80136a1d8ca896
data/README.md CHANGED
@@ -1,38 +1,49 @@
1
- This logstash filter tags netflow records according to a list of CIDR to tag mappings, and adds ASN names for the src_as and dst_as fields.
1
+ This logstash filter tags events according to a list of CIDR to tag mappings, and optionally maps ASN numbers to names
2
2
 
3
- The list is an external / stand alone text file consisting of lines of the form:
3
+
4
+ Example:
5
+
6
+ ```
7
+ cidrtagmap {
8
+ mapfilepath => "/path/to/ipmap/file"
9
+ asnmapfilepath => "/path/to/asnmap/file"
10
+ ipfieldlist => [
11
+ 'host',
12
+ '[netflow][dst_address]',
13
+ '[etc]'
14
+ ]
15
+ asfieldlist => [
16
+ '[netflow][dst_as]',
17
+ '[netflow][src_as]
18
+ ]
19
+ }
20
+ ```
21
+
22
+ * mapfilepath (required) points to an external / stand alone text file consisting of lines of the form:
4
23
 
5
24
  ```
6
25
  <network>/<mask>,<tag>
7
26
  ```
8
27
 
9
28
  The filter can be made to re-load its in-memory representation of the contents of the
10
- map file without interrupting/restarting the logstash instance by touching a flag file.
29
+ ipmap file without interrupting/restarting the logstash instance by touching a flag file.
11
30
 
12
- When a netflow event matches the CIDR spec, two tags are set:
13
-
14
- src_tag = the tag associated with the spec that matched
31
+ ```
32
+ touch <mapfilepath>.RELOAD
33
+ ```
15
34
 
16
- src_tagMatch = the CIDR spec that matched (as rendered by IPAddr.to_s)
17
35
 
18
- Download the asn map file here: ftp://ftp.arin.net/info/asn.txt
36
+ * asnmapfilepath (optional) points to a copy of this file: ftp://ftp.arin.net/info/asn.txt
19
37
 
20
38
 
21
- Configuration:
39
+ * ipfieldlist (required) is a list of event fields that will be eligible for mapping. Everything that matches
40
+ will be put in a structure subtending an item called cidrtagmap, so
41
+ from the above example a match of the [netflow][dst_address] field would add
42
+ cidrtagmap.netflow.dst_address.tag. A pair to this field will be cidrtagmap.netflow.dst_address.match
43
+ which indicates which rule was matched for the mapping.
22
44
 
23
- ```
24
- filter{
25
- cidrtagmap {
26
- mapfilepath => "cidrmap.txt"
27
- asnmapfilepath => "asn.txt"
28
- }
29
- }
30
- ```
45
+ * asnfieldlist (optional) is a list of fields presumed to contain asn numbers. Everything that matches
46
+ will add e.g. cidrtagmap.netflow.dst_as.asname
31
47
 
32
- Tell the filter to reload its maps
33
48
 
34
- ```
35
- touch <mapfilepath>.RELOAD
36
- ```
37
49
 
38
- Reloading is thread safe.
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require "logstash/filters/base"
2
3
  require "logstash/namespace"
3
4
  require 'ipaddr'
@@ -25,10 +26,10 @@ class LogStash::Filters::CIDRTagMap < LogStash::Filters::Base
25
26
 
26
27
  config_name "cidrtagmap"
27
28
 
28
- milestone 1
29
-
30
29
  config :mapfilepath, :validate => :string, :default => 'cidrmap.txt'
31
30
  config :asnmapfilepath, :validate => :string, :default => 'asn.txt'
31
+ config :ipfieldlist, :required => true, :list => true , :validate => :string
32
+ config :asfieldlist, :list => true, :validate => :string
32
33
 
33
34
 
34
35
  private
@@ -121,47 +122,36 @@ class LogStash::Filters::CIDRTagMap < LogStash::Filters::Base
121
122
  public
122
123
  def filter(event)
123
124
  return unless filter?(event)
124
- if event['netflow']
125
- loadLatestMap
126
- netflow = event['netflow']
127
- if netflow["ipv4_src_addr"]
128
- @logger.debug("cidrtagmap: checking for src #{netflow['ipv4_src_addr']}")
129
- src_map = mapForIp(netflow["ipv4_src_addr"])
130
- if src_map
131
- @logger.debug("cidrtagmap: tagging src #{netflow['ipv4_src_addr']} with #{src_map.tag}")
132
- netflow["src_tag"] = src_map.tag
133
- netflow['src_tagMatch'] = src_map.range.to_s
134
- filter_matched(event)
135
- end
136
- end
137
- if netflow["ipv4_dst_addr"]
138
- @logger.debug("cidrtagmap: checking for dst #{netflow['ipv4_dst_addr']}")
139
- dst_map = mapForIp(netflow["ipv4_dst_addr"])
140
- if dst_map
141
- @logger.debug("cidrtagmap: tagging dst #{netflow['ipv4_dst_addr']} with #{dst_map.tag}")
142
- netflow["dst_tag"] = dst_map.tag
143
- netflow["dst_tagMatch"] = dst_map.range.to_s
144
- filter_matched(event)
145
- end
146
- end
147
- if netflow["dst_as"]
148
- @logger.debug("cidrtagmap: checking for dst_as #{netflow['dst_as']}")
149
- dst_asname = asNameForNumber(netflow["dst_as"])
150
- if dst_asname
151
- @logger.debug("cidrtagmap: tagging dst_as #{netflow['dst_as']} with #{dst_asname}")
152
- netflow["dst_as_name"] = dst_asname
125
+ # There *will* be an @ipfieldlist - this is enforced by the :required directive above
126
+ @ipfieldlist.each { |fieldname|
127
+ @logger.debug("cidrtagmap: looking for ipfield '#{fieldname}'")
128
+ if ipvalue = event.get(fieldname)
129
+ @logger.debug("cidrtagmap: I found ipfield #{fieldname} with value #{ipvalue}")
130
+ mapping = mapForIp(ipvalue)
131
+ if mapping
132
+ @logger.debug("cidrtagmap: I mapped IP address #{ipvalue} to #{mapping.tag} via range #{mapping.range.to_s}")
133
+ event.set("[cidrtagmap]#{fieldname}[tag]",mapping.tag)
134
+ event.set("[cidrtagmap]#{fieldname}[match]",mapping.range.to_s)
153
135
  filter_matched(event)
154
136
  end
155
137
  end
156
- if netflow["src_as"]
157
- @logger.debug("cidrtagmap: checking for src_as #{netflow['src_as']}")
158
- src_asname = asNameForNumber(netflow["src_as"])
159
- if src_asname
160
- @logger.debug("cidrtagmap: tagging src_as #{netflow['src_as']} with #{src_asname}")
161
- netflow["src_as_name"] = src_asname
162
- filter_matched(event)
138
+ }
139
+ if @asfieldlist
140
+ @asfieldlist.each { |fieldname|
141
+ @logger.debug("cidrtagmap: looking for asfield '#{fieldname}'")
142
+ if asvalue = event.get(fieldname)
143
+ @logger.debug("cidrtagmap: I found asfield #{fieldname} with value #{asvalue}")
144
+ asname = asNameForNumber(asvalue)
145
+ if asname
146
+ @logger.debug("cidrtagmap: I mapped as number #{asvalue} to #{asname}")
147
+ event.set("[cidrtagmap]#{fieldname}[asname]",asname)
148
+ filter_matched(event)
149
+ end
163
150
  end
164
- end
151
+ }
152
+ else
153
+ @logger.debug("cidrtagmap: No as field list defined - not attempting to translate asnames!")
165
154
  end
155
+
166
156
  end
167
157
  end
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-filter-cidrtagmap'
3
- s.version = '1.2.0'
4
- s.licenses = ['Apache License (2.0)']
3
+ s.version = '2.0.0'
4
+ s.licenses = ['Apache-2.0']
5
5
  s.summary = "Filter adds tags to netflow records in logstash based on a static table of cidr->name and adds asn name fields"
6
6
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
7
7
  s.authors = ["svdasein"]
@@ -18,6 +18,6 @@ Gem::Specification.new do |s|
18
18
  s.metadata = { "logstash_plugin" => "true", "logstash_group" => "filter" }
19
19
 
20
20
  # Gem dependencies
21
- s.add_runtime_dependency "logstash-core-plugin-api", "~> 1.8"
21
+ s.add_runtime_dependency "logstash-core-plugin-api", "~> 2.0"
22
22
  s.add_development_dependency 'logstash-devutils'
23
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-filter-cidrtagmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - svdasein
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-30 00:00:00.000000000 Z
11
+ date: 2017-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstash-core-plugin-api
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.8'
19
+ version: '2.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.8'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: logstash-devutils
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -57,7 +57,7 @@ files:
57
57
  - spec/spec_helper.rb
58
58
  homepage: https://github.com/svdasein/cidrtagmap
59
59
  licenses:
60
- - Apache License (2.0)
60
+ - Apache-2.0
61
61
  metadata:
62
62
  logstash_plugin: 'true'
63
63
  logstash_group: filter
@@ -77,7 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
77
  version: '0'
78
78
  requirements: []
79
79
  rubyforge_project:
80
- rubygems_version: 2.4.8
80
+ rubygems_version: 2.5.1
81
81
  signing_key:
82
82
  specification_version: 4
83
83
  summary: Filter adds tags to netflow records in logstash based on a static table of