#!/usr/bin/perl
# Anonymiser 0.9 - Quick and convenient system-wide anonymiser using Tor transparently
# Copyright (C) 2011 Andy Dixon
#
#
# ****************************************************************
# ** FOR USE ONLY WITH UBUNTU MAVERICK AT THE MOMENT **
# ****************************************************************
# ** Remove the if block starting with if ($UBUNTU_VERSION..... **
# ** and make sure Tor is installed for it to work on other **
# ** Linux Operating Systems. IPTables rules *may* be different **
# ****************************************************************
#
# 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 3 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, see .
# the config file /etc/anonymiser.conf needs to have any internal (LAN) network
# subnet masks and also the user in which Tor runs as.
# An example of the config file is as follows:
# @mynets = ("192.168.0.0/24","192.168.1.0/24","10.0.0.0/8");
# $TOR_UID = `id -u debian-tor`;
# 1;
#
# The 1 at the end is required. Without it the anonymiser will fail.
#
print "anonymiser Copyright (C) 2011 Andy Dixon
This program comes with ABSOLUTELY NO WARRANTY; for details view the GPL license at http://www.gnu.org/licenses/gpl.html.
This is free software, and you are welcome to redistribute it
under certain conditions; for details, refer to the GPL license above.\n";
require "/etc/anonymiser.conf" or die "Error: Missing configuration file.\n";
$TRANS_PORT="9040";
$UBUNTU_VERSION=`lsb_release -c -s`;
chomp $TOR_UID;
chomp $UBUNTU_VERSION;
if ( $< == 0 ) {
if ($UBUNUTU_VERSION == "maverick") {
system("which tor >/dev/null");
print $?;
if ($? == 256 ) {
print "Prerequisites not met. Installing....\n";
open IN, '<', "/etc/apt/sources.list" or die;
my @contents = ;
close IN;
@contents = grep !/^$deb\ http\:\/\/deb.torproject.org\/torproject.org\ maverick\ main/, @contents;
open OUT, '>', "/etc/apt/sources.list" or die;
print OUT @contents;
close OUT;
system("echo \"deb http://deb.torproject.org/torproject.org maverick main\" >> /etc/apt/sources.list");
system("gpg --keyserver keys.gnupg.net --recv 886DDD89");
system("gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -");
system("apt-get update >/dev/null 2>&1");
system("apt-get -y install tor >/dev/null 2>&1");
}
system("iptables -F");
system("iptables -t nat -F");
system("iptables -t nat -A OUTPUT -m owner --uid-owner $TOR_UID -j RETURN");
system("iptables -t nat -A OUTPUT -d 127.0.0.0/9 -j RETURN");
system("iptables -t nat -A OUTPUT -d 127.128.0.0/10 -j RETURN");
foreach (@mynets) {
system("iptables -t nat -A OUTPUT -d $_ -j RETURN");
system("iptables -A OUTPUT -d $_ -j ACCEPT");
}
system("iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 53");
system("iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports $TRANS_PORT");
system("iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT");
system("iptables -A OUTPUT -d 127.0.0.0/8 -j ACCEPT");
system("iptables -A OUTPUT -m owner --uid-owner $TOR_UID -j ACCEPT");
system("iptables -A OUTPUT -j REJECT");
open IN, '<', "/etc/tor/torrc" or die "Cant open transport config (+R). Epic Fail.\n";
my @contents = ;
close IN;
@contents = grep !/^$AutomapHostsOnResolve\ 1/, @contents;
@contents = grep !/^$TransPort\ 9040/, @contents;
@contents = grep !/^$DNSPort\ 53/, @contents;
open OUT, '>', "/etc/tor/torrc" or die "Cant open transport config (W+). Epic Fail.\n";;
print OUT @contents;
close OUT;
system("echo \"AutomapHostsOnResolve 1\" >>/etc/tor/torrc");
system("echo \"TransPort 9040\" >>/etc/tor/torrc");
system("echo \"DNSPort 53\" >>/etc/tor/torrc");
system("/etc/init.d/tor restart");
system("echo \"nameserver 127.0.0.1\" > /etc/resolv.conf");
} else {
print "Unsupported version: ".$UBUNTU_VERSION;
}
} else {
print "You must be running as root or with sudo privileges.\n";
}