Browse Source

Merge pull request #2695 from dibdot/adblock

adblock: update 1.1.10
lilik-openwrt-22.03
Hannu Nyman 8 years ago
parent
commit
47690a1027
4 changed files with 152 additions and 111 deletions
  1. +2
    -2
      net/adblock/Makefile
  2. +30
    -17
      net/adblock/files/README.md
  3. +94
    -69
      net/adblock/files/adblock-helper.sh
  4. +26
    -23
      net/adblock/files/adblock-update.sh

+ 2
- 2
net/adblock/Makefile View File

@ -7,10 +7,10 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=adblock PKG_NAME:=adblock
PKG_VERSION:=1.1.2
PKG_VERSION:=1.1.10
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_LICENSE:=GPL-3.0+ PKG_LICENSE:=GPL-3.0+
PKG_MAINTAINER:=Dirk Brenken <openwrt@brenken.org>
PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/package.mk


+ 30
- 17
net/adblock/files/README.md View File

@ -1,4 +1,4 @@
# adblock script for openwrt
# dns based ad/abuse domain blocking
## Description ## Description
A lot of people already use adblocker plugins within their desktop browsers, but what if you are using your (smart) phone, tablet, watch or any other wlan gadget...getting rid of annoying ads, trackers and other abuse sites (like facebook ;-) is simple: block them with your router. When the dns server on your router receives dns requests, you will sort out queries that ask for the resource records of ad servers and return the local ip address of your router and the internal web server delivers a transparent pixel instead. A lot of people already use adblocker plugins within their desktop browsers, but what if you are using your (smart) phone, tablet, watch or any other wlan gadget...getting rid of annoying ads, trackers and other abuse sites (like facebook ;-) is simple: block them with your router. When the dns server on your router receives dns requests, you will sort out queries that ask for the resource records of ad servers and return the local ip address of your router and the internal web server delivers a transparent pixel instead.
@ -46,7 +46,7 @@ A lot of people already use adblocker plugins within their desktop browsers, but
* [zeus tracker](https://zeustracker.abuse.ch) * [zeus tracker](https://zeustracker.abuse.ch)
* => daily updates, approx. 440 entries * => daily updates, approx. 440 entries
* zero-conf like automatic installation & setup, usually no manual changes needed (i.e. ip address, network devices etc.) * zero-conf like automatic installation & setup, usually no manual changes needed (i.e. ip address, network devices etc.)
* supports a wide range of router modes, as long as the firewall and the DNS server are enabled
* supports a wide range of router modes (incl. AP mode), as long as the firewall and the DNS server are enabled
* full IPv4 and IPv6 support * full IPv4 and IPv6 support
* each blocklist source will be updated and processed separately * each blocklist source will be updated and processed separately
* timestamp check to download and process only updated adblock list sources * timestamp check to download and process only updated adblock list sources
@ -61,18 +61,19 @@ A lot of people already use adblocker plugins within their desktop browsers, but
* use dynamic iptables rulesets for adblock related redirects/rejects * use dynamic iptables rulesets for adblock related redirects/rejects
* openwrt init system support (start/stop/restart/reload) * openwrt init system support (start/stop/restart/reload)
* hotplug support, the adblock start will be triggered by wan 'ifup' event * hotplug support, the adblock start will be triggered by wan 'ifup' event
* optional: adblock list backup/restore (disabled by default)
* optional: automatic adblock list backup/restore, backups will be (de-)compressed on the fly (disabled by default)
* optional: add new adblock sources via uci config (see example below) * optional: add new adblock sources via uci config (see example below)
## Prerequisites ## Prerequisites
* [openwrt](https://openwrt.org), tested with latest stable release (Chaos Calmer) and with current trunk (Designated Driver) * [openwrt](https://openwrt.org), tested with latest stable release (Chaos Calmer) and with current trunk (Designated Driver)
* usual openwrt setup with enabled 'iptables', 'dnsmasq' and 'uhttpd' - dump AP modes are _not_ supported!
* [LEDE project](https://www.lede-project.org), tested with trunk > r98
* usual openwrt setup with enabled 'iptables', 'dnsmasq' and 'uhttpd' - dump AP modes without these basics are _not_ supported!
* additional required software packages: * additional required software packages:
* wget * wget
* optional: 'kmod-ipt-nat6' for IPv6 support * optional: 'kmod-ipt-nat6' for IPv6 support
* the above dependencies and requirements will be checked during package installation & script runtime * the above dependencies and requirements will be checked during package installation & script runtime
## Designated Driver Installation & Usage
## OpenWrt / LEDE trunk Installation & Usage
* install 'adblock' (_opkg install adblock_) * install 'adblock' (_opkg install adblock_)
* adblock starts automatically during boot/wan-ifup event, check _logread -e "adblock"_ for adblock related information * adblock starts automatically during boot/wan-ifup event, check _logread -e "adblock"_ for adblock related information
* optional: start/restart/stop the adblock service manually with _/etc/init.d/adblock_ * optional: start/restart/stop the adblock service manually with _/etc/init.d/adblock_
@ -94,12 +95,13 @@ A lot of people already use adblocker plugins within their desktop browsers, but
* install the packages with _opkg install <...>_ as described above * install the packages with _opkg install <...>_ as described above
## Tweaks ## Tweaks
* to process & store all blocklist sources at once it might helpful to enlarge your temp directory with a swap partition => see [openwrt wiki](https://wiki.openwrt.org/doc/uci/fstab) for further details
* add domain white- or blacklist entries to always-allow or -deny certain (sub) domains, by default both lists are located in _/etc/adblock_. Please add one domain per line - ip addresses, wildcards & regex are _not_ allowed (see example below)
* enable the backup/restore feature, to restore automatically the latest stable backup of your adblock lists in case of any (partial) processing error (i.e. a single blocklist source is down). Please use an (external) solid partition and _not_ your volatile router temp directory for this
* for a scheduled call of the adblock service via _/etc/init.d/adblock start_ add an appropriate crontab entry (see example below)
* in case of any script runtime errors, you should enable script debugging: for this please change the 'DEBUG' variable in the header of _/usr/bin/adblock-update.sh_ from '0' to '1' and start this script afterwards (without any parameter)
* you could add new blocklist sources on your own via uci config, all you need is a source url and an awk one-liner (see example below)
* **storage:** to process & store all blocklist sources at once it might helpful to enlarge your temp directory with a swap partition => see [openwrt wiki](https://wiki.openwrt.org/doc/uci/fstab) for further details
* **white-/blacklist:** add domain white- or blacklist entries to always-allow or -deny certain (sub) domains, by default both lists are located in _/etc/adblock_. Please add one domain per line - ip addresses, wildcards & regex are _not_ allowed (see example below)
* **backup/restore:** enable the backup/restore feature, to restore automatically the latest compressed backup of your adblock lists in case of any processing error (i.e. a single blocklist source is down). Please use an (external) solid partition and _not_ your volatile router temp directory for this
* **list updates:** for a scheduled call of the adblock service add an appropriate crontab entry (see example below)
* **new list sources:** you could add new blocklist sources on your own via uci config, all you need is a source url and an awk one-liner (see example below)
* **AP mode:** in AP mode adblock uses automatically the local router ip as nullip address. To make sure that your LuCI interface will be still accessible, please change the local uhttpd instance to ports <> 80/443 (see example below)
* **debugging:** for script debugging please change the 'DEBUG' variable in the header of _/usr/bin/adblock-update.sh_ from '0' to '1' and start this script directly (without any parameters)
## Further adblock config options ## Further adblock config options
* usually the adblock autodetection works quite well and no manual config overrides are needed, all options apply to the 'global' config section: * usually the adblock autodetection works quite well and no manual config overrides are needed, all options apply to the 'global' config section:
@ -107,13 +109,13 @@ A lot of people already use adblocker plugins within their desktop browsers, but
* adb\_cfgversion => config version string (do not change!) - adblock will check this entry during startup * adb\_cfgversion => config version string (do not change!) - adblock will check this entry during startup
* adb\_lanif => name of the logical lan interface (default: 'lan') * adb\_lanif => name of the logical lan interface (default: 'lan')
* adb\_nullport => port of the adblock uhttpd instance (default: '65535') * adb\_nullport => port of the adblock uhttpd instance (default: '65535')
* adb\_nullipv4 => IPv4 blackhole ip address (default: '192.0.2.1')
* adb\_nullipv6 => IPv6 blackhole ip address (default: '::ffff:c000:0201')
* adb\_nullipv4 => IPv4 blackhole ip address (default: '192.0.2.1', in AP mode: local router ip)
* adb\_nullipv6 => IPv6 blackhole ip address (default: '::ffff:c000:0201', in AP mode: local router ip)
* adb\_forcedns => redirect all DNS queries to local dnsmasq resolver (default: '1', enabled) * adb\_forcedns => redirect all DNS queries to local dnsmasq resolver (default: '1', enabled)
## Examples ## Examples
**example cronjob for a regular update of the block lists:**
**example cronjob for a regular block list update:**
<pre><code> <pre><code>
# configuration found in /etc/crontabs/root # configuration found in /etc/crontabs/root
# start adblock script once a day at 6 a.m. # start adblock script once a day at 6 a.m.
@ -147,6 +149,16 @@ This rule removes _all_ domains from the blocklists with this string in it, i.e.
photos.daily-deals.analoganalytics.com photos.daily-deals.analoganalytics.com
adblockanalytics.com adblockanalytics.com
**example uhttpd configuration in AP mode:**
<pre><code>
# configuration found in /etc/config/uhttpd
# change default http/https ports <> 80/443
#
config uhttpd 'main'
list listen_http '0.0.0.0:88'
list listen_https '0.0.0.0:445'
</code></pre>
**example to add a new blocklist source:** **example to add a new blocklist source:**
<pre><code> <pre><code>
1. the easy way ... 1. the easy way ...
@ -177,14 +189,15 @@ If your awk one-liner works quite well, add a new source section in adblock conf
</code></pre> </code></pre>
## Background ## Background
This adblock package is a dns/dnsmasq based adblock solution for openwrt.
This adblock package is a dns/dnsmasq based adblock solution.
Queries to ad/abuse domains are never forwarded and always replied with a local IP address which may be IPv4 or IPv6. Queries to ad/abuse domains are never forwarded and always replied with a local IP address which may be IPv4 or IPv6.
For that purpose adblock uses an ip address from the private 'TEST-NET-1' subnet (192.0.2.1 / ::ffff:c000:0201) by default.
For that purpose adblock uses an ip address from the private 'TEST-NET-1' subnet (192.0.2.1 / ::ffff:c000:0201) by default (in AP mode the local router ip address will be used).
Furthermore all ad/abuse queries will be filtered by ip(6)tables and redirected to internal adblock pixel server (in PREROUTING chain) or rejected (in FORWARD or OUTPUT chain). Furthermore all ad/abuse queries will be filtered by ip(6)tables and redirected to internal adblock pixel server (in PREROUTING chain) or rejected (in FORWARD or OUTPUT chain).
All iptables and uhttpd related adblock additions are non-destructive, no hard-coded changes in 'firewall.user', 'uhttpd' config or any other openwrt related config files. There is _no_ adblock background daemon running, the (scheduled) start of the adblock service keeps only the adblock lists up-to-date. All iptables and uhttpd related adblock additions are non-destructive, no hard-coded changes in 'firewall.user', 'uhttpd' config or any other openwrt related config files. There is _no_ adblock background daemon running, the (scheduled) start of the adblock service keeps only the adblock lists up-to-date.
--ifup event
## Support ## Support
Please join the adblock discussion in this [openwrt forum thread](https://forum.openwrt.org/viewtopic.php?id=59803) or contact me by mail <openwrt@brenken.org>
Please join the adblock discussion in this [openwrt forum thread](https://forum.openwrt.org/viewtopic.php?id=59803) or contact me by mail <dev@brenken.org>
## Removal ## Removal
* stop all adblock related services with _/etc/init.d/adblock stop_ * stop all adblock related services with _/etc/init.d/adblock stop_


+ 94
- 69
net/adblock/files/adblock-helper.sh View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# function library used by adblock-update.sh # function library used by adblock-update.sh
# written by Dirk Brenken (openwrt@brenken.org)
# written by Dirk Brenken (dev@brenken.org)
# f_envload: load adblock environment # f_envload: load adblock environment
# #
@ -105,12 +105,25 @@ f_envload()
config_foreach parse_config service config_foreach parse_config service
config_foreach parse_config source config_foreach parse_config source
# set more script defaults (can't be overwritten by adblock config options)
#
adb_minspace=12000
adb_tmpfile="$(mktemp -tu)"
adb_tmpdir="$(mktemp -p /tmp -d)"
adb_dnsdir="/tmp/dnsmasq.d"
adb_dnsprefix="adb_list"
adb_uci="$(which uci)"
adb_iptv4="$(which iptables)"
adb_iptv6="$(which ip6tables)"
adb_fetch="$(which wget-ssl)"
unset adb_srclist adb_revsrclist adb_errsrclist
# check 'enabled' & 'version' config options # check 'enabled' & 'version' config options
# #
if [ -z "${adb_enabled}" ] || [ -z "${adb_cfgversion}" ] || [ "${adb_cfgversion}" != "${adb_scriptver%.*}" ] if [ -z "${adb_enabled}" ] || [ -z "${adb_cfgversion}" ] || [ "${adb_cfgversion}" != "${adb_scriptver%.*}" ]
then then
rc=125
f_log "outdated adblock configuration found, please use latest version from '/etc/adblock/adblock.conf.default'" "${rc}"
rc=-1
f_log "outdated adblock configuration found, please copy latest version from '/etc/adblock/adblock.conf.default' to '/etc/config/adblock'"
f_exit f_exit
fi fi
if [ $((adb_enabled)) -ne 1 ] if [ $((adb_enabled)) -ne 1 ]
@ -120,18 +133,25 @@ f_envload()
f_exit f_exit
fi fi
# set more script defaults (can't be overwritten by adblock config options)
# check running dnsmasq instance
# #
adb_minspace=12000
adb_tmpfile="$(mktemp -tu)"
adb_tmpdir="$(mktemp -p /tmp -d)"
adb_dnsdir="/tmp/dnsmasq.d"
adb_dnsprefix="adb_list"
adb_uci="$(which uci)"
adb_iptv4="$(which iptables)"
adb_iptv6="$(which ip6tables)"
adb_fetch="$(which wget-ssl)"
unset adb_srclist adb_revsrclist adb_errsrclist
rc="$(ps | grep -q "[d]nsmasq"; printf ${?})"
if [ $((rc)) -ne 0 ]
then
rc=-1
f_log "please enable the local dnsmasq instance to use adblock"
f_exit
fi
# check running firewall
#
check="$(${adb_iptv4} -vnL | grep -F "DROP")"
if [ -z "${check}" ]
then
rc=-1
f_log "please enable the local firewall to use adblock"
f_exit
fi
# get lan ip addresses # get lan ip addresses
# #
@ -139,11 +159,37 @@ f_envload()
network_get_ipaddr6 adb_ipv6 "${adb_lanif}" network_get_ipaddr6 adb_ipv6 "${adb_lanif}"
if [ -z "${adb_ipv4}" ] && [ -z "${adb_ipv6}" ] if [ -z "${adb_ipv4}" ] && [ -z "${adb_ipv6}" ]
then then
rc=130
f_log "no valid IPv4/IPv6 configuration found (${adb_lanif}), please set 'adb_lanif' manually" "${rc}"
rc=-1
f_log "no valid IPv4/IPv6 configuration found (${adb_lanif}), please set 'adb_lanif' manually"
f_exit f_exit
fi fi
# check logical update interfaces (with default route)
#
network_find_wan adb_wanif4
network_find_wan6 adb_wanif6
if [ -z "${adb_wanif4}" ] && [ -z "${adb_wanif6}" ]
then
adb_wanif4="${adb_lanif}"
fi
# check AP mode
#
if [ "${adb_wanif4}" = "${adb_lanif}" ] || [ "${adb_wanif6}" = "${adb_lanif}" ]
then
adb_nullipv4="${adb_ipv4}"
adb_nullipv6="${adb_ipv6}"
if [ "$(uci get uhttpd.main.listen_http | grep -Fo "80")" = "80" ] ||
[ "$(uci get uhttpd.main.listen_https | grep -Fo "443")" = "443" ]
then
rc=-1
f_log "AP mode detected, set local LuCI instance to ports <> 80/443"
f_exit
else
apmode_ok="true"
fi
fi
# get system release level # get system release level
# #
adb_sysver="$(printf "${pkg_list}" | grep "^base-files -")" adb_sysver="$(printf "${pkg_list}" | grep "^base-files -")"
@ -156,14 +202,9 @@ f_envcheck()
{ {
local check local check
# check logical update interfaces (with default route)
#
network_find_wan adb_wanif4
network_find_wan6 adb_wanif6
if [ -z "${adb_wanif4}" ] && [ -z "${adb_wanif6}" ]
if [ "${apmode_ok}" = "true" ]
then then
adb_wanif4="true"
f_log "no valid IPv4/IPv6 interface with default route found, IPv4 mode will be assumed"
f_log "AP mode enabled"
fi fi
# check general package dependencies # check general package dependencies
@ -212,7 +253,7 @@ f_envcheck()
then then
if [ $((av_space)) -le 2000 ] if [ $((av_space)) -le 2000 ]
then then
rc=135
rc=125
f_log "not enough free space in '${adb_tmpdir}' (avail. ${av_space} kb)" "${rc}" f_log "not enough free space in '${adb_tmpdir}' (avail. ${av_space} kb)" "${rc}"
f_exit f_exit
else else
@ -220,7 +261,7 @@ f_envcheck()
fi fi
fi fi
else else
rc=140
rc=130
f_log "temp directory not found" "${rc}" f_log "temp directory not found" "${rc}"
f_exit f_exit
fi fi
@ -256,34 +297,16 @@ f_envcheck()
f_log "backup/restore will be disabled" f_log "backup/restore will be disabled"
fi fi
# check running dnsmasq instance & set defaults
# set dnsmasq defaults
# #
rc="$(ps | grep -q "[d]nsmasq"; printf ${?})"
if [ $((rc)) -eq 0 ]
if [ -n "${adb_wanif4}" ] && [ -n "${adb_wanif6}" ]
then then
if [ -n "${adb_wanif4}" ] && [ -n "${adb_wanif6}" ]
then
adb_dnsformat="awk -v ipv4="${adb_nullipv4}" -v ipv6="${adb_nullipv6}" '{print \"address=/\"\$0\"/\"ipv4\"\n\"\"address=/\"\$0\"/\"ipv6}'"
elif [ -n "${adb_wanif4}" ]
then
adb_dnsformat="awk -v ipv4="${adb_nullipv4}" '{print \"address=/\"\$0\"/\"ipv4}'"
else
adb_dnsformat="awk -v ipv6="${adb_nullipv6}" '{print \"address=/\"\$0\"/\"ipv6}'"
fi
else
rc=145
f_log "please enable the local dns server to use adblock" "${rc}"
f_exit
fi
# check running firewall
#
check="$(${adb_iptv4} -vnL | grep -F "DROP")"
if [ -z "${check}" ]
adb_dnsformat="awk -v ipv4="${adb_nullipv4}" -v ipv6="${adb_nullipv6}" '{print \"address=/\"\$0\"/\"ipv4\"\n\"\"address=/\"\$0\"/\"ipv6}'"
elif [ -n "${adb_wanif4}" ]
then then
rc=150
f_log "please enable the local firewall to use adblock" "${rc}"
f_exit
adb_dnsformat="awk -v ipv4="${adb_nullipv4}" '{print \"address=/\"\$0\"/\"ipv4}'"
else
adb_dnsformat="awk -v ipv6="${adb_nullipv6}" '{print \"address=/\"\$0\"/\"ipv6}'"
fi fi
# check ipv4/iptables configuration # check ipv4/iptables configuration
@ -376,7 +399,7 @@ f_depend()
check="$(printf "${pkg_list}" | grep "^${package} -")" check="$(printf "${pkg_list}" | grep "^${package} -")"
if [ -z "${check}" ] if [ -z "${check}" ]
then then
rc=155
rc=135
f_log "package '${package}' not found" "${rc}" f_log "package '${package}' not found" "${rc}"
f_exit f_exit
fi fi
@ -444,7 +467,7 @@ f_log()
log_rc=", rc: ${log_rc}" log_rc=", rc: ${log_rc}"
log_msg="${log_msg}${log_rc}" log_msg="${log_msg}${log_rc}"
fi fi
/usr/bin/logger ${log_parm} -t "adblock[${adb_pid}] ${class}" "${log_msg}" 2>&1
"${adb_log}" ${log_parm} -t "adblock[${adb_pid}] ${class}" "${log_msg}" 2>&1
fi fi
} }
@ -469,43 +492,44 @@ f_space()
# #
f_cntconfig() f_cntconfig()
{ {
local list
local src_name local src_name
local count=0 local count=0
local count_sum=0 local count_sum=0
for list in $(ls -ASr "${adb_dnsdir}/${adb_dnsprefix}."*)
for src_name in $(ls -ASr "${adb_dnsdir}/${adb_dnsprefix}"*)
do do
src_name="${list/*./}"
count="$(wc -l < "${list}")"
count="$(wc -l < "${src_name}")"
src_name="${src_name#*.}"
if [ -n "${adb_wanif4}" ] && [ -n "${adb_wanif6}" ] if [ -n "${adb_wanif4}" ] && [ -n "${adb_wanif6}" ]
then then
count=$((count / 2)) count=$((count / 2))
fi fi
${adb_uci} -q set "adblock.${src_name}.adb_src_count=${count}"
"${adb_uci}" -q set "adblock.${src_name}.adb_src_count=${count}"
count_sum=$((count_sum + count)) count_sum=$((count_sum + count))
done done
${adb_uci} -q set "adblock.global.adb_overall_count=${count_sum}"
"${adb_uci}" -q set "adblock.global.adb_overall_count=${count_sum}"
} }
# f_rmconfig: remove counters & timestamps in given config sections # f_rmconfig: remove counters & timestamps in given config sections
# #
f_rmconfig() f_rmconfig()
{ {
local src_name
local rm_done="${1}" local rm_done="${1}"
local restore_done="${2:-false}"
for list in ${rm_done}
for src_name in ${rm_done}
do do
src_name="${list/*./}"
if [ -n "${restore_done}" ]
src_name="${src_name#*.}"
if [ "${restore_done}" = "true" ]
then then
${adb_uci} -q set "adblock.${src_name}.adb_src_timestamp=list restored"
src_name="${src_name%.*}"
"${adb_uci}" -q set "adblock.${src_name}.adb_src_timestamp=list restored"
else else
${adb_uci} -q delete "adblock.${src_name}.adb_src_count"
${adb_uci} -q delete "adblock.${src_name}.adb_src_timestamp"
"${adb_uci}" -q delete "adblock.${src_name}.adb_src_count"
"${adb_uci}" -q delete "adblock.${src_name}.adb_src_timestamp"
fi fi
done done
unset restore_done
} }
# f_restore: restore last adblock list backups and restart dnsmasq # f_restore: restore last adblock list backups and restart dnsmasq
@ -536,10 +560,11 @@ f_restore()
# #
if [ "${backup_ok}" = "true" ] if [ "${backup_ok}" = "true" ]
then then
restore_done="$(find "${adb_dir_backup}" -maxdepth 1 -type f -name "${adb_dnsprefix}.*" -print -exec cp -pf "{}" "${adb_dnsdir}" \;)"
restore_done="$(find "${adb_dir_backup}" -maxdepth 1 -type f -name "${adb_dnsprefix}*.gz" -print -exec cp -pf "{}" "${adb_dnsdir}" \;)"
rc=${?} rc=${?}
if [ $((rc)) -eq 0 ] && [ -n "${restore_done}" ] if [ $((rc)) -eq 0 ] && [ -n "${restore_done}" ]
then then
find "${adb_dnsdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}*.gz" -exec gunzip -f "{}" \;
f_log "all available backups restored" f_log "all available backups restored"
elif [ $((rc)) -ne 0 ] && [ -n "${restore_done}" ] elif [ $((rc)) -ne 0 ] && [ -n "${restore_done}" ]
then then
@ -563,7 +588,7 @@ f_restore()
f_cntconfig f_cntconfig
f_log "adblock lists with overall ${adb_count} domains loaded" f_log "adblock lists with overall ${adb_count} domains loaded"
else else
rc=160
rc=140
f_log "dnsmasq restart failed, please check 'logread' output" "${rc}" f_log "dnsmasq restart failed, please check 'logread' output" "${rc}"
fi fi
fi fi
@ -604,7 +629,7 @@ f_exit()
fi fi
if [ -n "$(${adb_uci} -q changes adblock)" ] if [ -n "$(${adb_uci} -q changes adblock)" ]
then then
${adb_uci} -q commit "adblock"
"${adb_uci}" -q commit "adblock"
fi fi
f_log "firewall statistics (IPv4/IPv6): ${ipv4_adblock}/${ipv6_adblock} ad related packets blocked" f_log "firewall statistics (IPv4/IPv6): ${ipv4_adblock}/${ipv6_adblock} ad related packets blocked"
f_log "domain adblock processing finished successfully (${adb_scriptver}, ${adb_sysver}, $(/bin/date "+%d.%m.%Y %H:%M:%S"))" f_log "domain adblock processing finished successfully (${adb_scriptver}, ${adb_sysver}, $(/bin/date "+%d.%m.%Y %H:%M:%S"))"
@ -612,7 +637,7 @@ f_exit()
then then
if [ -n "$(${adb_uci} -q changes adblock)" ] if [ -n "$(${adb_uci} -q changes adblock)" ]
then then
${adb_uci} -q revert "adblock"
"${adb_uci}" -q revert "adblock"
fi fi
f_log "domain adblock processing failed (${adb_scriptver}, ${adb_sysver}, $(/bin/date "+%d.%m.%Y %H:%M:%S"))" f_log "domain adblock processing failed (${adb_scriptver}, ${adb_sysver}, $(/bin/date "+%d.%m.%Y %H:%M:%S"))"
else else


+ 26
- 23
net/adblock/files/adblock-update.sh View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# dns based ad/abuse domain blocking script # dns based ad/abuse domain blocking script
# written by Dirk Brenken (openwrt@brenken.org)
# written by Dirk Brenken (dev@brenken.org)
# This is free software, licensed under the GNU General Public License v3. # This is free software, licensed under the GNU General Public License v3.
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
@ -19,15 +19,16 @@ then
exec 2>/dev/null exec 2>/dev/null
fi fi
# pid handling
# set pid & logger
# #
adb_pid="${$}" adb_pid="${$}"
adb_pidfile="/var/run/adblock.pid" adb_pidfile="/var/run/adblock.pid"
adb_log="$(which logger)"
if [ -r "${adb_pidfile}" ] if [ -r "${adb_pidfile}" ]
then then
rc=255 rc=255
/usr/bin/logger -s -t "adblock[${adb_pid}] error" "adblock service already running ($(cat ${adb_pidfile}))"
"${adb_log}" -s -t "adblock[${adb_pid}] error" "adblock service already running ($(cat ${adb_pidfile}))"
exit ${rc} exit ${rc}
else else
printf "${adb_pid}" > "${adb_pidfile}" printf "${adb_pid}" > "${adb_pidfile}"
@ -36,7 +37,7 @@ fi
# get current directory and script version # get current directory and script version
# #
adb_scriptdir="${0%/*}" adb_scriptdir="${0%/*}"
adb_scriptver="1.1.2"
adb_scriptver="1.1.10"
# source in adblock function library # source in adblock function library
# #
@ -45,7 +46,7 @@ then
. "${adb_scriptdir}/adblock-helper.sh" . "${adb_scriptdir}/adblock-helper.sh"
else else
rc=254 rc=254
/usr/bin/logger -s -t "adblock[${adb_pid}] error" "adblock function library not found"
"${adb_log}" -s -t "adblock[${adb_pid}] error" "adblock function library not found"
rm -f "${adb_pidfile}" rm -f "${adb_pidfile}"
exit ${rc} exit ${rc}
fi fi
@ -81,7 +82,7 @@ do
# #
if [ -z "${url}" ] || [ -z "${src_rset}" ] if [ -z "${url}" ] || [ -z "${src_rset}" ]
then then
${adb_uci} -q set "adblock.${src_name}.adb_src_timestamp=broken config"
"${adb_uci}" -q set "adblock.${src_name}.adb_src_timestamp=broken config"
f_log " broken source configuration, check 'adb_src' and 'adb_src_rset' in config" f_log " broken source configuration, check 'adb_src' and 'adb_src_rset' in config"
continue continue
fi fi
@ -90,9 +91,9 @@ do
# #
if [ -z "${adb_srclist}" ] if [ -z "${adb_srclist}" ]
then then
adb_srclist="! -name ${adb_dnsprefix}.${src_name}"
adb_srclist="! -name ${adb_dnsprefix}.${src_name}*"
else else
adb_srclist="${adb_srclist} -a ! -name ${adb_dnsprefix}.${src_name}"
adb_srclist="${adb_srclist} -a ! -name ${adb_dnsprefix}.${src_name}*"
fi fi
# only download adblock list with newer/updated timestamp # only download adblock list with newer/updated timestamp
@ -109,7 +110,7 @@ do
f_log " no online timestamp received, current date will be used" f_log " no online timestamp received, current date will be used"
fi fi
if [ -z "${list_time}" ] || [ "${list_time}" != "${url_time}" ] || [ ! -r "${adb_dnsfile}" ] ||\ if [ -z "${list_time}" ] || [ "${list_time}" != "${url_time}" ] || [ ! -r "${adb_dnsfile}" ] ||\
([ "${backup_ok}" = "true" ] && [ ! -r "${adb_dir_backup}/${adb_dnsprefix}.${src_name}" ])
([ "${backup_ok}" = "true" ] && [ ! -r "${adb_dir_backup}/${adb_dnsprefix}.${src_name}.gz" ])
then then
if [ "${src_name}" = "blacklist" ] if [ "${src_name}" = "blacklist" ]
then then
@ -119,7 +120,7 @@ do
then then
shalla_archive="${adb_tmpdir}/shallalist.tar.gz" shalla_archive="${adb_tmpdir}/shallalist.tar.gz"
shalla_file="${adb_tmpdir}/shallalist.txt" shalla_file="${adb_tmpdir}/shallalist.txt"
${adb_fetch} ${fetch_parm} --output-document="${shalla_archive}" "${url}"
"${adb_fetch}" ${fetch_parm} --output-document="${shalla_archive}" "${url}"
rc=${?} rc=${?}
if [ $((rc)) -eq 0 ] if [ $((rc)) -eq 0 ]
then then
@ -161,18 +162,18 @@ do
unset tmp_domains unset tmp_domains
elif [ $((rc)) -eq 0 ] && [ -z "${tmp_domains}" ] elif [ $((rc)) -eq 0 ] && [ -z "${tmp_domains}" ]
then then
${adb_uci} -q set "adblock.${src_name}.adb_src_timestamp=empty download"
"${adb_uci}" -q set "adblock.${src_name}.adb_src_timestamp=empty download"
f_log " empty source download finished" f_log " empty source download finished"
continue continue
else else
rc=0 rc=0
if [ -z "${adb_errsrclist}" ] if [ -z "${adb_errsrclist}" ]
then then
adb_errsrclist="-name ${adb_dnsprefix}.${src_name}"
adb_errsrclist="-name ${adb_dnsprefix}.${src_name}.gz"
else else
adb_errsrclist="${adb_errsrclist} -o -name ${adb_dnsprefix}.${src_name}"
adb_errsrclist="${adb_errsrclist} -o -name ${adb_dnsprefix}.${src_name}.gz"
fi fi
${adb_uci} -q set "adblock.${src_name}.adb_src_timestamp=download failed"
"${adb_uci}" -q set "adblock.${src_name}.adb_src_timestamp=download failed"
f_log " source download failed" f_log " source download failed"
continue continue
fi fi
@ -204,14 +205,14 @@ do
# #
if [ $((rc)) -eq 0 ] if [ $((rc)) -eq 0 ]
then then
${adb_uci} -q set "adblock.${src_name}.adb_src_timestamp=${url_time}"
"${adb_uci}" -q set "adblock.${src_name}.adb_src_timestamp=${url_time}"
f_log " domain merging finished" f_log " domain merging finished"
else else
f_log " domain merging failed" "${rc}" f_log " domain merging failed" "${rc}"
f_restore f_restore
fi fi
else else
${adb_uci} -q set "adblock.${src_name}.adb_src_timestamp=empty domain input"
"${adb_uci}" -q set "adblock.${src_name}.adb_src_timestamp=empty domain input"
f_log " empty domain input received" f_log " empty domain input received"
continue continue
fi fi
@ -221,18 +222,18 @@ done
# #
if [ -n "${adb_srclist}" ] if [ -n "${adb_srclist}" ]
then then
rm_done="$(find "${adb_dnsdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}.*" \( ${adb_srclist} \) -print -exec rm -f "{}" \;)"
rm_done="$(find "${adb_dnsdir}" -maxdepth 1 -type f \( ${adb_srclist} \) -print -exec rm -f "{}" \;)"
rc=${?} rc=${?}
if [ "${backup_ok}" = "true" ]
if [ "${backup_ok}" = "true" ] && [ -n "${rm_done}" ]
then then
find "${adb_dir_backup}" -maxdepth 1 -type f -name "${adb_dnsprefix}.*" \( ${adb_srclist} \) -exec rm -f "{}" \;
find "${adb_dir_backup}" -maxdepth 1 -type f \( ${adb_srclist} \) -exec rm -f "{}" \;
fi fi
else else
rm_done="$(find "${adb_dnsdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}.*" -print -exec rm -f "{}" \;)"
rm_done="$(find "${adb_dnsdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}*" -print -exec rm -f "{}" \;)"
rc=${?} rc=${?}
if [ "${backup_ok}" = "true" ] if [ "${backup_ok}" = "true" ]
then then
find "${adb_dir_backup}" -maxdepth 1 -type f -name "${adb_dnsprefix}.*" -exec rm -f "{}" \;
find "${adb_dir_backup}" -maxdepth 1 -type f -name "${adb_dnsprefix}*" -exec rm -f "{}" \;
fi fi
fi fi
if [ $((rc)) -eq 0 ] && [ -n "${rm_done}" ] if [ $((rc)) -eq 0 ] && [ -n "${rm_done}" ]
@ -253,7 +254,8 @@ then
rc=${?} rc=${?}
if [ $((rc)) -eq 0 ] && [ -n "${restore_done}" ] if [ $((rc)) -eq 0 ] && [ -n "${restore_done}" ]
then then
f_rmconfig "${restore_done}"
find "${adb_dnsdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}*.gz" -exec gunzip -f "{}" \;
f_rmconfig "${restore_done}" "true"
f_log "partial restore done" f_log "partial restore done"
elif [ $((rc)) -ne 0 ] elif [ $((rc)) -ne 0 ]
then then
@ -274,7 +276,7 @@ then
# loop through all separate lists, ordered by size (ascending) # loop through all separate lists, ordered by size (ascending)
# #
for list in $(ls -ASr "${adb_dnsdir}/${adb_dnsprefix}."*)
for list in $(ls -ASr "${adb_dnsdir}/${adb_dnsprefix}"*)
do do
# check overall block list vs. separate block list, # check overall block list vs. separate block list,
# write all duplicate entries to separate list # write all duplicate entries to separate list
@ -320,6 +322,7 @@ then
rc=${?} rc=${?}
if [ $((rc)) -eq 0 ] && [ -n "${backup_done}" ] if [ $((rc)) -eq 0 ] && [ -n "${backup_done}" ]
then then
find "${adb_dir_backup}" -maxdepth 1 -type f \( -name "${adb_dnsprefix}*" -a ! -name "${adb_dnsprefix}*.gz" \) -exec gzip -f "{}" \;
f_log "new adblock list backups generated" f_log "new adblock list backups generated"
elif [ $((rc)) -ne 0 ] && [ -n "${backup_done}" ] elif [ $((rc)) -ne 0 ] && [ -n "${backup_done}" ]
then then


Loading…
Cancel
Save