I live in an area where reliable DSL is not available, therefore I access the Internet at home using 3G mobile broadband and short wave radio. However, my 3G mobile broadband contract is limited to 15GB of bandwidth per month, if I exceed that limit then I start incurring additional charges which can mount up very quickly.
nullserv
is a minimal webserver. It's only purpose is to serve up null content.
nullserv
was inspired by pixelserv
which serves a 1x1 pixel transparent .gif
. nullserv
expands on this idea by
serving up null .html
, .js
, .css
, .php
, .cgi
, .pl
, .asp
, .aspx
,
.txt
, .gif
, .png
, .jpeg
and .swf
files.
Using some creative firewalling (netfilter/iptables) rules or local DNS you can
redirect some requests (for adverts for example) to nullserv
, thus saving
bandwidth :-)
nullserv
is heavily based on in.www
which is part of the excellent
inetdextra package. The null .swf
is compiled from swfdec_test_initialize.as
which is part of
swfdec 0.9.2.
I developed nullserv
on Ubuntu Lucid 10.04 LTS and
deployed it on a NSLU2 running Debian Lenny.
make
sudo make install
- inetd (or similar).
Currently, I'm using dnsmasq
on a Gargoyle
router to redirect ad-server IP addresses to nullserv
running on an embedded Debian
Squeeze box. Gargoyle is based on OpenWRT, so this technique should also work with
OpenWRT.
Install git
and the compiler toolchain.
sudo apt-get install build-essential git-core
Compile and install nullserv
git clone https://github.com/flexiondotorg/nullserv.git
cd nullserv
make
sudo make install
Install OpenBSD inetd.
sudo apt-get install openbsd-inetd
Add the following to /etc/inetd.conf
www stream tcp nowait nobody /usr/sbin/tcpd /usr/bin/nullserv
Restart inetd.conf
.
sudo /etc/init.d/openbsd-inetd restart
Some ads are served via https, we can use stunnel
to forward https
connections to nullserv
.
Install stunnel
sudo apt-get install stunnel
Create SSL certificate and a key.
sudo openssl req -new -nodes -x509 -out /etc/ssl/certs/stunnel.pem -keyout /etc/ssl/certs/stunnel.pem
Enable the [https]
section in /etc/stunnel.conf
, I also disable the [pop3s]
,
[imaps]
and [ssmtp]
as I don't require them.
[https]
accept = 443
connect = 80
TIMEOUTclose = 0
Enable stunnel
in /etc/default/stunnel4
. Find ENABLED
and set it to 1
.
ENABLED=1
Start stunnel
.
sudo /etc/init.d/stunnel4 start
Open a web browser and request anything you like from http://192.168.2.1 or
whatever the IP address is the host where nullserv
is installed. If you
request a file type that is not recognised by nullserv
it with send back a 0
byte response of Content-Type: text/plain
.
Run contrib/adaway.sh
and then scp
the generated adaway.txt
to /etc/
on your Gargoyle/OpenWRT router.
cd contrib ./adaway.sh scp adaway.txt root@192.168.2.1:/etc/
Add the following to /etc/config/dhcp
under the config dnsmasq
section.
list addnhosts '/etc/adaway.txt'
Restart dnsmasq
/etc/init.d/dnsmasq restart
You should now find that ads are blocked and replaced with null content. You can do lots more with dnasmasq on Gargoyle/OpenWRT, see the Wiki:
- Merged fixes and improvements contributed by Ben Shadwick.
- Updated documentation.
- Added optional logging.
- Initial release
- I am not a C programmer ;-)
- Document
dnsmasq
andin.dns
configurations to complimentnullserv
.
You can grab the source from Launchpad. Contributions are welcome :-)
A minimal webserver for serving up null content. Copyright (c) 2013 Flexion.Org, http://flexion.org/
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.