├── .gitignore ├── .travis-ci ├── Dockerfile ├── conf │ ├── unbound-nxdomain.conf │ └── unbound.conf ├── deploy.key.enc ├── deploy.sh └── dns-zone-blacklist-test.sh ├── .travis.yml ├── LICENSE ├── README.md ├── README.template.md ├── bind ├── bind-nxdomain.blacklist ├── bind-nxdomain.blacklist.checksum ├── null.zone.file ├── zones.blacklist └── zones.blacklist.checksum ├── build.js ├── custom.blacklist.json ├── custom.whitelist.json ├── dnsmasq ├── dnsmasq-server.blacklist ├── dnsmasq-server.blacklist.checksum ├── dnsmasq.blacklist └── dnsmasq.blacklist.checksum ├── package-lock.json ├── package.json └── unbound ├── unbound-nxdomain.blacklist ├── unbound-nxdomain.blacklist.checksum ├── unbound.blacklist └── unbound.blacklist.checksum /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .travis-ci/deploy.key 3 | .travis-ci/deploy.key.pub 4 | travis-build-dir 5 | yarn-error.log 6 | yarn.lock 7 | -------------------------------------------------------------------------------- /.travis-ci/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:latest 2 | 3 | RUN apk add --no-cache bats bind bind-tools dnsmasq unbound 4 | 5 | CMD ["/dns-zone-blacklist/.travis-ci/dns-zone-blacklist-test.sh"] 6 | -------------------------------------------------------------------------------- /.travis-ci/conf/unbound-nxdomain.conf: -------------------------------------------------------------------------------- 1 | server: 2 | include: /dns-zone-blacklist/unbound/unbound-nxdomain.blacklist 3 | -------------------------------------------------------------------------------- /.travis-ci/conf/unbound.conf: -------------------------------------------------------------------------------- 1 | server: 2 | include: /dns-zone-blacklist/unbound/unbound.blacklist 3 | -------------------------------------------------------------------------------- /.travis-ci/deploy.key.enc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oznu/dns-zone-blacklist/47b5571102f830e9210f8726d08cecfcbd2de01a/.travis-ci/deploy.key.enc -------------------------------------------------------------------------------- /.travis-ci/deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Setup SSH Keys 4 | openssl aes-256-cbc -K $encrypted_b281b2f14922_key -iv $encrypted_b281b2f14922_iv -in .travis-ci/deploy.key.enc -out .travis-ci/deploy.key -d 5 | chmod 400 .travis-ci/deploy.key 6 | eval `ssh-agent -s` 7 | ssh-add .travis-ci/deploy.key 8 | 9 | # Setup Git 10 | git config --global push.default simple 11 | git config user.email "dev@oz.nu" 12 | git config user.name "oznu" 13 | 14 | # Add github remote 15 | git remote add github git@github.com:oznu/dns-zone-blacklist.git 16 | 17 | # Push any changes we made during build 18 | git add . 19 | git commit -a -m 'Automated Update' || echo "Blacklist Already Up-to-date" 20 | git push github 21 | 22 | # Clean up ssh 23 | ssh-agent -k 24 | -------------------------------------------------------------------------------- /.travis-ci/dns-zone-blacklist-test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bats 2 | 3 | @test "test bind-nxdomain.blacklist is valid bind conf" { 4 | run named-checkconf /dns-zone-blacklist/bind/zones.blacklist 5 | [ "$status" -eq 0 ] 6 | } 7 | 8 | @test "test bind-nxdomain.blacklist is a valid bind zone file" { 9 | run named-checkzone dns-zone-blacklist /dns-zone-blacklist/bind/bind-nxdomain.blacklist 10 | [ "$status" -eq 0 ] 11 | } 12 | 13 | @test "test dnsmasq.blacklist is valid dnsmasq conf" { 14 | run dnsmasq --test --conf-file=/dns-zone-blacklist/dnsmasq/dnsmasq.blacklist 15 | [ "$status" -eq 0 ] 16 | } 17 | 18 | @test "test dnsmasq-server.blacklist is valid dnsmasq conf" { 19 | run dnsmasq --test --conf-file=/dns-zone-blacklist/dnsmasq/dnsmasq-server.blacklist 20 | [ "$status" -eq 0 ] 21 | } 22 | 23 | @test "test unbound.blacklist is valid unbound conf" { 24 | run unbound-checkconf /dns-zone-blacklist/.travis-ci/conf/unbound.conf 25 | [ "$status" -eq 0 ] 26 | } 27 | 28 | @test "test unbound-nxdomain.blacklist is valid unbound conf" { 29 | run unbound-checkconf /dns-zone-blacklist/.travis-ci/conf/unbound-nxdomain.conf 30 | [ "$status" -eq 0 ] 31 | } 32 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | services: 4 | - docker 5 | 6 | node_js: 7 | - "8" 8 | 9 | git: 10 | depth: 2 11 | 12 | before_install: 13 | - export BRANCH=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo $TRAVIS_BRANCH; else echo $TRAVIS_PULL_REQUEST_BRANCH; fi) 14 | - echo "TRAVIS_BRANCH=$TRAVIS_BRANCH, PR=$PR, BRANCH=$BRANCH" 15 | - git checkout $BRANCH 16 | 17 | before_script: 18 | - docker build -t dns-zone-test .travis-ci/ 19 | - node build.js 20 | 21 | script: 22 | - docker run --rm -v $TRAVIS_BUILD_DIR:/dns-zone-blacklist dns-zone-test 23 | 24 | deploy: 25 | provider: script 26 | script: .travis-ci/deploy.sh 27 | skip_cleanup: true 28 | on: 29 | branch: master 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright © 2020 Steven Black 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the “Software”), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 9 | of the Software, and to permit persons to whom the Software is furnished to do 10 | so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Travis branch](https://img.shields.io/travis/oznu/dns-zone-blacklist/master.svg)](https://travis-ci.org/oznu/dns-zone-blacklist) 2 | 3 | # DNS Zone Blacklist Generator 4 | 5 | This project generates a zone file for [BIND](https://en.wikipedia.org/wiki/BIND), [Dnsmasq](https://en.wikipedia.org/wiki/Dnsmasq) and [Unbound](https://en.wikipedia.org/wiki/Unbound_(DNS_server)) DNS servers using data from the [StevenBlack/hosts](https://github.com/StevenBlack/hosts) project. The generated zone files can be used to block ads and malware for an entire network when used with a local DNS server. 6 | 7 | DNS based ad blockers can support wildcard entries. This tool filters out any subdomains of known adware or malware domains, reducing the number of zone entries required from **82,077** down to **50,115**. 8 | 9 | | DNS Server | Response Type | Download | SHA256 Checksum | 10 | | ---------- |:-------------:|:---------:|:---------------:| 11 | | BIND | 0.0.0.0 | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/bind/zones.blacklist) | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/bind/zones.blacklist.checksum) | 12 | | BIND (RPZ) | NXDOMAIN | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/bind/bind-nxdomain.blacklist) | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/bind/bind-nxdomain.blacklist.checksum) | 13 | | Dnsmasq | 0.0.0.0 | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/dnsmasq/dnsmasq.blacklist) | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/dnsmasq/dnsmasq.blacklist.checksum) | 14 | | Dnsmasq | NXDOMAIN | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/dnsmasq/dnsmasq-server.blacklist) | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/dnsmasq/dnsmasq-server.blacklist.checksum) | 15 | | Unbound | 0.0.0.0 | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/unbound/unbound.blacklist) | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/unbound/unbound.blacklist.checksum) | 16 | | Unbound | NXDOMAIN | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/unbound/unbound-nxdomain.blacklist) | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/unbound/unbound-nxdomain.blacklist.checksum) | 17 | 18 | ## Blacklist Updates 19 | 20 | The blacklists are updated every 24 hours with the latest data from [StevenBlack/hosts](https://github.com/StevenBlack/hosts). The builds logs are publicly available on [Travis CI](https://travis-ci.org/oznu/dns-zone-blacklist) and each zone file is tested to be valid before publishing. 21 | 22 | ## Building the Blacklist 23 | 24 | The blacklist can be generated using [Node.js 8.4.0](https://nodejs.org) or later. 25 | 26 | Install: 27 | 28 | ``` 29 | git clone https://github.com/oznu/dns-zone-blacklist.git 30 | cd dns-zone-blacklist 31 | 32 | npm install 33 | ``` 34 | 35 | Then build: 36 | 37 | ``` 38 | node build.js 39 | ``` 40 | 41 | The compiled blacklist files will be saved to the `./bind`, `./dnsmasq` and `./unbound` a directories in the root of the project. 42 | 43 | ### Custom Entries 44 | 45 | Custom entries can be added to the custom.blacklist.json file in the root of this project before building. 46 | 47 | ### Whitelist 48 | 49 | Any domains you wish to exclude from the blacklist can be added to the custom.whitelist.json file in the root of this project before building. 50 | -------------------------------------------------------------------------------- /README.template.md: -------------------------------------------------------------------------------- 1 | [![Travis branch](https://img.shields.io/travis/oznu/dns-zone-blacklist/master.svg)](https://travis-ci.org/oznu/dns-zone-blacklist) 2 | 3 | # DNS Zone Blacklist Generator 4 | 5 | This project generates a zone file for [BIND](https://en.wikipedia.org/wiki/BIND), [Dnsmasq](https://en.wikipedia.org/wiki/Dnsmasq) and [Unbound](https://en.wikipedia.org/wiki/Unbound_(DNS_server)) DNS servers using data from the [StevenBlack/hosts](https://github.com/StevenBlack/hosts) project. The generated zone files can be used to block ads and malware for an entire network when used with a local DNS server. 6 | 7 | DNS based ad blockers can support wildcard entries. This tool filters out any subdomains of known adware or malware domains, reducing the number of zone entries required from **<%= hosts %>** down to **<%= zones %>**. 8 | 9 | | DNS Server | Response Type | Download | SHA256 Checksum | 10 | | ---------- |:-------------:|:---------:|:---------------:| 11 | | BIND | 0.0.0.0 | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/bind/zones.blacklist) | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/bind/zones.blacklist.checksum) | 12 | | BIND (RPZ) | NXDOMAIN | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/bind/bind-nxdomain.blacklist) | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/bind/bind-nxdomain.blacklist.checksum) | 13 | | Dnsmasq | 0.0.0.0 | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/dnsmasq/dnsmasq.blacklist) | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/dnsmasq/dnsmasq.blacklist.checksum) | 14 | | Dnsmasq | NXDOMAIN | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/dnsmasq/dnsmasq-server.blacklist) | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/dnsmasq/dnsmasq-server.blacklist.checksum) | 15 | | Unbound | 0.0.0.0 | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/unbound/unbound.blacklist) | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/unbound/unbound.blacklist.checksum) | 16 | | Unbound | NXDOMAIN | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/unbound/unbound-nxdomain.blacklist) | [link](https://raw.githubusercontent.com/oznu/dns-zone-blacklist/master/unbound/unbound-nxdomain.blacklist.checksum) | 17 | 18 | ## Blacklist Updates 19 | 20 | The blacklists are updated every 24 hours with the latest data from [StevenBlack/hosts](https://github.com/StevenBlack/hosts). The builds logs are publicly available on [Travis CI](https://travis-ci.org/oznu/dns-zone-blacklist) and each zone file is tested to be valid before publishing. 21 | 22 | ## Building the Blacklist 23 | 24 | The blacklist can be generated using [Node.js 8.4.0](https://nodejs.org) or later. 25 | 26 | Install: 27 | 28 | ``` 29 | git clone https://github.com/oznu/dns-zone-blacklist.git 30 | cd dns-zone-blacklist 31 | 32 | npm install 33 | ``` 34 | 35 | Then build: 36 | 37 | ``` 38 | node build.js 39 | ``` 40 | 41 | The compiled blacklist files will be saved to the `./bind`, `./dnsmasq` and `./unbound` a directories in the root of the project. 42 | 43 | ### Custom Entries 44 | 45 | Custom entries can be added to the custom.blacklist.json file in the root of this project before building. 46 | 47 | ### Whitelist 48 | 49 | Any domains you wish to exclude from the blacklist can be added to the custom.whitelist.json file in the root of this project before building. 50 | -------------------------------------------------------------------------------- /bind/bind-nxdomain.blacklist.checksum: -------------------------------------------------------------------------------- 1 | df0310ded0ab237a7537879866b31729f164cd1393a416741295a0818b91abf8 -------------------------------------------------------------------------------- /bind/null.zone.file: -------------------------------------------------------------------------------- 1 | ; BIND db file for ad servers - point all addresses to an invalid IP 2 | $TTL 864000 ; ten days 3 | 4 | @ IN SOA ns0.example.net. hostmaster.example.net. ( 5 | 2008032800 ; serial number YYMMDDNN 6 | 288000 ; refresh 80 hours 7 | 72000 ; retry 20 hours 8 | 8640000 ; expire 100 days 9 | 864000 ) ; min ttl 10 day 10 | NS ns0.example.net. 11 | 12 | A 0.0.0.0 13 | 14 | * IN A 0.0.0.0 15 | -------------------------------------------------------------------------------- /bind/zones.blacklist.checksum: -------------------------------------------------------------------------------- 1 | 3691006bbb3527cf05f7ce4b7a2e28e88ba5f196b6f8b4acc6e39c768aa5b82e -------------------------------------------------------------------------------- /build.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const fs = require('fs') 4 | const ejs = require('ejs') 5 | const path = require('path') 6 | const crypto = require('crypto') 7 | const rp = require('request-promise') 8 | const tlds = require('tlds') 9 | 10 | class Blacklist { 11 | constructor () { 12 | this.whitelist = require('./custom.whitelist') 13 | this.blacklist = require('./custom.blacklist') 14 | 15 | this.formats = [ 16 | { 17 | type: 'bind', 18 | filename: 'zones.blacklist', 19 | template: 'zone "<%= host %>" { type master; notify no; file "null.zone.file"; };' 20 | }, 21 | { 22 | type: 'bind', 23 | filename: 'bind-nxdomain.blacklist', 24 | template: '<%= host %> CNAME .\n*.<%= host %> CNAME .', 25 | header: `$TTL 60\n@ IN SOA localhost. dns-zone-blacklist. (2 3H 1H 1W 1H)\ndns-zone-blacklist. IN NS localhost.` 26 | }, 27 | { 28 | type: 'dnsmasq', 29 | filename: 'dnsmasq.blacklist', 30 | template: 'address=/<%= host %>/0.0.0.0' 31 | }, 32 | { 33 | type: 'dnsmasq', 34 | filename: 'dnsmasq-server.blacklist', 35 | template: 'server=/<%= host %>/' 36 | }, 37 | { 38 | type: 'unbound', 39 | filename: 'unbound.blacklist', 40 | template: 'local-zone: "<%= host %>" always_refuse' 41 | }, 42 | { 43 | type: 'unbound', 44 | filename: 'unbound-nxdomain.blacklist', 45 | template: 'local-zone: "<%= host %>" always_nxdomain' 46 | } 47 | ] 48 | } 49 | 50 | async build () { 51 | let hosts = await rp.get('https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts') 52 | let stats = await rp.get('https://raw.githubusercontent.com/StevenBlack/hosts/master/readmeData.json', {json: true}) 53 | 54 | // Filter the original hosts file 55 | hosts 56 | .split('\n') 57 | .map(x => x.trim()) 58 | .filter(x => !(x === '' || x.charAt(0) === '#')) 59 | .map(x => x.split(' ')[1]) 60 | .filter(x => !this.whitelist.includes(x)) 61 | .sort((a, b) => a.length - b.length) 62 | .map(host => { 63 | if (!this.blacklist.find(x => host.slice(-Math.abs(x.length + 1)) === '.' + x) && !tlds.includes(host)) { 64 | this.blacklist.push(host) 65 | } 66 | }) 67 | 68 | // Build a zone blacklist for each format type 69 | this.formats.forEach((format) => { 70 | let zoneFile = this.blacklist.map(x => ejs.render(format.template, {host: x})).join('\n') 71 | 72 | if (format.header) { 73 | zoneFile = format.header + '\n\n' + zoneFile 74 | } 75 | 76 | let sha256 = crypto.createHash('sha256').update(zoneFile).digest('hex') 77 | let dest = path.resolve(__dirname, `${format.type}/${format.filename}`) 78 | 79 | fs.writeFileSync(`${dest}.checksum`, sha256) 80 | console.log(`${format.filename} checksum is ${sha256}`) 81 | 82 | fs.writeFileSync(`${dest}`, zoneFile) 83 | console.log(`${this.blacklist.length} ${format.filename} zones saved to ${dest}`) 84 | }) 85 | 86 | // Update the README.md file 87 | let readmeTemplate = fs.readFileSync(path.resolve(__dirname, 'README.template.md'), 'utf8') 88 | let readme = ejs.render(readmeTemplate, { 89 | hosts: stats.base.entries.toLocaleString(), 90 | zones: this.blacklist.length.toLocaleString() 91 | }) 92 | 93 | fs.writeFileSync(path.resolve(__dirname, 'README.md'), readme) 94 | } 95 | } 96 | 97 | const blacklist = new Blacklist() 98 | 99 | blacklist.build() 100 | -------------------------------------------------------------------------------- /custom.blacklist.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /custom.whitelist.json: -------------------------------------------------------------------------------- 1 | [ 2 | "local", 3 | "localhost", 4 | "localhost.localdomain", 5 | "broadcasthost", 6 | "sbc", 7 | "herokuapp.com", 8 | "fls-na.amazon.com" 9 | ] 10 | -------------------------------------------------------------------------------- /dnsmasq/dnsmasq-server.blacklist.checksum: -------------------------------------------------------------------------------- 1 | d25104c74d4f239c502ec1642947b9c6a4a4a85a04d51b853b34d8f417116460 -------------------------------------------------------------------------------- /dnsmasq/dnsmasq.blacklist.checksum: -------------------------------------------------------------------------------- 1 | 7f4c504b6738f6497e5bea190a684b1ba63ae077787f7eca3f871c25f131e754 -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dns-zone-blacklist", 3 | "version": "2.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "ajv": { 8 | "version": "6.8.1", 9 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.8.1.tgz", 10 | "integrity": "sha512-eqxCp82P+JfqL683wwsL73XmFs1eG6qjw+RD3YHx+Jll1r0jNd4dh8QG9NYAeNGA/hnZjeEDgtTskgJULbxpWQ==", 11 | "requires": { 12 | "fast-deep-equal": "^2.0.1", 13 | "fast-json-stable-stringify": "^2.0.0", 14 | "json-schema-traverse": "^0.4.1", 15 | "uri-js": "^4.2.2" 16 | } 17 | }, 18 | "asn1": { 19 | "version": "0.2.4", 20 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 21 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 22 | "requires": { 23 | "safer-buffer": "~2.1.0" 24 | } 25 | }, 26 | "assert-plus": { 27 | "version": "1.0.0", 28 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 29 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 30 | }, 31 | "asynckit": { 32 | "version": "0.4.0", 33 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 34 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 35 | }, 36 | "aws-sign2": { 37 | "version": "0.7.0", 38 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 39 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 40 | }, 41 | "aws4": { 42 | "version": "1.8.0", 43 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", 44 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" 45 | }, 46 | "bcrypt-pbkdf": { 47 | "version": "1.0.2", 48 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 49 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 50 | "requires": { 51 | "tweetnacl": "^0.14.3" 52 | } 53 | }, 54 | "bluebird": { 55 | "version": "3.5.3", 56 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", 57 | "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" 58 | }, 59 | "caseless": { 60 | "version": "0.12.0", 61 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 62 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 63 | }, 64 | "combined-stream": { 65 | "version": "1.0.7", 66 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", 67 | "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", 68 | "requires": { 69 | "delayed-stream": "~1.0.0" 70 | } 71 | }, 72 | "core-util-is": { 73 | "version": "1.0.2", 74 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 75 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 76 | }, 77 | "dashdash": { 78 | "version": "1.14.1", 79 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 80 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 81 | "requires": { 82 | "assert-plus": "^1.0.0" 83 | } 84 | }, 85 | "delayed-stream": { 86 | "version": "1.0.0", 87 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 88 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 89 | }, 90 | "ecc-jsbn": { 91 | "version": "0.1.2", 92 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 93 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 94 | "requires": { 95 | "jsbn": "~0.1.0", 96 | "safer-buffer": "^2.1.0" 97 | } 98 | }, 99 | "ejs": { 100 | "version": "2.6.1", 101 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", 102 | "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==" 103 | }, 104 | "extend": { 105 | "version": "3.0.2", 106 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 107 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 108 | }, 109 | "extsprintf": { 110 | "version": "1.3.0", 111 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 112 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 113 | }, 114 | "fast-deep-equal": { 115 | "version": "2.0.1", 116 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 117 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" 118 | }, 119 | "fast-json-stable-stringify": { 120 | "version": "2.0.0", 121 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 122 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 123 | }, 124 | "forever-agent": { 125 | "version": "0.6.1", 126 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 127 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 128 | }, 129 | "form-data": { 130 | "version": "2.3.3", 131 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 132 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 133 | "requires": { 134 | "asynckit": "^0.4.0", 135 | "combined-stream": "^1.0.6", 136 | "mime-types": "^2.1.12" 137 | } 138 | }, 139 | "getpass": { 140 | "version": "0.1.7", 141 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 142 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 143 | "requires": { 144 | "assert-plus": "^1.0.0" 145 | } 146 | }, 147 | "har-schema": { 148 | "version": "2.0.0", 149 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 150 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 151 | }, 152 | "har-validator": { 153 | "version": "5.1.3", 154 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 155 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 156 | "requires": { 157 | "ajv": "^6.5.5", 158 | "har-schema": "^2.0.0" 159 | } 160 | }, 161 | "http-signature": { 162 | "version": "1.2.0", 163 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 164 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 165 | "requires": { 166 | "assert-plus": "^1.0.0", 167 | "jsprim": "^1.2.2", 168 | "sshpk": "^1.7.0" 169 | } 170 | }, 171 | "ip-regex": { 172 | "version": "2.1.0", 173 | "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", 174 | "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" 175 | }, 176 | "is-typedarray": { 177 | "version": "1.0.0", 178 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 179 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 180 | }, 181 | "isstream": { 182 | "version": "0.1.2", 183 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 184 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 185 | }, 186 | "jsbn": { 187 | "version": "0.1.1", 188 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 189 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 190 | }, 191 | "json-schema": { 192 | "version": "0.2.3", 193 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 194 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 195 | }, 196 | "json-schema-traverse": { 197 | "version": "0.4.1", 198 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 199 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 200 | }, 201 | "json-stringify-safe": { 202 | "version": "5.0.1", 203 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 204 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 205 | }, 206 | "jsprim": { 207 | "version": "1.4.1", 208 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 209 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 210 | "requires": { 211 | "assert-plus": "1.0.0", 212 | "extsprintf": "1.3.0", 213 | "json-schema": "0.2.3", 214 | "verror": "1.10.0" 215 | } 216 | }, 217 | "lodash": { 218 | "version": "4.17.19", 219 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", 220 | "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" 221 | }, 222 | "mime-db": { 223 | "version": "1.37.0", 224 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", 225 | "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" 226 | }, 227 | "mime-types": { 228 | "version": "2.1.21", 229 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", 230 | "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", 231 | "requires": { 232 | "mime-db": "~1.37.0" 233 | } 234 | }, 235 | "oauth-sign": { 236 | "version": "0.9.0", 237 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 238 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 239 | }, 240 | "performance-now": { 241 | "version": "2.1.0", 242 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 243 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 244 | }, 245 | "psl": { 246 | "version": "1.1.31", 247 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", 248 | "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" 249 | }, 250 | "punycode": { 251 | "version": "1.4.1", 252 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 253 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 254 | }, 255 | "qs": { 256 | "version": "6.5.2", 257 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 258 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 259 | }, 260 | "request": { 261 | "version": "2.88.0", 262 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 263 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 264 | "requires": { 265 | "aws-sign2": "~0.7.0", 266 | "aws4": "^1.8.0", 267 | "caseless": "~0.12.0", 268 | "combined-stream": "~1.0.6", 269 | "extend": "~3.0.2", 270 | "forever-agent": "~0.6.1", 271 | "form-data": "~2.3.2", 272 | "har-validator": "~5.1.0", 273 | "http-signature": "~1.2.0", 274 | "is-typedarray": "~1.0.0", 275 | "isstream": "~0.1.2", 276 | "json-stringify-safe": "~5.0.1", 277 | "mime-types": "~2.1.19", 278 | "oauth-sign": "~0.9.0", 279 | "performance-now": "^2.1.0", 280 | "qs": "~6.5.2", 281 | "safe-buffer": "^5.1.2", 282 | "tough-cookie": "~2.4.3", 283 | "tunnel-agent": "^0.6.0", 284 | "uuid": "^3.3.2" 285 | }, 286 | "dependencies": { 287 | "tough-cookie": { 288 | "version": "2.4.3", 289 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 290 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 291 | "requires": { 292 | "psl": "^1.1.24", 293 | "punycode": "^1.4.1" 294 | } 295 | } 296 | } 297 | }, 298 | "request-promise": { 299 | "version": "4.2.2", 300 | "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz", 301 | "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=", 302 | "requires": { 303 | "bluebird": "^3.5.0", 304 | "request-promise-core": "1.1.1", 305 | "stealthy-require": "^1.1.0", 306 | "tough-cookie": ">=2.3.3" 307 | } 308 | }, 309 | "request-promise-core": { 310 | "version": "1.1.1", 311 | "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", 312 | "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", 313 | "requires": { 314 | "lodash": "^4.13.1" 315 | } 316 | }, 317 | "safe-buffer": { 318 | "version": "5.1.2", 319 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 320 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 321 | }, 322 | "safer-buffer": { 323 | "version": "2.1.2", 324 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 325 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 326 | }, 327 | "sshpk": { 328 | "version": "1.16.1", 329 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 330 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 331 | "requires": { 332 | "asn1": "~0.2.3", 333 | "assert-plus": "^1.0.0", 334 | "bcrypt-pbkdf": "^1.0.0", 335 | "dashdash": "^1.12.0", 336 | "ecc-jsbn": "~0.1.1", 337 | "getpass": "^0.1.1", 338 | "jsbn": "~0.1.0", 339 | "safer-buffer": "^2.0.2", 340 | "tweetnacl": "~0.14.0" 341 | } 342 | }, 343 | "stealthy-require": { 344 | "version": "1.1.1", 345 | "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", 346 | "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" 347 | }, 348 | "tlds": { 349 | "version": "1.221.0", 350 | "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.221.0.tgz", 351 | "integrity": "sha512-Y+9N1HvzgtLVMPGcBqNGQObKru0l0mukGAw6PEAe7gOXtUpiV/MKdpECPvxRfeP/77sbqR7UCeA4mZEkK+RqFQ==" 352 | }, 353 | "tough-cookie": { 354 | "version": "3.0.1", 355 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", 356 | "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", 357 | "requires": { 358 | "ip-regex": "^2.1.0", 359 | "psl": "^1.1.28", 360 | "punycode": "^2.1.1" 361 | }, 362 | "dependencies": { 363 | "punycode": { 364 | "version": "2.1.1", 365 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 366 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 367 | } 368 | } 369 | }, 370 | "tunnel-agent": { 371 | "version": "0.6.0", 372 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 373 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 374 | "requires": { 375 | "safe-buffer": "^5.0.1" 376 | } 377 | }, 378 | "tweetnacl": { 379 | "version": "0.14.5", 380 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 381 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 382 | }, 383 | "uri-js": { 384 | "version": "4.2.2", 385 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 386 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 387 | "requires": { 388 | "punycode": "^2.1.0" 389 | }, 390 | "dependencies": { 391 | "punycode": { 392 | "version": "2.1.1", 393 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 394 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 395 | } 396 | } 397 | }, 398 | "uuid": { 399 | "version": "3.3.2", 400 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 401 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" 402 | }, 403 | "verror": { 404 | "version": "1.10.0", 405 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 406 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 407 | "requires": { 408 | "assert-plus": "^1.0.0", 409 | "core-util-is": "1.0.2", 410 | "extsprintf": "^1.2.0" 411 | } 412 | } 413 | } 414 | } 415 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dns-zone-blacklist", 3 | "version": "2.0.0", 4 | "description": "A tool to convert host file data to bind and dnsmasq dns entries for use with oznu/dns-ad-blocker.", 5 | "main": "build.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "oznu ", 10 | "license": "MIT", 11 | "dependencies": { 12 | "ejs": "^2.6.1", 13 | "request": "^2.88.0", 14 | "request-promise": "^4.2.2", 15 | "tlds": "^1.221.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /unbound/unbound-nxdomain.blacklist.checksum: -------------------------------------------------------------------------------- 1 | d9a6f8927996ed5d2cba5a4f1b0d8a92874ce660fad208f16366eb1b1d4b683e -------------------------------------------------------------------------------- /unbound/unbound.blacklist.checksum: -------------------------------------------------------------------------------- 1 | 8f7df4b58523b97b081c167243bbb4732e5de1cc8df3a627ee08bd69bcd55dee --------------------------------------------------------------------------------