logstash-input-blueliv 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c63d09ff15c1485740cd2f3ac3044e46caa5d060
4
- data.tar.gz: 16d60dfe1583afcf34430d281cca0fd096eeb57c
3
+ metadata.gz: 239a66eaf18c2e97d86c305e8150ea1c3600656e
4
+ data.tar.gz: d463808c18f1980f338dc13c4308c2ff4942e79a
5
5
  SHA512:
6
- metadata.gz: b9632f2ff75ef80e39fcb0fdf21fc1cf9734de2ae8dcbb4f2cc8639f2f0c86f647eaf5cc0588d600a607e69ef21c1fb1dac86c11836082e75e7fbcb46046785f
7
- data.tar.gz: 8e94b40686619ba9cac30f4dc359503e8e47149d98b769d0707571f9d78377ea6f5e09d891b1b51e5fc47cc4c92bf9de258617a8e66b32fa878063bfa4db6c8b
6
+ metadata.gz: 287345891c6a327df5d89630b95f05d425d4e25c3f54538f1355c017e587915a372cb446aef990fcd758bf8b36c8ee1880153d4d786b9624f4023cd16148fdfc
7
+ data.tar.gz: 8478591f6323e46467bf516ac5dae592f013499b2cd112ca113e19680ea9227916263c8f88d9c8eb92faab4ebc2dbec1e33a800f057edff02ee593720124d2e1
data/README.md CHANGED
@@ -6,12 +6,19 @@ This is an input plugin for [Logstash](https://github.com/elasticsearch/logstash
6
6
 
7
7
  * API key (get yours <a href="https://map.blueliv.com" target="_blank">here</a>)
8
8
  * Logstash >= 1.5.0
9
- * 1.5 GB of RAM of heap size for Logstash (``-Xmx1500m``)
9
+ * ElasticSearch >= 2.0.0 (Tested on 2.4.0)
10
10
 
11
11
  ## Installing
12
12
 
13
13
  ```
14
- $LS_HOME/bin/plugin install logstash-input-blueliv
14
+ # In logstash version < 2.3
15
+
16
+ $LS_HOME/bin/plugin install --version 1.1.0 logstash-input-blueliv
17
+
18
+ # In logstash version >2.3
19
+ $LS_HOME/bin/logstash-plugin install logstash-input-blueliv
20
+
21
+
15
22
  ```
16
23
 
17
24
  ### Configuration
@@ -23,21 +30,33 @@ This plugin has the following configuration parameters:
23
30
  + ``http_timeout``(default: ``500`` seconds): HTTP timeout for each API call.
24
31
  + ``feeds``: It is a [hash](http://ruby-doc.org/core-1.9.3/Hash.html) that specifies the parameters to access each one of our feeds. Each feed may be configured with the following properties:
25
32
  + ``active`` (default: ``false``): if the feed is active or not.
26
- + ``feed_type`` (default: ``test``): the type of the feed that you want. For **Crime Servers** apart from ``test`` (for _debug_ purposes) you only have ``all``. As of **Bot IPs** you may choose between ``non_pos`` (all BotIPs **but** the ones from Point-of-Sale), ``pos`` (only from POS) or ``full`` (all of them) feed.
33
+ + ``feed_type`` (default: ``test``): the type of the feed that you want. For **Crime Servers** apart from ``test`` (for _debug_ purposes) you have ``recent`` (1 hour updates) and ``last`` (15 minutes updates). As of **Bot IPs** you may choose between ``non_pos`` (all BotIPs **but** the ones from Point-of-Sale), ``pos`` (only from POS) or ``full`` (all of them) feed.
27
34
  + ``interval`` (default: ``600`` seconds for BotIPs and ``900`` seconds for Crime Servers). The intervall of polling data from our API.
28
35
 
29
36
  The default configuration for ``feeds`` field is the following:
30
37
  ```javascript
31
- "crimeservers" => {
38
+ {
39
+ "attacks" => {
32
40
  "active" => false,
33
- "feed_type" => "test",
34
- "interval" => 900,
41
+ "feed_type" => "recent",
42
+ "interval" => 600
35
43
  },
36
44
  "botips" => {
37
45
  "active" => false,
38
46
  "feed_type" => "test",
39
47
  "interval" => 600
48
+ },
49
+ "crimeservers" => {
50
+ "active" => true,
51
+ "feed_type" => "test",
52
+ "interval" => 900
53
+ },
54
+ "malwares" => {
55
+ "active" => false,
56
+ "feed_type" => "recent",
57
+ "interval" => 3600
40
58
  }
59
+ }
41
60
  ```
42
61
 
43
62
 
@@ -48,18 +67,26 @@ input {
48
67
  blueliv {
49
68
  api_key => "<YOUR API KEY>"
50
69
  feeds => {
70
+ "attacks" => {
71
+ "active" => "true"
72
+ "feed_type" => "recent"
73
+ }
51
74
  "botips" => {
52
- "active" => true
75
+ "active" => "true"
53
76
  "feed_type" => "non_pos"
54
77
  }
55
78
  "crimeservers" => {
56
- "active" => true
57
- "feed_type" => "all"
79
+ "active" => "true"
80
+ "feed_type" => "recent"
81
+ }
82
+ "malwares" => {
83
+ "active" => "true"
84
+ "feed_type" => "recent"
58
85
  }
59
86
  }
60
- }
61
87
  }
62
88
  ```
89
+
63
90
  Be aware that if you do not specify a given field, the default value will be configured. In this case, we did not touch the ``interval`` field for the feeds, so the defaults will apply.
64
91
 
65
92
  ## Need Help?
@@ -8,7 +8,7 @@ require "rest-client"
8
8
  require "securerandom"
9
9
 
10
10
 
11
- USER_AGENT = "Logstash v0.1.2"
11
+ USER_AGENT = "Logstash 1.1.0"
12
12
  API_CLIENT = "6ee37a93-d064-464b-b4c1-c37e9656273f"
13
13
 
14
14
  RESOURCES = {
@@ -32,35 +32,69 @@ RESOURCES = {
32
32
  :endpoint => "/v1/ip",
33
33
  :feeds => {
34
34
  :non_pos => {
35
- 600 => "/recent",
36
- 3600 => "/last"
35
+ 600 => "/last",
36
+ 3600 => "/recent"
37
37
  },
38
38
  :pos => {
39
- 600 => "/pos/recent",
40
- 3600 => "/pos/last"
39
+ 600 => "/pos/last",
40
+ 3600 => "/pos/recent"
41
41
  },
42
42
  :full => {
43
- 600 => "/full/recent",
44
- 3600 => "/full/last"
43
+ 600 => "/full/last",
44
+ 3600 => "/full/recent"
45
45
  },
46
46
  :test => {
47
47
  600 => "/test"
48
48
  }
49
49
  }
50
+ },
51
+ :attacks => {
52
+ :items => "attacks",
53
+ :endpoint => "/v1/attack",
54
+ :feeds => {
55
+ :last => {
56
+ 1800 => "/last"
57
+ },
58
+ :recent => {
59
+ 10800 => "/recent"
60
+ }
61
+ }
62
+ },
63
+ :malwares => {
64
+ :items => "malwares",
65
+ :endpoint => "/v1/malware",
66
+ :feeds => {
67
+ :last => {
68
+ 600 => "/last"
69
+ },
70
+ :recent => {
71
+ 3600 => "/recent"
72
+ }
73
+ }
50
74
  }
51
75
  }
52
76
 
53
77
  DEFAULT_CONFIG = {
78
+ "attacks" => {
79
+ "active" => false,
80
+ "feed_type" => "recent",
81
+ "interval" => 600
82
+ },
83
+ "botips" => {
84
+ "active" => false,
85
+ "feed_type" => "test",
86
+ "interval" => 600
87
+ },
54
88
  "crimeservers" => {
55
- "active" => true,
56
- "feed_type" => "test",
57
- "interval" => 900
58
- },
59
- "botips" => {
60
- "active" => false,
61
- "feed_type" => "test",
62
- "interval" => 600
63
- }
89
+ "active" => true,
90
+ "feed_type" => "test",
91
+ "interval" => 900
92
+ },
93
+ "malwares" => {
94
+ "active" => false,
95
+ "feed_type" => "recent",
96
+ "interval" => 3600
97
+ }
64
98
  }
65
99
 
66
100
  INITIALIZE_FILE = "blueliv.ini"
@@ -93,8 +127,8 @@ class LogStash::Inputs::Blueliv < LogStash::Inputs::Base
93
127
  def run(queue)
94
128
  threads = []
95
129
  @feeds.each do |name, conf|
96
- if feeds[name]["active"] == 'true'
97
- url, interval = get_url(name, @feeds[name]["feed_type"], @feeds[name]["interval"])
130
+ if conf["active"] == 'true'
131
+ url, interval = get_url(name, conf["feed_type"], conf["interval"])
98
132
  threads << Thread.new{get_feed_each(queue, name, url, interval)}
99
133
  end
100
134
  end
@@ -165,10 +199,11 @@ class LogStash::Inputs::Blueliv < LogStash::Inputs::Base
165
199
  response = client.get("#{url}?key=#{API_CLIENT}", :Authorization => @auth, :timeout => @timeout,
166
200
  :user_agent => USER_AGENT, :headers => {"X-API-CLIENT" => API_CLIENT})
167
201
  response_json = JSON.parse(response.body)
168
- items = response_json[RESOURCES[name.to_sym][:items]]
202
+ keyItems = RESOURCES[name.to_sym][:items]
203
+ items = response_json[keyItems]
169
204
  items.each do |it|
170
- it["location"] = [it["longitude"].to_f, it["latitude"].to_f]
171
- collection = RESOURCES[name.to_sym][:items].downcase
205
+ collection = keyItems.downcase
206
+ it = send("map_"+collection, it)
172
207
  it["@collection"] = collection
173
208
  it["document_id"] = if it.has_key?("_id") then it["_id"] else SecureRandom.base64(32) end
174
209
  it.delete("_id") if it.has_key?("_id")
@@ -198,6 +233,7 @@ class LogStash::Inputs::Blueliv < LogStash::Inputs::Base
198
233
  end
199
234
  rescue Exception => e
200
235
  @logger.info("Will retry in #{FAILURE_SLEEP} seconds")
236
+ @logger.info(e.message+"\n"+e.backtrace.join("\n"))
201
237
  sleep(FAILURE_SLEEP)
202
238
  end
203
239
  end
@@ -207,4 +243,35 @@ class LogStash::Inputs::Blueliv < LogStash::Inputs::Base
207
243
  RestClient
208
244
  end
209
245
 
246
+ private
247
+ def map_global_location(it)
248
+ it["location"] = [it["longitude"].to_f, it["latitude"].to_f]
249
+ return it
250
+ end
251
+
252
+ def map_ips(it)
253
+ map_global_location(it)
254
+ end
255
+
256
+ def map_crimeservers(it)
257
+ map_global_location(it)
258
+ end
259
+
260
+ def map_attacks(it)
261
+ source = it["source"];
262
+ #map_global_location(source);
263
+ it["location"] = [source["longitude"].to_f, source["latitude"].to_f]
264
+ firstEvent = DateTime.parse(it["firstEvent"])
265
+ lastEvent = DateTime.parse(it["lastEvent"])
266
+ duration = ((lastEvent - firstEvent)* 24 * 60 * 60).to_i
267
+ if duration < 0
268
+ duration = -duration
269
+ end
270
+ it[:duration] = duration
271
+ return it
272
+ end
273
+ def map_malwares(it)
274
+ it["_id"] = it["sha256"]
275
+ return it
276
+ end
210
277
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "logstash-input-blueliv"
3
- s.version = "1.0.1"
3
+ s.version = "1.1.0"
4
4
  s.licenses = ["Apache License (2.0)"]
5
5
  s.summary = "This plugin allows users to access Blueliv Crime Servers and Bot IPs feeds."
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/plugin install logstash-input-blueliv. This gem is not a stand-alone program"
metadata CHANGED
@@ -1,78 +1,78 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-blueliv
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Blueliv
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-19 00:00:00.000000000 Z
11
+ date: 2017-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: logstash-core
15
- version_requirements: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '>='
18
- - !ruby/object:Gem::Version
19
- version: 1.4.0
20
14
  requirement: !ruby/object:Gem::Requirement
21
15
  requirements:
22
- - - '>='
16
+ - - ">="
23
17
  - !ruby/object:Gem::Version
24
18
  version: 1.4.0
19
+ name: logstash-core
25
20
  prerelease: false
26
21
  type: :runtime
27
- - !ruby/object:Gem::Dependency
28
- name: logstash-codec-plain
29
22
  version_requirements: !ruby/object:Gem::Requirement
30
23
  requirements:
31
- - - '>='
24
+ - - ">="
32
25
  - !ruby/object:Gem::Version
33
- version: '0'
26
+ version: 1.4.0
27
+ - !ruby/object:Gem::Dependency
34
28
  requirement: !ruby/object:Gem::Requirement
35
29
  requirements:
36
- - - '>='
30
+ - - ">="
37
31
  - !ruby/object:Gem::Version
38
32
  version: '0'
33
+ name: logstash-codec-plain
39
34
  prerelease: false
40
35
  type: :runtime
41
- - !ruby/object:Gem::Dependency
42
- name: rest-client
43
36
  version_requirements: !ruby/object:Gem::Requirement
44
37
  requirements:
45
- - - ~>
38
+ - - ">="
46
39
  - !ruby/object:Gem::Version
47
- version: 1.8.0
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
48
42
  requirement: !ruby/object:Gem::Requirement
49
43
  requirements:
50
- - - ~>
44
+ - - "~>"
51
45
  - !ruby/object:Gem::Version
52
46
  version: 1.8.0
47
+ name: rest-client
53
48
  prerelease: false
54
49
  type: :runtime
55
- - !ruby/object:Gem::Dependency
56
- name: logstash-devutils
57
50
  version_requirements: !ruby/object:Gem::Requirement
58
51
  requirements:
59
- - - '>='
52
+ - - "~>"
60
53
  - !ruby/object:Gem::Version
61
- version: '0'
54
+ version: 1.8.0
55
+ - !ruby/object:Gem::Dependency
62
56
  requirement: !ruby/object:Gem::Requirement
63
57
  requirements:
64
- - - '>='
58
+ - - ">="
65
59
  - !ruby/object:Gem::Version
66
60
  version: '0'
61
+ name: logstash-devutils
67
62
  prerelease: false
68
63
  type: :development
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
69
  description: This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install logstash-input-blueliv. This gem is not a stand-alone program
70
70
  email: community@blueliv.com
71
71
  executables: []
72
72
  extensions: []
73
73
  extra_rdoc_files: []
74
74
  files:
75
- - .gitignore
75
+ - ".gitignore"
76
76
  - CHANGELOG.md
77
77
  - Gemfile
78
78
  - LICENSE
@@ -93,17 +93,17 @@ require_paths:
93
93
  - lib
94
94
  required_ruby_version: !ruby/object:Gem::Requirement
95
95
  requirements:
96
- - - '>='
96
+ - - ">="
97
97
  - !ruby/object:Gem::Version
98
98
  version: '0'
99
99
  required_rubygems_version: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  requirements: []
105
105
  rubyforge_project:
106
- rubygems_version: 2.4.5
106
+ rubygems_version: 2.4.8
107
107
  signing_key:
108
108
  specification_version: 4
109
109
  summary: This plugin allows users to access Blueliv Crime Servers and Bot IPs feeds.