mirror of
https://github.com/pi-hole/pi-hole.git
synced 2024-11-15 02:42:58 +00:00
Merge branch 'development' into customblockpage
Conflicts: automated install/basic-install.sh
This commit is contained in:
commit
bb28d94884
9 changed files with 1015 additions and 844 deletions
|
@ -28,7 +28,7 @@ https://hosts-file.net/ad_servers.txt
|
|||
#http://adblock.mahakala.is/
|
||||
|
||||
# ADZHOSTS list. Has been known to block legitimate domains
|
||||
#http://optimate.dl.sourceforge.net/project/adzhosts/HOSTS.txt
|
||||
#http://pilotfiber.dl.sourceforge.net/project/adzhosts/HOSTS.txt
|
||||
|
||||
# Windows 10 telemetry list
|
||||
#https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/win10/spy.txt
|
||||
|
|
|
@ -20,13 +20,8 @@
|
|||
# OR IN /etc/dnsmasq.conf #
|
||||
###############################################################################
|
||||
|
||||
address=/pi.hole/@IPv4@
|
||||
address=/pi.hole/@IPv6@
|
||||
|
||||
address=/@HOSTNAME@/@IPv4@
|
||||
address=/@HOSTNAME@/@IPv6@
|
||||
|
||||
addn-hosts=/etc/pihole/gravity.list
|
||||
addn-hosts=/etc/pihole/local.list
|
||||
|
||||
domain-needed
|
||||
|
||||
|
|
|
@ -19,8 +19,9 @@ helpFunc() {
|
|||
:::
|
||||
::: Options:
|
||||
::: -p, password Set web interface password, an empty input will remove any previously set password
|
||||
::: -c, celsius Set Celcius temperature unit
|
||||
::: -c, celsius Set Celsius temperature unit
|
||||
::: -f, fahrenheit Set Fahrenheit temperature unit
|
||||
::: -k, kelvin Set Kelvin temperature unit
|
||||
::: -h, --help Show this help dialog
|
||||
EOM
|
||||
exit 0
|
||||
|
@ -31,16 +32,24 @@ SetTemperatureUnit(){
|
|||
# Remove setting from file (create backup setupVars.conf.bak)
|
||||
sed -i.bak '/TEMPERATUREUNIT/d' /etc/pihole/setupVars.conf
|
||||
# Save setting to file
|
||||
if [[ $unit == "F" ]] ; then
|
||||
echo "TEMPERATUREUNIT=F" >> /etc/pihole/setupVars.conf
|
||||
else
|
||||
echo "TEMPERATUREUNIT=C" >> /etc/pihole/setupVars.conf
|
||||
fi
|
||||
echo "TEMPERATUREUNIT=${unit}" >> /etc/pihole/setupVars.conf
|
||||
|
||||
}
|
||||
|
||||
SetWebPassword(){
|
||||
|
||||
if [ "${SUDO_USER}" == "www-data" ]; then
|
||||
echo "Security measure: user www-data is not allowed to change webUI password!"
|
||||
echo "Exiting"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "${SUDO_USER}" == "lighttpd" ]; then
|
||||
echo "Security measure: user lighttpd is not allowed to change webUI password!"
|
||||
echo "Exiting"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Remove password from file (create backup setupVars.conf.bak)
|
||||
sed -i.bak '/WEBPASSWORD/d' /etc/pihole/setupVars.conf
|
||||
# Set password only if there is one to be set
|
||||
|
@ -57,14 +66,173 @@ SetWebPassword(){
|
|||
|
||||
}
|
||||
|
||||
for var in "$@"; do
|
||||
case "${var}" in
|
||||
"-p" | "password" ) SetWebPassword;;
|
||||
"-c" | "celsius" ) unit="C"; SetTemperatureUnit;;
|
||||
"-f" | "fahrenheit" ) unit="F"; SetTemperatureUnit;;
|
||||
"-h" | "--help" ) helpFunc;;
|
||||
esac
|
||||
done
|
||||
SetDNSServers(){
|
||||
|
||||
# Remove setting from file (create backup setupVars.conf.bak)
|
||||
sed -i.bak '/PIHOLE_DNS_1/d;/PIHOLE_DNS_2/d;/DNS_FQDN_REQUIRED/d;' /etc/pihole/setupVars.conf
|
||||
# Save setting to file
|
||||
echo "PIHOLE_DNS_1=${args[2]}" >> /etc/pihole/setupVars.conf
|
||||
if [[ "${args[3]}" != "none" ]]; then
|
||||
echo "PIHOLE_DNS_2=${args[3]}" >> /etc/pihole/setupVars.conf
|
||||
else
|
||||
echo "PIHOLE_DNS_2=" >> /etc/pihole/setupVars.conf
|
||||
fi
|
||||
|
||||
# Replace within actual dnsmasq config file
|
||||
sed -i '/server=/d;' /etc/dnsmasq.d/01-pihole.conf
|
||||
echo "server=${args[2]}" >> /etc/dnsmasq.d/01-pihole.conf
|
||||
if [[ "${args[3]}" != "none" ]]; then
|
||||
echo "server=${args[3]}" >> /etc/dnsmasq.d/01-pihole.conf
|
||||
fi
|
||||
|
||||
# Remove domain-needed entry
|
||||
sed -i '/domain-needed/d;' /etc/dnsmasq.d/01-pihole.conf
|
||||
|
||||
# Readd it if required
|
||||
if [[ "${args[4]}" == "domain-needed" ]]; then
|
||||
echo "domain-needed" >> /etc/dnsmasq.d/01-pihole.conf
|
||||
echo "DNS_FQDN_REQUIRED=true" >> /etc/pihole/setupVars.conf
|
||||
else
|
||||
# Leave it deleted if not wanted
|
||||
echo "DNS_FQDN_REQUIRED=false" >> /etc/pihole/setupVars.conf
|
||||
fi
|
||||
|
||||
# Remove bogus-priv entry
|
||||
sed -i '/bogus-priv/d;' /etc/dnsmasq.d/01-pihole.conf
|
||||
|
||||
# Readd it if required
|
||||
if [[ "${args[5]}" == "bogus-priv" ]]; then
|
||||
echo "bogus-priv" >> /etc/dnsmasq.d/01-pihole.conf
|
||||
echo "DNS_BOGUS_PRIV=true" >> /etc/pihole/setupVars.conf
|
||||
else
|
||||
# Leave it deleted if not wanted
|
||||
echo "DNS_BOGUS_PRIV=false" >> /etc/pihole/setupVars.conf
|
||||
fi
|
||||
|
||||
# Restart dnsmasq to load new configuration
|
||||
RestartDNS
|
||||
|
||||
}
|
||||
|
||||
SetExcludeDomains(){
|
||||
|
||||
# Remove setting from file (create backup setupVars.conf.bak)
|
||||
sed -i.bak '/API_EXCLUDE_DOMAINS/d;' /etc/pihole/setupVars.conf
|
||||
# Save setting to file
|
||||
echo "API_EXCLUDE_DOMAINS=${args[2]}" >> /etc/pihole/setupVars.conf
|
||||
}
|
||||
|
||||
SetExcludeClients(){
|
||||
|
||||
# Remove setting from file (create backup setupVars.conf.bak)
|
||||
sed -i.bak '/API_EXCLUDE_CLIENTS/d;' /etc/pihole/setupVars.conf
|
||||
# Save setting to file
|
||||
echo "API_EXCLUDE_CLIENTS=${args[2]}" >> /etc/pihole/setupVars.conf
|
||||
}
|
||||
|
||||
Reboot(){
|
||||
|
||||
nohup bash -c "sleep 5; reboot" &> /dev/null </dev/null &
|
||||
|
||||
}
|
||||
|
||||
RestartDNS(){
|
||||
|
||||
if [ -x "$(command -v systemctl)" ]; then
|
||||
systemctl restart dnsmasq &> /dev/null
|
||||
else
|
||||
service dnsmasq restart &> /dev/null
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
SetQueryLogOptions(){
|
||||
|
||||
# Remove setting from file (create backup setupVars.conf.bak)
|
||||
sed -i.bak '/API_QUERY_LOG_SHOW/d;' /etc/pihole/setupVars.conf
|
||||
# Save setting to file
|
||||
echo "API_QUERY_LOG_SHOW=${args[2]}" >> /etc/pihole/setupVars.conf
|
||||
}
|
||||
|
||||
EnableDHCP(){
|
||||
|
||||
# Remove setting from file (create backup setupVars.conf.bak)
|
||||
sed -i.bak '/DHCP_/d;' /etc/pihole/setupVars.conf
|
||||
echo "DHCP_ACTIVE=true" >> /etc/pihole/setupVars.conf
|
||||
echo "DHCP_START=${args[2]}" >> /etc/pihole/setupVars.conf
|
||||
echo "DHCP_END=${args[3]}" >> /etc/pihole/setupVars.conf
|
||||
echo "DHCP_ROUTER=${args[4]}" >> /etc/pihole/setupVars.conf
|
||||
|
||||
# Remove setting from file
|
||||
sed -i '/dhcp-/d;/quiet-dhcp/d;' /etc/dnsmasq.d/01-pihole.conf
|
||||
# Save setting to file
|
||||
echo "dhcp-range=${args[2]},${args[3]},infinite" >> /etc/dnsmasq.d/01-pihole.conf
|
||||
echo "dhcp-option=option:router,${args[4]}" >> /etc/dnsmasq.d/01-pihole.conf
|
||||
# Changes the behaviour from strict RFC compliance so that DHCP requests on unknown leases from unknown hosts are not ignored. This allows new hosts to get a lease without a tedious timeout under all circumstances. It also allows dnsmasq to rebuild its lease database without each client needing to reacquire a lease, if the database is lost.
|
||||
echo "dhcp-authoritative" >> /etc/dnsmasq.d/01-pihole.conf
|
||||
# Use the specified file to store DHCP lease information
|
||||
echo "dhcp-leasefile=/etc/pihole/dhcp.leases" >> /etc/dnsmasq.d/01-pihole.conf
|
||||
# Suppress logging of the routine operation of these protocols. Errors and problems will still be logged, though.
|
||||
echo "quiet-dhcp" >> /etc/dnsmasq.d/01-pihole.conf
|
||||
echo "quiet-dhcp6" >> /etc/dnsmasq.d/01-pihole.conf
|
||||
|
||||
RestartDNS
|
||||
}
|
||||
|
||||
DisableDHCP(){
|
||||
|
||||
# Remove setting from file (create backup setupVars.conf.bak)
|
||||
sed -i.bak '/DHCP_ACTIVE/d;' /etc/pihole/setupVars.conf
|
||||
echo "DHCP_ACTIVE=false" >> /etc/pihole/setupVars.conf
|
||||
|
||||
# Remove setting from file
|
||||
sed -i '/dhcp-/d;/quiet-dhcp/d;' /etc/dnsmasq.d/01-pihole.conf
|
||||
|
||||
RestartDNS
|
||||
}
|
||||
|
||||
SetWebUILayout(){
|
||||
|
||||
# Remove setting from file (create backup setupVars.conf.bak)
|
||||
sed -i.bak '/WEBUIBOXEDLAYOUT/d;' /etc/pihole/setupVars.conf
|
||||
echo "WEBUIBOXEDLAYOUT=${args[2]}" >> /etc/pihole/setupVars.conf
|
||||
|
||||
}
|
||||
|
||||
SetDNSDomainName(){
|
||||
|
||||
# Remove setting from file (create backup setupVars.conf.bak)
|
||||
sed -i.bak '/PIHOLE_DOMAIN/d;' /etc/pihole/setupVars.conf
|
||||
# Save setting to file
|
||||
echo "PIHOLE_DOMAIN=${args[2]}" >> /etc/pihole/setupVars.conf
|
||||
|
||||
# Replace within actual dnsmasq config file
|
||||
sed -i '/domain=/d;' /etc/dnsmasq.d/01-pihole.conf
|
||||
echo "domain=${args[2]}" >> /etc/dnsmasq.d/01-pihole.conf
|
||||
|
||||
# Restart dnsmasq to load new configuration
|
||||
RestartDNS
|
||||
|
||||
}
|
||||
|
||||
case "${args[1]}" in
|
||||
"-p" | "password" ) SetWebPassword;;
|
||||
"-c" | "celsius" ) unit="C"; SetTemperatureUnit;;
|
||||
"-f" | "fahrenheit" ) unit="F"; SetTemperatureUnit;;
|
||||
"-k" | "kelvin" ) unit="K"; SetTemperatureUnit;;
|
||||
"setdns" ) SetDNSServers;;
|
||||
"setexcludedomains" ) SetExcludeDomains;;
|
||||
"setexcludeclients" ) SetExcludeClients;;
|
||||
"reboot" ) Reboot;;
|
||||
"restartdns" ) RestartDNS;;
|
||||
"setquerylog" ) SetQueryLogOptions;;
|
||||
"enabledhcp" ) EnableDHCP;;
|
||||
"disabledhcp" ) DisableDHCP;;
|
||||
"layout" ) SetWebUILayout;;
|
||||
"-h" | "--help" ) helpFunc;;
|
||||
"domainname" ) SetDNSDomainName;;
|
||||
* ) helpFunc;;
|
||||
esac
|
||||
|
||||
shift
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ _pihole() {
|
|||
COMPREPLY=()
|
||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
opts="blacklist chronometer debug flush help query reconfigure setupLCD uninstall updateGravity updatePihole version whitelist"
|
||||
opts="admin blacklist chronometer debug disable enable flush help logging query reconfigure restartdns setupLCD status tail uninstall updateGravity updatePihole version whitelist"
|
||||
|
||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
|
||||
return 0
|
||||
|
|
|
@ -16,11 +16,11 @@
|
|||
|
||||
# Pi-hole: Update the ad sources once a week on Sunday at 01:59
|
||||
# Download any updates from the adlists
|
||||
59 1 * * 7 root /usr/local/bin/pihole updateGravity
|
||||
59 1 * * 7 root PATH="$PATH:/usr/local/bin/" pihole updateGravity
|
||||
|
||||
# Pi-hole: Update Pi-hole! Uncomment to enable auto update
|
||||
#30 2 * * 7 root /usr/local/bin/pihole updatePihole
|
||||
#30 2 * * 7 root PATH="$PATH:/usr/local/bin/" pihole updatePihole
|
||||
|
||||
# Pi-hole: Flush the log daily at 00:00 so it doesn't get out of control
|
||||
# Stats will be viewable in the Web interface thanks to the cron job above
|
||||
00 00 * * * root /usr/local/bin/pihole flush
|
||||
00 00 * * * root PATH="$PATH:/usr/local/bin/" pihole flush
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -136,7 +136,7 @@ removeNoPurge() {
|
|||
fi
|
||||
|
||||
echo "::: Removing config files and scripts..."
|
||||
package_check ${i} > /dev/null
|
||||
package_check lighttpd > /dev/null
|
||||
if [ $? -eq 1 ]; then
|
||||
${SUDO} rm -rf /etc/lighttpd/ &> /dev/null
|
||||
else
|
||||
|
|
41
gravity.sh
41
gravity.sh
|
@ -45,11 +45,13 @@ fi
|
|||
|
||||
#Remove the /* from the end of the IPv4addr.
|
||||
IPV4_ADDRESS=${IPV4_ADDRESS%/*}
|
||||
IPV6_ADDRESS=${IPV6_ADDRESS}
|
||||
|
||||
# Variables for various stages of downloading and formatting the list
|
||||
basename=pihole
|
||||
piholeDir=/etc/${basename}
|
||||
adList=${piholeDir}/gravity.list
|
||||
localList=${piholeDir}/local.list
|
||||
justDomainsExtension=domains
|
||||
matterAndLight=${basename}.0.matterandlight.txt
|
||||
supernova=${basename}.1.supernova.txt
|
||||
|
@ -241,26 +243,37 @@ gravity_unique() {
|
|||
gravity_hostFormat() {
|
||||
# Format domain list as "192.168.x.x domain.com"
|
||||
echo -n "::: Formatting domains into a HOSTS file..."
|
||||
# Check vars from setupVars.conf to see if we're using IPv4, IPv6, Or both.
|
||||
if [[ -n "${IPV4_ADDRESS}" && -n "${IPV6_ADDRESS}" ]];then
|
||||
|
||||
# Both IPv4 and IPv6
|
||||
cat ${piholeDir}/${eventHorizon} | awk -v ipv4addr="$IPV4_ADDRESS" -v ipv6addr="$IPV6_ADDRESS" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> ${piholeDir}/${accretionDisc}
|
||||
if [[ -f /etc/hostname ]]; then
|
||||
hostname=$(</etc/hostname)
|
||||
elif [ -x "$(command -v hostname)" ]; then
|
||||
hostname=$(hostname -f)
|
||||
else
|
||||
echo "::: Error: Unable to determine fully qualified domain name of host"
|
||||
fi
|
||||
# Check vars from setupVars.conf to see if we're using IPv4, IPv6, Or both.
|
||||
if [[ -n "${IPV4_ADDRESS}" && -n "${IPV6_ADDRESS}" ]];then
|
||||
|
||||
elif [[ -n "${IPV4_ADDRESS}" && -z "${IPV6_ADDRESS}" ]];then
|
||||
echo -e "${IPV4_ADDRESS} ${hostname}\n${IPV6_ADDRESS} ${hostname}\n${IPV4_ADDRESS} pi.hole\n${IPV6_ADDRESS} pi.hole" > ${localList}
|
||||
# Both IPv4 and IPv6
|
||||
cat ${piholeDir}/${eventHorizon} | awk -v ipv4addr="$IPV4_ADDRESS" -v ipv6addr="$IPV6_ADDRESS" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> ${piholeDir}/${accretionDisc}
|
||||
|
||||
# Only IPv4
|
||||
cat ${piholeDir}/${eventHorizon} | awk -v ipv4addr="$IPV4_ADDRESS" '{sub(/\r$/,""); print ipv4addr" "$0}' >> ${piholeDir}/${accretionDisc}
|
||||
elif [[ -n "${IPV4_ADDRESS}" && -z "${IPV6_ADDRESS}" ]];then
|
||||
|
||||
elif [[ -z "${IPV4_ADDRESS}" && -n "${IPV6_ADDRESS}" ]];then
|
||||
echo -e "${IPV4_ADDRESS} ${hostname}\n${IPV4_ADDRESS} pi.hole" > ${localList}
|
||||
# Only IPv4
|
||||
cat ${piholeDir}/${eventHorizon} | awk -v ipv4addr="$IPV4_ADDRESS" '{sub(/\r$/,""); print ipv4addr" "$0}' >> ${piholeDir}/${accretionDisc}
|
||||
|
||||
# Only IPv6
|
||||
cat ${piholeDir}/${eventHorizon} | awk -v ipv6addr="$IPV6_ADDRESS" '{sub(/\r$/,""); print ipv6addr" "$0}' >> ${piholeDir}/${accretionDisc}
|
||||
elif [[ -z "${IPV4_ADDRESS}" && -n "${IPV6_ADDRESS}" ]];then
|
||||
|
||||
elif [[ -z "${IPV4_ADDRESS}" && -z "${IPV6_ADDRESS}" ]];then
|
||||
echo "::: No IP Values found! Please run 'pihole -r' and choose reconfigure to restore values"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${IPV6_ADDRESS} ${hostname}\n${IPV6_ADDRESS} pi.hole" > ${localList}
|
||||
# Only IPv6
|
||||
cat ${piholeDir}/${eventHorizon} | awk -v ipv6addr="$IPV6_ADDRESS" '{sub(/\r$/,""); print ipv6addr" "$0}' >> ${piholeDir}/${accretionDisc}
|
||||
|
||||
elif [[ -z "${IPV4_ADDRESS}" && -z "${IPV6_ADDRESS}" ]];then
|
||||
echo "::: No IP Values found! Please run 'pihole -r' and choose reconfigure to restore values"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Copy the file over as /etc/pihole/gravity.list so dnsmasq can use it
|
||||
cp ${piholeDir}/${accretionDisc} ${adList}
|
||||
|
|
32
pihole
32
pihole
|
@ -67,13 +67,28 @@ setupLCDFunction() {
|
|||
exit 0
|
||||
}
|
||||
|
||||
scanList(){
|
||||
domain="${1}"
|
||||
list="${2}"
|
||||
method="${3}"
|
||||
if [[ ${method} == "-exact" ]] ; then
|
||||
grep -E "(^|\s)${domain}($|\s)" "${list}"
|
||||
else
|
||||
grep "${domain}" "${list}"
|
||||
fi
|
||||
}
|
||||
|
||||
queryFunc() {
|
||||
domain="${2}"
|
||||
for list in /etc/pihole/list.*; do
|
||||
count=$(grep ${domain} $list | wc -l)
|
||||
method="${3}"
|
||||
lists=( /etc/pihole/list.* /etc/pihole/blacklist.txt)
|
||||
for list in ${lists[@]}; do
|
||||
result=$(scanList ${domain} ${list} ${method})
|
||||
# Remove empty lines before couting number of results
|
||||
count=$(sed '/^\s*$/d' <<< "$result" | wc -l)
|
||||
echo "::: ${list} (${count} results)"
|
||||
if [[ ${count} > 0 ]]; then
|
||||
grep ${domain} ${list}
|
||||
echo "${result}"
|
||||
fi
|
||||
echo ""
|
||||
done
|
||||
|
@ -120,7 +135,7 @@ restartDNS() {
|
|||
piholeEnable() {
|
||||
if [[ "${1}" == "0" ]] ; then
|
||||
#Disable Pihole
|
||||
sed -i 's/^addn-hosts/#addn-hosts/' /etc/dnsmasq.d/01-pihole.conf
|
||||
sed -i 's/^addn-hosts=\/etc\/pihole\/gravity.list/#addn-hosts=\/etc\/pihole\/gravity.list/' /etc/dnsmasq.d/01-pihole.conf
|
||||
echo "::: Blocking has been disabled!"
|
||||
if [[ $# > 1 ]] ; then
|
||||
if [[ ${2} == *"s"* ]] ; then
|
||||
|
@ -197,6 +212,11 @@ piholeStatus() {
|
|||
fi
|
||||
}
|
||||
|
||||
tailFunc() {
|
||||
echo "Press Ctrl-C to exit"
|
||||
tail -F /var/log/pihole.log
|
||||
exit 0
|
||||
}
|
||||
|
||||
helpFunc() {
|
||||
cat << EOM
|
||||
|
@ -210,13 +230,16 @@ helpFunc() {
|
|||
::: -b, blacklist Blacklist domains
|
||||
::: -d, debug Start a debugging session if having trouble
|
||||
::: -f, flush Flush the pihole.log file
|
||||
::: -t, tail Output the last lines of the pihole.log file. Lines are appended as the file grows
|
||||
::: -up, updatePihole Update Pi-hole
|
||||
::: -r, reconfigure Reconfigure or Repair Pi-hole
|
||||
::: -g, updateGravity Update the list of ad-serving domains
|
||||
::: -s, setupLCD Automatically configures the Pi to use the 2.8 LCD screen to display stats on it
|
||||
::: -c, chronometer Calculates stats and displays to an LCD
|
||||
::: -h, help Show this help dialog
|
||||
::: -v, version Show current versions
|
||||
::: -q, query Query the adlists for a specific domain
|
||||
::: Use pihole -q domain -exact if you want to see exact matches only
|
||||
::: -l, logging Enable or Disable logging (pass 'on' or 'off')
|
||||
::: -a, admin Admin webpage options
|
||||
::: uninstall Uninstall Pi-Hole from your system :(!
|
||||
|
@ -255,5 +278,6 @@ case "${1}" in
|
|||
"status" ) piholeStatus "$2";;
|
||||
"restartdns" ) restartDNS;;
|
||||
"-a" | "admin" ) webpageFunc "$@";;
|
||||
"-t" | "tail" ) tailFunc;;
|
||||
* ) helpFunc;;
|
||||
esac
|
||||
|
|
Loading…
Reference in a new issue