diff --git a/01.conf.go b/01.conf.go index a48e951..c0d788e 100644 --- a/01.conf.go +++ b/01.conf.go @@ -88,11 +88,13 @@ func init() { //******************* // IP aliases section //******************* - IPAliasesRaw := MyConf["ipaliases"].(map[string]interface{}) + if MyConf["ipaliases"] != nil { + IPAliasesRaw := MyConf["ipaliases"].(map[string]interface{}) - for alias, ip := range IPAliasesRaw { - fmt.Println("IP Alias:", alias, ip) - ZabovIPAliases[alias] = ip.(string) + for alias, ip := range IPAliasesRaw { + fmt.Println("IP Alias:", alias, ip) + ZabovIPAliases[alias] = ip.(string) + } } //**************** @@ -119,117 +121,121 @@ func init() { //******************* // timetables section //******************* - timetables := MyConf["timetables"].(map[string]interface{}) + if MyConf["timetables"] != nil { + timetables := MyConf["timetables"].(map[string]interface{}) - for name, v := range timetables { - fmt.Println("evaluaing timetable name:", name) - timetableRaw := v.(map[string]interface{}) - var timetable ZabovTimetable + for name, v := range timetables { + fmt.Println("evaluaing timetable name:", name) + timetableRaw := v.(map[string]interface{}) + var timetable ZabovTimetable - timetable.cfgin = timetableRaw["cfgin"].(string) - timetable.cfgout = timetableRaw["cfgout"].(string) + timetable.cfgin = timetableRaw["cfgin"].(string) + timetable.cfgout = timetableRaw["cfgout"].(string) - if timetable.cfgin == "" { - timetable.cfgin = "default" - } - if timetable.cfgout == "" { - timetable.cfgout = "default" - } + if timetable.cfgin == "" { + timetable.cfgin = "default" + } + if timetable.cfgout == "" { + timetable.cfgout = "default" + } - refConfig, ok := ZabovConfigs[timetable.cfgin] - if !ok { - log.Println("timetable: inexistent cfgin:", timetable.cfgin) - os.Exit(1) - } + refConfig, ok := ZabovConfigs[timetable.cfgin] + if !ok { + log.Println("timetable: inexistent cfgin:", timetable.cfgin) + os.Exit(1) + } - refConfig.references++ - refConfig, ok = ZabovConfigs[timetable.cfgout] - if !ok { - log.Println("timetable: inexistent cfgout:", timetable.cfgout) - os.Exit(1) - } - refConfig.references++ + refConfig.references++ + refConfig, ok = ZabovConfigs[timetable.cfgout] + if !ok { + log.Println("timetable: inexistent cfgout:", timetable.cfgout) + os.Exit(1) + } + refConfig.references++ - tables := timetableRaw["tables"].([]interface{}) + tables := timetableRaw["tables"].([]interface{}) - for i := range tables { - table := tables[i].(map[string]interface{}) - var ttEntry ZabovTimetableEntry - ttEntry.times = []*ZabovTimeRange{} - for _, tRaw := range strings.Split(table["times"].(string), ";") { - tRawArr := strings.Split(tRaw, "-") - if len(tRawArr) > 1 { - startArr := strings.Split(tRawArr[0], ":") - stopArr := strings.Split(tRawArr[1], ":") + for i := range tables { + table := tables[i].(map[string]interface{}) + var ttEntry ZabovTimetableEntry + ttEntry.times = []*ZabovTimeRange{} + for _, tRaw := range strings.Split(table["times"].(string), ";") { + tRawArr := strings.Split(tRaw, "-") + if len(tRawArr) > 1 { + startArr := strings.Split(tRawArr[0], ":") + stopArr := strings.Split(tRawArr[1], ":") - if len(startArr) > 1 && len(stopArr) > 1 { - hourStart, _ := strconv.Atoi(startArr[0]) - minuteStart, _ := strconv.Atoi(startArr[1]) - start := ZabovTime{hour: hourStart, minute: minuteStart} + if len(startArr) > 1 && len(stopArr) > 1 { + hourStart, _ := strconv.Atoi(startArr[0]) + minuteStart, _ := strconv.Atoi(startArr[1]) + start := ZabovTime{hour: hourStart, minute: minuteStart} - hourStop, _ := strconv.Atoi(stopArr[0]) - minuteStop, _ := strconv.Atoi(stopArr[1]) - stop := ZabovTime{hour: hourStop, minute: minuteStop} - t := ZabovTimeRange{start: start, stop: stop} - ttEntry.times = append(ttEntry.times, &t) + hourStop, _ := strconv.Atoi(stopArr[0]) + minuteStop, _ := strconv.Atoi(stopArr[1]) + stop := ZabovTime{hour: hourStop, minute: minuteStop} + t := ZabovTimeRange{start: start, stop: stop} + ttEntry.times = append(ttEntry.times, &t) + } } + } - } + ttEntry.days = map[string]bool{} + for _, day := range strings.Split(table["days"].(string), ";") { + ttEntry.days[day] = true + } - ttEntry.days = map[string]bool{} - for _, day := range strings.Split(table["days"].(string), ";") { - ttEntry.days[day] = true + timetable.table = append(timetable.table, &ttEntry) } - - timetable.table = append(timetable.table, &ttEntry) + ZabovTimetables[name] = &timetable } - ZabovTimetables[name] = &timetable } //****************** // IP groups section //****************** - IPGroups := MyConf["ipgroups"].([]interface{}) + if MyConf["ipgroups"] != nil { + IPGroups := MyConf["ipgroups"].([]interface{}) - fmt.Println("evaluating IP Groups: ", len(IPGroups)) - for i := range IPGroups { - fmt.Println("evaluating IP Group n.", i) - var groupStruct ZabovIPGroup - groupMap := IPGroups[i].(map[string]interface{}) - IPsRaw := groupMap["ips"].([]interface{}) - groupStruct.ips = []net.IP{} - for x := range IPsRaw { - ipRaw := IPsRaw[x].(string) - ip := net.ParseIP(ipRaw) - fmt.Println("adding IP ", ipRaw) + fmt.Println("evaluating IP Groups: ", len(IPGroups)) + for i := range IPGroups { + fmt.Println("evaluating IP Group n.", i) + var groupStruct ZabovIPGroup + groupMap := IPGroups[i].(map[string]interface{}) + IPsRaw := groupMap["ips"].([]interface{}) + groupStruct.ips = []net.IP{} + for x := range IPsRaw { + ipRaw := IPsRaw[x].(string) + ip := net.ParseIP(ipRaw) + fmt.Println("adding IP ", ipRaw) - alias, ok := ZabovIPAliases[ipRaw] - if ok { - fmt.Println("IP alias: ", ipRaw, alias) - ip = net.ParseIP(alias) + alias, ok := ZabovIPAliases[ipRaw] + if ok { + fmt.Println("IP alias: ", ipRaw, alias) + ip = net.ParseIP(alias) + } + groupStruct.ips = append(groupStruct.ips, ip) } - groupStruct.ips = append(groupStruct.ips, ip) - } - groupStruct.cfg = groupMap["cfg"].(string) - groupStruct.timetable = groupMap["timetable"].(string) - if len(groupStruct.cfg) > 0 { - refConfig, ok := ZabovConfigs[groupStruct.cfg] + groupStruct.cfg = groupMap["cfg"].(string) + groupStruct.timetable = groupMap["timetable"].(string) + if len(groupStruct.cfg) > 0 { + refConfig, ok := ZabovConfigs[groupStruct.cfg] + if !ok { + log.Println("ipgroups: inexistent cfg:", groupStruct.cfg) + os.Exit(1) + } else { + refConfig.references++ + } + } + fmt.Println("cfg:", groupStruct.cfg) + fmt.Println("timetable:", groupStruct.timetable) + _, ok := ZabovTimetables[groupStruct.timetable] if !ok { - log.Println("ipgroups: inexistent cfg:", groupStruct.cfg) + log.Println("inexistent timetable:", groupStruct.timetable) os.Exit(1) - } else { - refConfig.references++ } + ZabovIPGroups = append(ZabovIPGroups, groupStruct) } - fmt.Println("cfg:", groupStruct.cfg) - fmt.Println("timetable:", groupStruct.timetable) - _, ok := ZabovTimetables[groupStruct.timetable] - if !ok { - log.Println("inexistent timetable:", groupStruct.timetable) - os.Exit(1) - } - ZabovIPGroups = append(ZabovIPGroups, groupStruct) } if zabov["timetable"] != nil { @@ -244,24 +250,25 @@ func init() { //************************ // Local responser section //************************ - localresponder := MyConf["localresponder"].(map[string]interface{}) + if MyConf["localresponder"] != nil { + localresponder := MyConf["localresponder"].(map[string]interface{}) - if localresponder != nil { - if localresponder["responder"] != nil { - ZabovLocalResponder = localresponder["responder"].(string) - if len(ZabovLocalResponder) > 0 { - local := ZabovConfig{ZabovDNSArray: []string{ZabovLocalResponder}, references: 1} - ZabovConfigs["__localresponder__"] = &local - fmt.Println("ZabovLocalResponder:", ZabovLocalResponder) + if localresponder != nil { + if localresponder["responder"] != nil { + ZabovLocalResponder = localresponder["responder"].(string) + if len(ZabovLocalResponder) > 0 { + local := ZabovConfig{ZabovDNSArray: []string{ZabovLocalResponder}, references: 1} + ZabovConfigs["__localresponder__"] = &local + fmt.Println("ZabovLocalResponder:", ZabovLocalResponder) + } + } + if localresponder["localdomain"] != nil { + ZabovLocalDomain = localresponder["localdomain"].(string) } } - if localresponder["localdomain"] != nil { - ZabovLocalDomain = localresponder["localdomain"].(string) - } } - //****************************************** - // clearing unused config to save resources + // clearing unused configs to save resources //****************************************** for name, conf := range ZabovConfigs { if conf.references == 0 { diff --git a/Dockerfile.amd64 b/Dockerfile.amd64 index 5f6b923..6402889 100644 --- a/Dockerfile.amd64 +++ b/Dockerfile.amd64 @@ -1,4 +1,4 @@ -FROM golang:1.14.1 AS builder +FROM arm64v8/golang:1.15.6 AS builder RUN apt install git -y RUN mkdir -p /go/src/zabov RUN git clone https://git.keinpfusch.net/loweel/zabov /go/src/zabov @@ -17,4 +17,3 @@ COPY --from=builder /go/src/zabov /opt/zabov EXPOSE 53/udp ENV TZ Europe/Rome ENTRYPOINT ["/opt/zabov/zabov"] - diff --git a/Dockerfile.arm32v7 b/Dockerfile.arm32v7 index 633f3ee..57206ff 100644 --- a/Dockerfile.arm32v7 +++ b/Dockerfile.arm32v7 @@ -1,4 +1,4 @@ -FROM arm32v7/golang:1.14.1 AS builder +FROM arm64v8/golang:1.15.6 AS builder RUN apt install git -y RUN mkdir -p /go/src/zabov RUN git clone https://git.keinpfusch.net/loweel/zabov /go/src/zabov diff --git a/Dockerfile.arm64v8 b/Dockerfile.arm64v8 index f1add2b..6577e05 100644 --- a/Dockerfile.arm64v8 +++ b/Dockerfile.arm64v8 @@ -1,4 +1,4 @@ -FROM arm64v8/golang:1.14.1 AS builder +FROM arm64v8/golang:1.15.6 AS builder RUN apt install git -y RUN mkdir -p /go/src/zabov RUN git clone https://git.keinpfusch.net/loweel/zabov /go/src/zabov diff --git a/config.json b/config.json index e320ef3..3ca894d 100644 --- a/config.json +++ b/config.json @@ -6,28 +6,6 @@ "cachettl": 1, "killfilettl": 12 }, - "localresponder":{ - "responder":"192.168.178.1:53", - "localdomain":"fritz.box" - }, - "ipaliases":{ - "pc8":"192.168.178.29", - "localhost":"127.0.0.1" - }, - "ipgroups":[ - { - "ips":["localhost", "::1", "192.168.178.30", "192.168.178.31", "pc8"], - "cfg":"", - "timetable":"tt_children" - } - ], - "timetables":{ - "tt_children":{ - "tables":[{"times":"00:00-05:00;8:30-12:30;18:30-22:59", "days":"Mo;Tu;We;Th;Fr;Sa;Su"}], - "cfgin":"children_restricted", - "cfgout":"children" - } - }, "configs":{ "default":{ "upstream":"./dns-upstream.txt", @@ -35,21 +13,6 @@ "doublefilters":"./urls-hosts.txt", "blackholeip":"127.0.0.1", "hostsfile":"./urls-local.txt" - }, - "children":{ - "upstream":"./dns-upstream.txt", - "singlefilters":"./urls-domains.txt", - "doublefilters":"./urls-hosts.txt", - "blackholeip":"127.0.0.1", - "hostsfile":"./urls-local.txt" - }, - "children_restricted":{ - "upstream":"./dns-upstream.txt", - "singlefilters":"./urls-domains.txt", - "doublefilters":"./urls-hosts.txt", - "blackholeip":"127.0.0.1", - "hostsfile":"./urls-local.txt" } } - } diff --git a/config.sample.json b/config.sample.json new file mode 100644 index 0000000..cd68e77 --- /dev/null +++ b/config.sample.json @@ -0,0 +1,57 @@ +{ + "zabov":{ + "port":"53", + "proto":"udp", + "ipaddr":"0.0.0.0", + "cachettl": 1, + "killfilettl": 12, + "debug":"true", + "debugdbpath":"./logs", + "timetable":"" + }, + "localresponder":{ + "responder":"192.168.1.1:53", + "localdomain":".local" + }, + "ipaliases":{ + "pc8":"192.168.1.2", + }, + "ipgroups":[ + { + "ips":["pc8"], + "cfg":"", + "timetable":"tt_children" + } + ], + "timetables":{ + "tt_children":{ + "tables":[{"times":"9:30-11:30", "days":"Mo;Tu;We;Th;Fr;Sa"}], + "cfgin":"children_restricted", + "cfgout":"children" + } + }, + "configs":{ + "default":{ + "upstream":"./dns-upstream.txt", + "singlefilters":"./urls-domains-updated.txt", + "doublefilters":"./urls-hosts-normal.txt", + "blackholeip":"127.0.0.1", + "hostsfile":"./urls-local-normal.txt" + }, + "children":{ + "upstream":"./dns-familyscreen.txt", + "singlefilters":"./urls-domains-updated.txt", + "doublefilters":"./urls-hosts-nofb.txt", + "blackholeip":"127.0.0.1", + "hostsfile":"./urls-local-normal.txt" + }, + "children_restricted":{ + "upstream":"./dns-familyscreen.txt", + "singlefilters":"./urls-domains-updated.txt", + "doublefilters":"./urls-hosts-nofb.txt", + "blackholeip":"127.0.0.1", + "hostsfile":"./urls-local-restricted.txt" + } + } + +} diff --git a/urls-domains.txt b/urls-domains.txt index 579b04a..756abe4 100644 --- a/urls-domains.txt +++ b/urls-domains.txt @@ -1,12 +1,8 @@ -https://mirror1.malwaredomains.com/files/justdomains https://raw.githubusercontent.com/hectorm/hmirror/master/data/adaway.org/list.txt https://raw.githubusercontent.com/hectorm/hmirror/master/data/adblock-nocoin-list/list.txt https://raw.githubusercontent.com/hectorm/hmirror/master/data/adguard-simplified/list.txt -https://raw.githubusercontent.com/hectorm/hmirror/master/data/anudeepnd-adservers/list.txt -https://raw.githubusercontent.com/hectorm/hmirror/master/data/disconnect.me-ad/list.txt -https://raw.githubusercontent.com/hectorm/hmirror/master/data/disconnect.me-malvertising/list.txt -https://raw.githubusercontent.com/hectorm/hmirror/master/data/disconnect.me-malware/list.txt -https://raw.githubusercontent.com/hectorm/hmirror/master/data/disconnect.me-tracking/list.txt +https://raw.githubusercontent.com/hectorm/hmirror/master/data/antipopads/list.txt +https://raw.githubusercontent.com/hectorm/hmirror/master/data/digitalside-threat-intel/list.txt https://raw.githubusercontent.com/hectorm/hmirror/master/data/easylist/list.txt https://raw.githubusercontent.com/hectorm/hmirror/master/data/easyprivacy/list.txt https://raw.githubusercontent.com/hectorm/hmirror/master/data/eth-phishing-detect/list.txt @@ -14,24 +10,28 @@ https://raw.githubusercontent.com/hectorm/hmirror/master/data/fademind-add.2o7ne https://raw.githubusercontent.com/hectorm/hmirror/master/data/fademind-add.dead/list.txt https://raw.githubusercontent.com/hectorm/hmirror/master/data/fademind-add.risk/list.txt https://raw.githubusercontent.com/hectorm/hmirror/master/data/fademind-add.spam/list.txt +https://raw.githubusercontent.com/hectorm/hmirror/master/data/gfrogeye-firstparty-trackers/list.txt +https://raw.githubusercontent.com/hectorm/hmirror/master/data/hostsvn/list.txt https://raw.githubusercontent.com/hectorm/hmirror/master/data/kadhosts/list.txt -https://raw.githubusercontent.com/hectorm/hmirror/master/data/malwaredomainlist.com/list.txt -https://raw.githubusercontent.com/hectorm/hmirror/master/data/malwaredomains.com-immortaldomains/list.txt -https://raw.githubusercontent.com/hectorm/hmirror/master/data/malwaredomains.com-justdomains/list.txt +https://raw.githubusercontent.com/hectorm/hmirror/master/data/lightswitch05-ads-and-tracking/list.txt https://raw.githubusercontent.com/hectorm/hmirror/master/data/matomo.org-spammers/list.txt https://raw.githubusercontent.com/hectorm/hmirror/master/data/mitchellkrogza-badd-boyz-hosts/list.txt https://raw.githubusercontent.com/hectorm/hmirror/master/data/pgl.yoyo.org/list.txt -https://raw.githubusercontent.com/hectorm/hmirror/master/data/ransomwaretracker.abuse.ch/list.txt +https://raw.githubusercontent.com/hectorm/hmirror/master/data/phishing.army/list.txt +https://raw.githubusercontent.com/hectorm/hmirror/master/data/socram8888-notonmyshift/list.txt https://raw.githubusercontent.com/hectorm/hmirror/master/data/someonewhocares.org/list.txt https://raw.githubusercontent.com/hectorm/hmirror/master/data/spam404.com/list.txt https://raw.githubusercontent.com/hectorm/hmirror/master/data/stevenblack/list.txt +https://raw.githubusercontent.com/hectorm/hmirror/master/data/ublock/list.txt +https://raw.githubusercontent.com/hectorm/hmirror/master/data/ublock-abuse/list.txt +https://raw.githubusercontent.com/hectorm/hmirror/master/data/ublock-badware/list.txt +https://raw.githubusercontent.com/hectorm/hmirror/master/data/ublock-privacy/list.txt +https://raw.githubusercontent.com/hectorm/hmirror/master/data/urlhaus/list.txt https://raw.githubusercontent.com/hectorm/hmirror/master/data/winhelp2002.mvps.org/list.txt -https://raw.githubusercontent.com/hectorm/hmirror/master/data/zerodot1-coinblockerlists-browser/list.txt -https://raw.githubusercontent.com/hectorm/hmirror/master/data/zeustracker.abuse.ch/list.txt -https://raw.githubusercontent.com/CHEF-KOCH/Audio-fingerprint-pages/master/AudioFp.txt -https://raw.githubusercontent.com/CHEF-KOCH/Canvas-fingerprinting-pages/master/Canvas.txt -https://raw.githubusercontent.com/CHEF-KOCH/WebRTC-tracking/master/WebRTC.txt -https://raw.githubusercontent.com/CHEF-KOCH/CKs-FilterList/master/Anti-Corp/hosts/NSABlocklist.txt + + https://gitlab.com/quidsup/notrack-blocklists/raw/master/notrack-blocklist.txt https://gitlab.com/quidsup/notrack-blocklists/raw/master/notrack-malware.txt https://www.stopforumspam.com/downloads/toxic_domains_whole.txt + +https://mirror.cedia.org.ec/malwaredomains/immortal_domains.txt