Skip to content
API Documentation
BastionGuard™
make_ads_rules.py
Go to the documentation of this file.
1import requests
2import re
3import ipaddress
4import datetime
5import os
6
7lists = ( \
8 "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts",
9 "https://mirror1.malwaredomains.com/files/justdomains",
10 "https://sysctl.org/cameleon/hosts",
11 "https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist",
12 "https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt",
13 "https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt",
14 "https://hosts-file.net/ad_servers.txt" )
15
16domains = {}
17
18for url in lists:
19 print "Downloading %s ..." % url
20 r = requests.get(url)
21 if r.status_code != 200:
22 print "Error, status code %d" % r.status_code
23 continue
24
25 for line in r.text.split("\n"):
26 line = line.strip()
27 if line == "":
28 continue
29
30 elif line[0] == "#":
31 continue
32
33 for part in re.split(r'\s+', line):
34 part = part.strip()
35 if part == "":
36 continue
37
38 try:
39 duh = ipaddress.ip_address(part)
40 except ValueError:
41 if part != "localhost":
42 domains[part] = 1
43
44print "Got %d unique domains, saving as rules to ./rules/ ..." % len(domains)
45
46os.system("mkdir -p rules")
47
48idx = 0
49for domain, _ in domains.iteritems():
50 with open("rules/adv-%d.json" % idx, "wt") as fp:
51 tpl = """
52{
53 "created": "%s",
54 "updated": "%s",
55 "name": "deny-adv-%d",
56 "enabled": true,
57 "action": "deny",
58 "duration": "always",
59 "operator": {
60 "type": "simple",
61 "operand": "dest.host",
62 "data": "%s"
63 }
64}"""
65 now = datetime.datetime.utcnow().isoformat("T") + "Z"
66 data = tpl % ( now, now, idx, domain )
67 fp.write(data)
68
69 idx = idx + 1