#!/usr/bin/python3 ## Version : 0.1 ## BIND / Named updater for sebsauvage.net's blocklist. ## Usage : ## ------- ## 1/ Update this param to match the file to be created : dest_named_list = "/var/named/badlist-sebsauvage.zone" dest_named_list_tmp = "/var/named/badlist-sebsauvage.zone-tmp" ## 2/ Update bind's conf to add a : ## /etc/named.conf ## Add in options { ... }; block ## response-policy { zone "badlist-sebsauvage"; }; ## ## Add _after_ (outside) options { ... }; block ## zone "badlist-sebsauvage" { ## type master; ## file "badlist-sebsauvage.zone"; ## allow-query { none; }; ## }; ## ## 3/ Run this as a cron (after 04:30 PM, Europe/Paris localtime) ## _do not hammer : updated daily !!_ ## ## Enjoy :-) ## (copyleft) 2026 mansuetus () spontex.org ## ## import requests, os if not os.access( dest_named_list, os.R_OK ): print ("sebsauvage.net's local file ({}) is not present. Please create it (a.k.a : run '# touch {}')".format(dest_named_list, dest_named_list)) exit(1) if not os.access( dest_named_list, os.W_OK ): print ("sebsauvage.net's local file ({}) is not WRITABLE. Please check permissions (!! /var/named is NOT user accessible by default)".format(dest_named_list)) exit(1) r = requests.get('https://sebsauvage.net/hosts/raw') if not r: print ("sebsauvage.net's file could not be downloaded : is the world doomed ?") exit(1) f = open ("{}".format(dest_named_list_tmp), 'wb') f.write(b"$TTL 1H\n\n@ IN SOA LOCALHOST. dns-master.localhost. (1 1h 15m 30d 2h)\n@ IN NS LOCALHOST.;\n") for l in r.iter_lines(): ## print (l.decode("utf-8")) f.write (l + b" CNAME . ;\n") f.close() os.replace(dest_named_list_tmp, dest_named_list) exit(0)