From 27ce408f40bd83d5bc890fc36ef4dd26bce6a77e Mon Sep 17 00:00:00 2001 From: Adam Warner Date: Sat, 3 Mar 2018 15:48:44 +0000 Subject: [PATCH 1/4] Add an option into gravity to parse blocklists into `server=//` style list instead of HOSTS file Signed-off-by: Adam Warner --- gravity.sh | 63 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 13 deletions(-) diff --git a/gravity.sh b/gravity.sh index cfc7566..9ba7489 100755 --- a/gravity.sh +++ b/gravity.sh @@ -35,6 +35,10 @@ blackList="${piholeDir}/black.list" localList="${piholeDir}/local.list" VPNList="/etc/openvpn/ipp.txt" +adListNX="/etc/dnsmasq.d/00-pihole-gravity.conf" +blackListNX="/etc/dnsmasq.d/00-pihole-userblacklist.conf" +whiteListNX="/etc/dnsmasq.d/99-pihole-whitelist.conf" + domainsExtension="domains" matterAndLight="${basename}.0.matterandlight.txt" parsedMatter="${basename}.1.parsedmatter.txt" @@ -58,6 +62,17 @@ if [[ -f "${setupVars}" ]];then echo -e " ${COL_LIGHT_RED}No IP addresses found! Please run 'pihole -r' to reconfigure${COL_NC}" exit 1 fi + + #If setupvars has BLOCKSTYLE_NXDOMAIN set, then clear out gravity.list and black.list + if [[ "${BLOCKSTYLE_NXDOMAIN}" == true ]]; then + truncate -s 0 "${blackList}" + truncate -s 0 "${adList}" + else + rm "${adListNX}" 2> /dev/null + rm "${blackListNX}" 2> /dev/null + rm "${whiteListNX}" 2> /dev/null + fi + else echo -e " ${COL_LIGHT_RED}Installation Failure: ${setupVars} does not exist! ${COL_NC} Please run 'pihole -r', and choose the 'reconfigure' option to fix." @@ -473,6 +488,14 @@ gravity_ParseDomainsIntoHosts() { }' >> "${2}" < "${1}" } +gravity_ParseDomainsIntoConfFile() { + sed 's*^*server=/*;s*$*/*' "${1}" > "${2}" +} + +gravity_ParseDomainsIntoConfFile_WL() { + sed 's*^*server=/*;s*$*/#*' "${1}" > "${2}" +} + # Create "localhost" entries into hosts format gravity_ParseLocalDomains() { local hostname @@ -502,19 +525,24 @@ gravity_ParseLocalDomains() { # Create primary blacklist entries gravity_ParseBlacklistDomains() { local output status + - # Empty $accretionDisc if it already exists, otherwise, create it - : > "${piholeDir}/${accretionDisc}" + if [[ "${BLOCKSTYLE_NXDOMAIN}" == true ]]; then + gravity_ParseDomainsIntoConfFile "${piholeDir}/${whitelistMatter}" "${adListNX}" + else + # Empty $accretionDisc if it already exists, otherwise, create it + : > "${piholeDir}/${accretionDisc}" - gravity_ParseDomainsIntoHosts "${piholeDir}/${whitelistMatter}" "${piholeDir}/${accretionDisc}" + gravity_ParseDomainsIntoHosts "${piholeDir}/${whitelistMatter}" "${piholeDir}/${accretionDisc}" - # Move the file over as /etc/pihole/gravity.list so dnsmasq can use it - output=$( { mv "${piholeDir}/${accretionDisc}" "${adList}"; } 2>&1 ) - status="$?" + # Move the file over as /etc/pihole/gravity.list so dnsmasq can use it + output=$( { mv "${piholeDir}/${accretionDisc}" "${adList}"; } 2>&1 ) + status="$?" - if [[ "${status}" -ne 0 ]]; then - echo -e "\\n ${CROSS} Unable to move ${accretionDisc} from ${piholeDir}\\n ${output}" - gravity_Cleanup "error" + if [[ "${status}" -ne 0 ]]; then + echo -e "\\n ${CROSS} Unable to move ${accretionDisc} from ${piholeDir}\\n ${output}" + gravity_Cleanup "error" + fi fi } @@ -524,10 +552,17 @@ gravity_ParseUserDomains() { return 0 fi - gravity_ParseDomainsIntoHosts "${blacklistFile}" "${blackList}.tmp" - # Copy the file over as /etc/pihole/black.list so dnsmasq can use it - mv "${blackList}.tmp" "${blackList}" 2> /dev/null || \ + if [[ "${BLOCKSTYLE_NXDOMAIN}" == true ]]; then + gravity_ParseDomainsIntoConfFile "${blacklistFile}" "${blackListNX}" + gravity_ParseDomainsIntoConfFile_WL "${whitelistFile}" "${whiteListNX}" + else + gravity_ParseDomainsIntoHosts "${blacklistFile}" "${blackList}.tmp" + # Copy the file over as /etc/pihole/black.list so dnsmasq can use it + mv "${blackList}.tmp" "${blackList}" 2> /dev/null || \ echo -e "\\n ${CROSS} Unable to move ${blackList##*/}.tmp to ${piholeDir}" + fi + + } # Trap Ctrl-C @@ -626,13 +661,15 @@ if [[ "${skipDownload}" == false ]] || [[ "${listType}" == "whitelist" ]]; then gravity_Whitelist fi +#"${piholeDir}/${whitelistMatter}" Now contains everything from preEventHorizon excluding everything from the blocklist + gravity_ShowBlockCount # Perform when downloading blocklists, or modifying the white/blacklist (not wildcards) if [[ "${skipDownload}" == false ]] || [[ "${listType}" == *"list" ]]; then str="Parsing domains into hosts format" echo -ne " ${INFO} ${str}..." - + gravity_ParseUserDomains # Perform when downloading blocklists From 0b217108dba86cffcde121adb06038311ef43a9c Mon Sep 17 00:00:00 2001 From: Adam Warner Date: Sat, 3 Mar 2018 16:36:27 +0000 Subject: [PATCH 2/4] If we're using NXDOMAIN, force restart of dns server Signed-off-by: Adam Warner --- gravity.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gravity.sh b/gravity.sh index 9ba7489..d7c14b3 100755 --- a/gravity.sh +++ b/gravity.sh @@ -624,8 +624,8 @@ for var in "$@"; do "-f" | "--force" ) forceDelete=true;; "-h" | "--help" ) helpFunc;; "-sd" | "--skip-download" ) skipDownload=true;; - "-b" | "--blacklist-only" ) listType="blacklist";; - "-w" | "--whitelist-only" ) listType="whitelist";; + "-b" | "--blacklist-only" ) listType="blacklist"; if [[ "${BLOCKSTYLE_NXDOMAIN}" == true ]]; then dnsRestartType="restart"; fi;; + "-w" | "--whitelist-only" ) listType="whitelist"; if [[ "${BLOCKSTYLE_NXDOMAIN}" == true ]]; then dnsRestartType="restart"; fi;; "-wild" | "--wildcard-only" ) listType="wildcard"; dnsRestartType="restart";; esac done From 3d01a38de1665cfc718da31a5d9042a3d02f8fca Mon Sep 17 00:00:00 2001 From: Adam Warner Date: Sun, 4 Mar 2018 13:47:11 +0000 Subject: [PATCH 3/4] move `dnsRestartType="restart"` to the top `if BLOCKSTYLE_NXDOMAIN=true` section Signed-off-by: Adam Warner --- gravity.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gravity.sh b/gravity.sh index d7c14b3..17d0880 100755 --- a/gravity.sh +++ b/gravity.sh @@ -67,6 +67,7 @@ if [[ -f "${setupVars}" ]];then if [[ "${BLOCKSTYLE_NXDOMAIN}" == true ]]; then truncate -s 0 "${blackList}" truncate -s 0 "${adList}" + dnsRestartType="restart" else rm "${adListNX}" 2> /dev/null rm "${blackListNX}" 2> /dev/null @@ -624,8 +625,8 @@ for var in "$@"; do "-f" | "--force" ) forceDelete=true;; "-h" | "--help" ) helpFunc;; "-sd" | "--skip-download" ) skipDownload=true;; - "-b" | "--blacklist-only" ) listType="blacklist"; if [[ "${BLOCKSTYLE_NXDOMAIN}" == true ]]; then dnsRestartType="restart"; fi;; - "-w" | "--whitelist-only" ) listType="whitelist"; if [[ "${BLOCKSTYLE_NXDOMAIN}" == true ]]; then dnsRestartType="restart"; fi;; + "-b" | "--blacklist-only" ) listType="blacklist";; + "-w" | "--whitelist-only" ) listType="whitelist";; "-wild" | "--wildcard-only" ) listType="wildcard"; dnsRestartType="restart";; esac done From c8a03692514af1940e731dfa3c4dc3460291b8f3 Mon Sep 17 00:00:00 2001 From: Adam Warner Date: Sun, 4 Mar 2018 22:39:53 +0000 Subject: [PATCH 4/4] Excent pihole enable/disable to use new NX lists Signed-off-by: Adam Warner --- pihole | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pihole b/pihole index 4421cb8..9781613 100755 --- a/pihole +++ b/pihole @@ -11,6 +11,9 @@ readonly PI_HOLE_SCRIPT_DIR="/opt/pihole" readonly wildcardlist="/etc/dnsmasq.d/03-pihole-wildcard.conf" +readonly adListNX="/etc/dnsmasq.d/00-pihole-gravity.conf" +readonly userListNX="/etc/dnsmasq.d/00-pihole-userblacklist.conf" +readonly whiteListNX="/etc/dnsmasq.d/99-pihole-whitelist.conf" readonly colfile="${PI_HOLE_SCRIPT_DIR}/COL_TABLE" source "${colfile}" @@ -382,6 +385,15 @@ Time: if [[ -e "$wildcardlist" ]]; then mv "$wildcardlist" "/etc/pihole/wildcard.list" fi + if [[ -e "$adListNX" ]]; then + mv "$adListNX" "/etc/pihole/gravityNX.list" + fi + if [[ -e "$userListNX" ]]; then + mv "$userListNX" "/etc/pihole/blackNX.list" + fi + if [[ -e "$whiteListNX" ]]; then + mv "$whiteListNX" "/etc/pihole/whitelistNX.list" + fi if [[ $# > 1 ]]; then local error=false if [[ "${2}" == *"s" ]]; then @@ -428,6 +440,15 @@ Time: if [[ -e "/etc/pihole/wildcard.list" ]]; then mv "/etc/pihole/wildcard.list" "$wildcardlist" fi + if [[ -e "/etc/pihole/gravityNX.list" ]]; then + mv "/etc/pihole/gravityNX.list" "$adListNX" + fi + if [[ -e "/etc/pihole/blackNX.list" ]]; then + mv "/etc/pihole/blackNX.list" "$userListNX" + fi + if [[ -e "/etc/pihole/whitelistNX.list" ]]; then + mv "/etc/pihole/whitelistNX.list" "$whiteListNX" + fi fi restartDNS