logstash-filter-spamhaus 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 57ef1072ecdea8b4c4f5ef566ce7b2abd4bff8a2
4
+ data.tar.gz: 6fbabf9d0a966f85130bf6b7a0cf7c2e718c4104
5
+ SHA512:
6
+ metadata.gz: e2e89dab957e11cd0c067ae70076d776cf3dfb8e45f0717059a45bcbb7df468c8a211efa747fd5a81cf1ec98c196530d323b45af36465b2dbf7eb27da3736c53
7
+ data.tar.gz: 6d4c7d27f5f75b2513ec2a2d35b49849d3086cca92304f3b5259dcf36c508023d5f82db4dd8e550fef088e87b6b3f0ffc7b2dcbe8e91dafb8d745b0f54f37f7c
@@ -0,0 +1,3 @@
1
+ ## 1.0.0
2
+ - First Release
3
+
@@ -0,0 +1,10 @@
1
+ The following is a list of people who have contributed ideas, code, bug
2
+ reports, or in general have helped logstash along its way.
3
+
4
+ Contributors:
5
+ * Fabio 'MrWHO' Torchetti (fabbari)
6
+
7
+ Note: If you've sent us patches, bug reports, or otherwise contributed to
8
+ Logstash, and you aren't on the list above and want to be, please let us know
9
+ and we'll make sure you're here. Contributions from folks like you are what make
10
+ open source awesome.
@@ -0,0 +1,2 @@
1
+ # logstash-filter-spamhaus
2
+ This filter allows the querying the SpamHaus Zen list for a specific IP.
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright (c) 2015–2015 ElaWedjaa Inc <http://www.wedjaa.net>
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
@@ -0,0 +1,5 @@
1
+ Logstash SpamHaus Filter
2
+ Copyright 2015-2015 Wedjaa Inc
3
+
4
+ This product includes software developed by The Apache Software
5
+ Foundation (http://www.apache.org/).
@@ -0,0 +1,79 @@
1
+ # Logstash SpamHaus Plugin
2
+
3
+ This is a plugin for [Logstash](https://github.com/elastic/logstash).
4
+
5
+ It is fully free and fully open source. The license is Apache 2.0, meaning you are pretty much free to use it however you want in whatever way.
6
+
7
+ ## Documentation
8
+
9
+ This filter allows you to lookup an IP address in the SpamHaus ZEN list. This list includes all of the SpamHaus blacklists.
10
+
11
+ This filter can be used in the simplest form as follows:
12
+
13
+ ```
14
+ spamhaus {}
15
+ ```
16
+
17
+ It will run with the following defaults:
18
+
19
+ * It will loookup the IP address in the `clientip` field
20
+ * It will tag IPs in the blacklist as `spamhaus_blacklisted`
21
+ * It will tag IPs not in the blacklist as `spamhaus_whitelisted`
22
+
23
+ If an IP is blacklisted it will add a `spamhaus` object to the event with the following properties:
24
+ * `code`: it's the SpamHaus code for the blocking reason
25
+ * `blocklist`: it's the SpamHaus blacklist name where this IP was found
26
+
27
+ ## Configuration
28
+
29
+ The filter accepts the following configuration options:
30
+
31
+ * `ip` - It's the field that contains the IP address to resolve. *Default: `clientip`*.
32
+ * `tag_blacklisted` - The tag to add to the event in case the IP is blacklisted. *Default: `spamhaus_blacklisted`*.
33
+ * `tag_whitelisted` - The tag to add to the event in case the IP is not in any blacklist. *Default: `spamhaus_whitelisted`*.
34
+
35
+ A more involved filter configuration could look like:
36
+
37
+ ```
38
+ spamhaus {
39
+ ip => 'client_ip'
40
+ tag_blacklisted => 'blacklisted'
41
+ tag_whitelisted => 'whitelisted'
42
+ }
43
+ ```
44
+
45
+ ## Missing functionality
46
+
47
+ This is a bare minimum implementation of the filter. Some things could be good to implement:
48
+
49
+ * Lookup multiple IPs
50
+ * Select the blacklists to lookup
51
+
52
+ ## Compiling and testing
53
+
54
+ Compiling, deploying and testing this plugin requires JRuby. Not only - you want to make sure that the bundle, rake and rspec commands are run using JRuby.
55
+
56
+ If you start seeing errors that look like:
57
+
58
+ ```
59
+ Could not find gem 'logstash-devutils (>= 0.0.18) ruby' in any of the gem sources listed in your Gemfile or available on this machine.
60
+ ```
61
+
62
+ *notice the `ruby` bit after the version* - try and make it explicit that you want to use the JRuby versions of the commands:
63
+
64
+ ```
65
+ alias rspec="jruby -S rspec"
66
+ alias rake="jruby -S rake"
67
+ alias bundle="jruby -S bundle"
68
+ ```
69
+
70
+ Once you specified these aliases things should start working as expected -- unless you don't have jruby in your path.
71
+
72
+ Test it our by running `bundle install && bundle exec rspec` - it should produce some output, ending with the test results:
73
+
74
+ ```
75
+ Finished in 0.382 seconds (files took 4.03 seconds to load)
76
+ 2 examples, 0 failures
77
+
78
+ Randomized with seed xxxxx
79
+ ```
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+ require 'charon'
5
+
6
+ # This filter will populate the 'spamhaus' field in the event
7
+ # with information about the IP extracted from the event. The
8
+ # IP field can be specified in the configuration of the filter
9
+ # by setting 'ip' to the field name.
10
+ class LogStash::Filters::SpamHaus < LogStash::Filters::Base
11
+
12
+ config_name "spamhaus"
13
+
14
+ config :ip, :validate => :string, :default => "clientip"
15
+ config :tag_blacklisted, :validate => :string, :default => "spamhaus_blacklisted"
16
+ config :tag_notfound, :validate => :string, :default => "spamhaus_whitelisted"
17
+
18
+
19
+ public
20
+ def register
21
+ # Add instance variables
22
+ end # def register
23
+
24
+ public
25
+ def filter(event)
26
+
27
+ if @ip
28
+ lookupip = event[@ip]
29
+ if lookupip && lookupip =~ /^(\d{1,3}[\.]{0,1}){4}$/
30
+ event['tags'] ||= []
31
+ result = Charon.query lookupip
32
+ if result
33
+ event['spamhaus'] = {
34
+ "code" => result[0],
35
+ "blocklist" => result[1]
36
+ }
37
+ event['tags'] << @tag_blacklisted
38
+ else
39
+ event['tags'] << @tag_notfound
40
+ end
41
+ end
42
+ end
43
+
44
+ filter_matched(event)
45
+ end # def filter
46
+ end # class LogStash::Filters::SpamHaus
@@ -0,0 +1,25 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'logstash-filter-spamhaus'
3
+ # s.platform = 'java'
4
+ s.version = '1.0.1'
5
+ s.licenses = ['Apache License (2.0)']
6
+ s.summary = "This filter will lookup a given IP in the SpamHaus ZEN list and populate the event with the information found on the list."
7
+ 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 gemname. This gem is not a stand-alone program"
8
+ s.authors = ["Wedjaa"]
9
+ s.email = 'info@wedjaa.net'
10
+ s.homepage = "http://github.com/WedjaaOpen/logstash-filter-spamhaus"
11
+ s.require_paths = ["lib"]
12
+
13
+ # Files
14
+ s.files = Dir['lib/**/*','spec/**/*','vendor/**/*','*.gemspec','*.md','CONTRIBUTORS','Gemfile','LICENSE','NOTICE.TXT']
15
+ # Tests
16
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
17
+
18
+ # Special flag to let us know this is actually a logstash plugin
19
+ s.metadata = { "logstash_plugin" => "true", "logstash_group" => "filter" }
20
+
21
+ # Gem dependencies
22
+ s.add_runtime_dependency "logstash-core", ">= 2.0.0", "< 3.0.0"
23
+ s.add_runtime_dependency "charon", "~> 1.0"
24
+ s.add_development_dependency 'logstash-devutils', '>= 0.0.18'
25
+ end
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require "logstash/filters/spamhaus"
4
+
5
+ describe LogStash::Filters::SpamHaus do
6
+ describe "Spamhaus should fail on local addresses" do
7
+ let(:config) do <<-CONFIG
8
+ filter {
9
+ spamhaus {
10
+ ip => "client_ip"
11
+ }
12
+ }
13
+ CONFIG
14
+ end
15
+
16
+ sample('client_ip' => '192.168.66.1' ) do
17
+ expect(subject).to include("client_ip")
18
+ expect(subject['client_ip']).to eq('192.168.66.1')
19
+ expect(subject).to include("tags")
20
+ expect(subject['tags']).to include('spamhaus_whitelisted')
21
+ end
22
+ end
23
+
24
+ describe "Spamhaus should report 185.106.92.33 as blacklisted" do
25
+ let(:config) do <<-CONFIG
26
+ filter {
27
+ spamhaus {
28
+ ip => "client_ip"
29
+ }
30
+ }
31
+ CONFIG
32
+ end
33
+
34
+ sample('client_ip' => '185.106.92.33' ) do
35
+ expect(subject).to include("client_ip")
36
+ expect(subject['client_ip']).to eq('185.106.92.33')
37
+ expect(subject).to include('spamhaus')
38
+ expect(subject['spamhaus']).to include('code')
39
+ expect(subject['spamhaus']['code']).to eq(4)
40
+ expect(subject['spamhaus']).to include('blocklist')
41
+ expect(subject['spamhaus']['blocklist']).to eq('Exploits Block List')
42
+ expect(subject).to include("tags")
43
+ expect(subject['tags']).to include('spamhaus_blacklisted')
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,2 @@
1
+ # encoding: utf-8
2
+ require "logstash/devutils/rspec/spec_helper"
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logstash-filter-spamhaus
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Wedjaa
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: logstash-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 3.0.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 2.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 3.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: charon
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: logstash-devutils
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.0.18
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 0.0.18
61
+ description: This gem is a logstash plugin required to be installed on top of the
62
+ Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not
63
+ a stand-alone program
64
+ email: info@wedjaa.net
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - CHANGELOG.md
70
+ - CONTRIBUTORS
71
+ - DEVELOPER.md
72
+ - Gemfile
73
+ - LICENSE
74
+ - NOTICE.TXT
75
+ - README.md
76
+ - lib/logstash/filters/spamhaus.rb
77
+ - logstash-filter-spamhaus.gemspec
78
+ - spec/filters/spamhaus_spec.rb
79
+ - spec/spec_helper.rb
80
+ homepage: http://github.com/WedjaaOpen/logstash-filter-spamhaus
81
+ licenses:
82
+ - Apache License (2.0)
83
+ metadata:
84
+ logstash_plugin: 'true'
85
+ logstash_group: filter
86
+ post_install_message:
87
+ rdoc_options: []
88
+ require_paths:
89
+ - lib
90
+ required_ruby_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ requirements: []
101
+ rubyforge_project:
102
+ rubygems_version: 2.2.2
103
+ signing_key:
104
+ specification_version: 4
105
+ summary: This filter will lookup a given IP in the SpamHaus ZEN list and populate
106
+ the event with the information found on the list.
107
+ test_files:
108
+ - spec/filters/spamhaus_spec.rb
109
+ - spec/spec_helper.rb