Hallo!
Ich denke viele von uns nutzen irgendwelche Ad Block Software auf ihren Rechnern (ich nutze Ad Block Plus in Firefox und Kaspersky Internet Security bietet auch ein klein wenig weiteren Schutz), aber an meinem iPhone ist das nur umständlich und vor allem nur mit einem Jailbreak möglich. Zudem wäre es ja praktisch, wenn einfach alle Clients ohne Konfiguration keine nervige Werbung sehen.
Vor einiger Zeit gab es einen Artikel bei Lifehacker, der mich auf die Idee brachte. Das verlinkte Script dort ist für die Tomato gemoddeten Linksys WRT54G etc. Router, aber nach ein paar Quick & Dirty Anpassungen funktioniert es auch auf meinem Speedport.
Hier erstmal mein modifiziertes Script:
Im Grunde werden von vorgefertigten hosts-Listen kopien auf die Freetz geladen und diese dann als Ersatzhosts verwendet. Beim Auflösen einer der "bösen" Domains wird 0.0.0.0 zurück gesendet, wodurch erst gar keine Verbindung zum "bösen" Host aufgebaut wird.
Leider habe ich nur Basiswissen, was Linux Scripting angeht, daher auch der "geklaute" Start-Teil aus der /etc/init.d/rs.dnsmasq. Eine direkte Integrierung in das dnsmasq Paket ist für euch Profis doch sicherlich kein Problem, ich denke, dass eine solche Funktion doch ganz praktisch wäre, oder? Bisher habe ich mir nur das Script eben gerade zum Testen in /var/tmp gepackt und manuell ausgeführt.
TODO:
- In das dnsmasq Paket integrieren
- WebIf anpassen (aktivieren/deaktivieren und Serverlisteneditor (Checkboxen und/oder Textdatei mit zeilenweisen URLs?))
- dnsmasq muss auch starten, wenn kein Internet verfügbar ist
Was haltet ihr davon?
Beste Grüße
meilon
Ich denke viele von uns nutzen irgendwelche Ad Block Software auf ihren Rechnern (ich nutze Ad Block Plus in Firefox und Kaspersky Internet Security bietet auch ein klein wenig weiteren Schutz), aber an meinem iPhone ist das nur umständlich und vor allem nur mit einem Jailbreak möglich. Zudem wäre es ja praktisch, wenn einfach alle Clients ohne Konfiguration keine nervige Werbung sehen.
Vor einiger Zeit gab es einen Artikel bei Lifehacker, der mich auf die Idee brachte. Das verlinkte Script dort ist für die Tomato gemoddeten Linksys WRT54G etc. Router, aber nach ein paar Quick & Dirty Anpassungen funktioniert es auch auf meinem Speedport.
Hier erstmal mein modifiziertes Script:
Code:
#!/bin/sh
## Adblock script [Version 2.1 | 08 July 2008 | 3778 bytes]
##
## Created by Adrian Jon Kriel: root-AT-extremecooling-DOT-org
##
## Freetz Mod by meilon
##
## 0 = disable
## 1 = enable
## (1) = default value
## optimising of dnsmasq, (1)
eval OPTDNSMASQ="1"
## MVPS HOSTS ~18,500 lines, 680 Kbyte, (1)
eval MVPSSOURCE="1"
## pgl.yoyo.org ~2,200 lines, 68 Kbyte, (1)
eval PGLSOURCE="1"
## hosts-file.net ~53,000 lines, 1.5 Mbyte, (0)
eval HSFSOURCE="0"
## Hosts File Project ~102,000 lines, 3.0 Mbyte ***6+mb free memory***, (0)
eval HFPSOURCE="0"
##
## varibles
## location of temp file, (/tmp/hosts)
eval GENFILE="/var/tmp/hosts"
## redirect ip, (0.0.0.0)
eval REDIRECTIP="0.0.0.0"
## sources
eval MVPSOURCEFILE="http://www.mvps.org/winhelp2002/hosts.txt"
eval PGLSOURCEFILE="http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts"
eval HSFSOURCEFILE="http://www.it-mate.co.uk/downloads/hosts.txt"
eval HFPSOURCEFILE="http://hostsfile.mine.nu/Hosts"
if ping -c 1 google.de ; then
eval GOTSOURCE="0"
echo "" > $GENFILE
## download
if [ "$MVPSSOURCE" = "1" ] ; then
if wget $MVPSOURCEFILE -O - >> $GENFILE ; then
logger ADBLOCK Downloaded $MVPSOURCEFILE
eval GOTSOURCE="1"
else
logger ADBLOCK Failed $MVPSOURCEFILE
fi
fi
if [ "$PGLSOURCE" = "1" ] ; then
if wget $PGLSOURCEFILE -O - >> $GENFILE ; then
logger ADBLOCK Load $PGLSOURCEFILE
eval GOTSOURCE="1"
else
logger ADBLOCK Fail $PGLSOURCEFILE
fi
fi
if [ "$HSFSOURCE" = "1" ] ; then
if wget $HSFSOURCEFILE -O - >> $GENFILE ; then
logger ADBLOCK load $HSFSOURCEFILE
eval GOTSOURCE="1"
else
logger ADBLOCK Fail $HSFSOURCEFILE
fi
fi
if [ "$HFPSOURCE" = "1" ] ; then
if wget $HFPSOURCEFILE -O - >> $GENFILE ; then
logger ADBLOCK Load $HFPSOURCEFILE
eval GOTSOURCE="1"
else
logger ADBLOCK Fail $HFPSOURCEFILE
fi
fi
if [ "$GOTSOURCE" = "1" ]; then
logger ADBLOCK Got Source Files
#FREE MEMORY!
/etc/init.d/rc.dnsmasq stop
killall -9 dnsmasq
logger ADBLOCK Ignor Fail Safe
##strip source file
sed -i -e '/^[0-9A-Za-z]/!d' $GENFILE
sed -i -e '/%/d' $GENFILE
sed -i -e 's/[[:cntrl:][:blank:]]//g' $GENFILE
sed -i -e 's/^[ \t]*//;s/[ \t]*$//' $GENFILE
## dnsmasq, sanitize, optimised
sed -i -e 's/[[:space:]]*\[.*$//' $GENFILE
sed -i -e 's/[[:space:]]*\].*$//' $GENFILE
sed -i -e '/[[:space:]]*#.*$/ s/[[:space:]]*#.*$//' $GENFILE
sed -i -e '/^$/d' $GENFILE
sed -i -e '/127.0.0.1/ s/127.0.0.1//' $GENFILE
sed -i -e '/^www[0-9]./ s/^www[0-9].//' $GENFILE
sed -i -e '/^www./ s/^www.//' $GENFILE
## remove duplicates (resource friendly)
cat $GENFILE | sort -u > $GENFILE.new
mv $GENFILE.new $GENFILE
## format
sed -i -e 's|$|/'$REDIRECTIP'|' $GENFILE
sed -i -e 's|^|address=/|' $GENFILE
## load values from dnsmasq config
cat /var/mod/etc/dnsmasq.conf >> $GENFILE
## optimise dnsmasq
if [ "$OPTDNSMASQ" = "1" ] ; then
cat >> $GENFILE <<EOF
cache-size=2048
log-async=5
EOF
fi
## remove/whitelist websites
## removes 3 websites (aa.com, bb.com, cc.com)
## remove the # and edit the website urls.
sed -i -e '/aa.com/d' $GENFILE
sed -i -e '/bb.com/d' $GENFILE
sed -i -e '/cc.com/d' $GENFILE
## Start dnsmasq with the new blacklist
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/mod/sbin:/mod/bin:/mod/usr/sbin:/mod/usr/bin
export LD_LIBRARY_PATH=/mod/lib
DAEMON=dnsmasq
. /etc/init.d/modlibrc
# Do we have a UPnP server (igdd) or was ist stripped from the firmware?
_igdd=$(basename $(which igdd) 2> /dev/null)
# Does a multid option to start without UPnP device (-u) exist?
_multid_upnp=$(/sbin/multid -? 2>&1 | grep upnp)
# Set multid "no UPnP" option, if
# a) it has the parameter at all AND
# b) igdd binary does *not* exist
[ "$_multid_upnp" ] && [ ! "$_igdd" ] && MULTIDPARAM="-u"
local lease
modlib_addgroup nobody
modlib_adduser nobody -s /bin/false -D -S -H -G nobody -g 'nobody'
(
if [ -x "/tmp/flash/${DAEMON}_conf" ]; then
/tmp/flash/${DAEMON}_conf
else
/mod/etc/default.$DAEMON/${DAEMON}_conf
fi
if [ -r "/tmp/flash/${DAEMON}.extra" ]; then
cat /tmp/flash/${DAEMON}.extra
fi
) > /mod/etc/$DAEMON.conf
echo -n 'Starting dnsmasq...'
if [ "$1" != "nomultid" ]; then
multid -s > /dev/null 2>&1
fi
OPTIONS="$DNSMASQ_OPTIONS"
if [ "$DNSMASQ_DNS_PORT" ]; then
OPTIONS="$OPTIONS -p \"$DNSMASQ_DNS_PORT\""
fi
eval "$DAEMON $OPTIONS --conf-file=$GENFILE"
exitval=$?
if [ "$1" != "nomultid" ]; then
multid $MULTIDPARAM > /dev/null 2>&1
# protect against dnsmasq crash
[ -f /var/tmp/avm-resolv.conf -a ! -L /var/tmp/avm-resolv.conf ] &&
mv /var/tmp/avm-resolv.conf /var/tmp/resolv.conf
ln -s resolv.conf /var/tmp/avm-resolv.conf
fi
if [ ! -L "/var/flash/multid.leases" -a "$DNSMASQ_DHCP" = "yes" ]; then
rm -f /var/flash/multid.leases
touch /var/tmp/multid.leases
ln -s /var/tmp/multid.leases /var/flash/multid.leases
fi
# this could pose problems when a client comes too fast
for lease in /var/tmp/multid.leases /var/tmp/dnsmasq.leases; do
if [ -f $lease ]; then
chmod 0664 $lease
chown root:nobody $lease
fi
done
if [ "$exitval" -eq 0 ]; then
echo 'done.'
else
echo 'failed.'
exit $exitval
fi
## dev info
logger ADBLOCK Unique Hosts Blocked $(awk 'END { print NR }' $GENFILE)
else
logger ADBLOCK Error Not Downloaded
fi
else
logger ADBLOCK Error No Internet
fi
## remove the generated files
rm $GENFILE*
## the end
Im Grunde werden von vorgefertigten hosts-Listen kopien auf die Freetz geladen und diese dann als Ersatzhosts verwendet. Beim Auflösen einer der "bösen" Domains wird 0.0.0.0 zurück gesendet, wodurch erst gar keine Verbindung zum "bösen" Host aufgebaut wird.
Leider habe ich nur Basiswissen, was Linux Scripting angeht, daher auch der "geklaute" Start-Teil aus der /etc/init.d/rs.dnsmasq. Eine direkte Integrierung in das dnsmasq Paket ist für euch Profis doch sicherlich kein Problem, ich denke, dass eine solche Funktion doch ganz praktisch wäre, oder? Bisher habe ich mir nur das Script eben gerade zum Testen in /var/tmp gepackt und manuell ausgeführt.
TODO:
- In das dnsmasq Paket integrieren
- WebIf anpassen (aktivieren/deaktivieren und Serverlisteneditor (Checkboxen und/oder Textdatei mit zeilenweisen URLs?))
- dnsmasq muss auch starten, wenn kein Internet verfügbar ist
Was haltet ihr davon?
Beste Grüße
meilon