unspam 0.0.2 → 0.1.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: 8f524665f5d4131c5e6d0696462bc4aaec71efd4
4
- data.tar.gz: 645eafa5e1b6c66fc91f17199c6780a7004083af
3
+ metadata.gz: c3af9375e8a756b3389903f1fa2c8c8108fd8e10
4
+ data.tar.gz: 61e660aa192baa1a9bf338371ad063d4586c0517
5
5
  SHA512:
6
- metadata.gz: b58da993c169a7b52dc86947d1a78af1e9f1614f9027129d75cddf7442c60f0ebf88571ba5431c7a8bf0590c88f80bc2713389d4a4877e948cba0929b06fb555
7
- data.tar.gz: 56dbfb6e4caa5c638d6c98ba7714565c771bea63e5df051208e609f3f1add2992bc373cd9e3f075e2b9ad957b21990467f6db69a6b7c280db9d61e7ce619e2d8
6
+ metadata.gz: 749981ed9fc33f20ca341b9f8034f96b901f9f83e42ee8fd71db85b50d7b42d4c6acc676e054ebfcdf88a69e919781759aeb1eac0da0c1cb78d189a86801e079
7
+ data.tar.gz: 4aed52af696f1e2a153128f2db90a9a7f490695d373241bb7a22d5e922732b64ca611f138219faba914d97636fcb51d0218ddd5d91d6bcb1f0a3e328b332f6a4
data/README.md CHANGED
@@ -1,29 +1,83 @@
1
1
  # Unspam
2
2
 
3
- TODO: Write a gem description
3
+ Ultra simple tool to create postfix-compatible IP-blocklists based on AS-Numbers or IP-addresses. This is a very brutal way and should be limited to known spam providers.
4
4
 
5
5
  ## Installation
6
+
7
+ Install Ruby 1.9.3+
8
+ then:
6
9
 
7
- Add this line to your application's Gemfile:
10
+ $ gem install unspam
8
11
 
9
- gem 'unspam'
12
+ ## Usage/Example
10
13
 
11
- And then execute:
14
+ So you received another "Casino"-spam from e.g.
12
15
 
13
- $ bundle
16
+ ```
17
+ Received: from ab19c8d9.dutxng.net (171.25.200.217.static.clcksthrough.com [171.25.200.217]) by …
18
+ ```
14
19
 
15
- Or install it yourself as:
20
+ After some research you come to the conclusion, that the ISP behind 171.25.200.217 looks like a spam hoster that sent you spam mails for years and don't react on abuse notifications. It's time to let it go!
16
21
 
17
- $ gem install unspam
18
22
 
19
- ## Usage
23
+ ```shell
24
+ $ unspam nets 171.25.200.217 REJECT
25
+ 171.25.200.0/23 REJECT
26
+ 178.20.96.0/21 REJECT
27
+ 185.51.232.0/22 REJECT
28
+ 185.57.88.0/22 REJECT
29
+ 188.64.40.0/22 REJECT
30
+ 188.64.44.0/23 REJECT
31
+ 188.64.46.0/23 REJECT
32
+ 193.104.98.0/24 REJECT
33
+ 193.105.250.0/24 REJECT
34
+ 193.22.255.0/24 REJECT
35
+ 193.25.114.0/23 REJECT
36
+ 195.130.215.0/24 REJECT
37
+ 195.225.148.0/22 REJECT
38
+ 195.5.120.0/23 REJECT
39
+ 195.82.152.0/23 REJECT
40
+ 2a00:5300:0:1::/64 REJECT
41
+ 2a00:5300:0:2::/64 REJECT
42
+ 2a00:5300:0:3::/64 REJECT
43
+ 2a00:5300::/32 REJECT
44
+ 2a00:fa40::/32 REJECT
45
+ 5.44.100.0/22 REJECT
46
+ 5.44.108.0/22 REJECT
47
+ 5.44.96.0/22 REJECT
48
+ 81.88.16.0/21 REJECT
49
+ 81.88.24.0/22 REJECT
50
+ 81.88.28.0/22 REJECT
51
+ 89.22.96.0/19 REJECT
52
+ 91.203.128.0/22 REJECT
53
+ 91.203.212.0/22 REJECT
54
+ 91.206.142.0/23 REJECT
55
+ 91.207.94.0/23 REJECT
56
+ 91.226.88.0/22 REJECT
57
+ 91.227.246.0/23 REJECT
58
+ 91.235.208.0/22 REJECT
59
+ ```
60
+
61
+ All announed prefixes of that spam ISP will be looked up using the [RIPE.net RESTful looking glass](https://stat.ripe.net/docs/data_api). Your optional message will appear right behind the net so you can easily paste/add this to your postfix client_checks file or wrap some shell commands around it.
62
+
63
+ You can use an IP-Address or AS-number to lookup the result.
64
+
65
+ e.g.
66
+
67
+ ```shell
68
+ $ unspam net AS31342
69
+ ```
70
+
71
+ will produce the identical result.
72
+
73
+ ## Tricks
20
74
 
21
- TODO: Write usage instructions here
75
+ To see all announced IP-networks of Amazon AWS, DigitalOcean and Hetzner, try:
22
76
 
23
- ## Contributing
77
+ ```shell
78
+ $ unspam nets $( dig a +short amazonaws.com | head -n1 )
79
+ $ unspam nets $( dig a +short digitalocean.com | head -n1 )
80
+ $ unspam nets $( dig a +short hetzner.de | head -n1 )
81
+ ```
24
82
 
25
- 1. Fork it ( https://github.com/[my-github-username]/unspam/fork )
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create a new Pull Request
83
+ Enjoy!
data/lib/unspam/cli.rb CHANGED
@@ -2,6 +2,7 @@ require 'thor'
2
2
  require 'json'
3
3
  require 'httparty'
4
4
  require 'ipaddr'
5
+ require 'netaddr'
5
6
 
6
7
  module Unspam
7
8
  class CLI < Thor
@@ -37,10 +38,15 @@ module Unspam
37
38
  end
38
39
 
39
40
  def lookup_by_asn(asn)
40
- response = HTTParty.get "https://stat.ripe.net/data/announced-prefixes/data.json?resource=#{asn}&min_peers_seeing=1"
41
+ response = HTTParty.get "https://stat.ripe.net/data/announced-prefixes/data.json?resource=#{asn}&min_peers_seeing=2"
41
42
  result = JSON.parse(response.body)
42
43
 
43
- result['data']['prefixes'].map { |h| h['prefix'] }.sort.each do |prefix|
44
+ prefixes = Array.new
45
+ result['data']['prefixes'].map { |h| h['prefix'] }.each do |prefix|
46
+ prefixes.push(prefix)
47
+ end
48
+
49
+ NetAddr.merge(prefixes.map{ |ip| NetAddr::CIDR.create(ip) }, :Short => true).each do |prefix|
44
50
  printf("%-25s%5s\n", prefix, @msg)
45
51
  end
46
52
  end
@@ -1,3 +1,3 @@
1
1
  module Unspam
2
- VERSION = '0.0.2'
2
+ VERSION = '0.1.0'
3
3
  end
data/unspam.gemspec CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency 'thor'
22
22
  spec.add_dependency 'httparty'
23
+ spec.add_dependency 'netaddr'
23
24
 
24
25
  spec.add_development_dependency 'bundler', '~> 1.6'
25
26
  spec.add_development_dependency 'rake'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unspam
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roland Moriz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-03 00:00:00.000000000 Z
11
+ date: 2015-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: netaddr
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -105,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
119
  version: '0'
106
120
  requirements: []
107
121
  rubyforge_project:
108
- rubygems_version: 2.2.2
122
+ rubygems_version: 2.4.5
109
123
  signing_key:
110
124
  specification_version: 4
111
125
  summary: returns IP prefixes by ASN.