Tor dient in erster Linie zum Selbstschutz, so dass es sich bei korrekter Anwendung auch dazu eignet, ein freies WLAN anzubieten, ohne dabei in die Störerhaftungfalle zu laufen. Damit dieser Tor Proxy richtig funktioniert, sind einige Randbedingungen zu beachten, damit nicht irgend eine kaputte Anwendung die tatsächliche IP Adresse verrät.

  • Die Config Beispiele beziehen sich auf Ubuntu oder Debian Linux
  • Die Verbindung zwischen tor Server und Proxy muss über ein eigenes Ethernet Interface erfolgen, das kann man übrigens sehr schön mit LXC Containern machen

Zwei Stufen Lösung

Diese zwei Stufen entspringen nicht einfach meiner Paranoia, sondern verhindern effektiv ein IP Adress Leak. Die zwei Stufen bestehen aus

  • tor Server
  • tor Proxy

Der tor Server benötigt ein Default Gateway in das Internet, damit er das Onion Netzwerk erreichen kann und sich in tor einbinden kann. Er stellt weiterhin auf einem gesonderten Ethernet Interface (VLAN) einen Socks Proxy zur Verfügung.

Der tor Proxy verfügt über kein Default Gateway und kann daher ausschließlich den tor Server erreichen. Er stellt im offenen WLAN folgende Funktionen zur Verfügung:

  • Privoxy: Dieser Proxy beseitigt einige verräterische Eigenschaften der Anwendung des WLAN Users
  • Squid: der nach außen sichtbare Proxy, dieser ist im WLAN auf Port 3128/tcp sichtbar, ein transparenter Proxy funktioniert nicht bei https Verbindungen
  • Nameserver: Dieser ist als sein eigener Root Nameserver konfiguriert, so dass der User immer auf eine Seite mit einer Anleitung zur Konfiguration des Proxyservers gelenkt wird, falls er ihn nicht schon eingestellt hat.
  • Webserver: Dieser zeigt dem User eine Hilfeseite an, wenn er keinen Proxy konfiguriert hat.

Die Tatsache, dass der Proxy kein Default Gateway hat, verhindert zuverlässig, dass eine kaputte Anwendung am Proxy vorbei in das Internet geht.

Nameserver

Der Bind9 bekommt eine sehr spezielle Konfiguration, damit er seine Aufgabe erfüllen kann.

db.root

$TTL    3600000
.               IN      SOA ns. hostmaster.xy.com. (
                    20120101 1800 900 604800 86400
            )

.                       NS    ROOT.CFTOR.
ROOT.CFTOR.             A     192.168.166.2
*           A   192.168.166.2

/etc/bind/named.conf.cf

Dei Datei named.conf.cf muss via include in die bestehene name.conf eingebunden werden.

zone "." IN {
    type master;
    file "/etc/bind/db.root.cf";
};

zone "cftor" {
type master;
file "/etc/bind/cftor";
};

cftor

Die Zone cftor enthält die Zone für den proxy Server

$TTL  604800
@   IN  SOA ns.cftor. root.localhost. (
              4     ; Serial
         604800     ; Refresh
          86400     ; Retry
        2419200     ; Expire
         604800 )   ; Negative Cache TTL

@   IN  NS  ns.cftor.
@   IN  A   192.168.166.2

*   IN A        192.168.166.2

root       IN A     192.168.166.2
ns         IN A     192.168.166.2

Dieser DNS löst jetzt alles außer dem Proxy Server auf seine eigene IP-Adresse auf. Damit der User weiß, was los ist, sollte ein Apache httpd, Lighttpd installiert sein, der eine html Seite mit einer Anleitung zur Proxy Einstellung anzeigt.

/etc/privoxy/config

Die Privoxy Config ist recht einfach gehalten, er dient nur als Upstream Proxy für den Squid.

user-manual /usr/share/doc/privoxy/user-manual
confdir /etc/privoxy
logdir /var/log/privoxy
actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on.
actionsfile default.action   # Main actions file
actionsfile user-agent.action
actionsfile user.action      # User customizations
filterfile default.filter
filterfile user.filter      # User customizations
logfile logfile
listen-address  localhost:8118
toggle  1
enable-remote-toggle  0
enable-remote-http-toggle  0
enable-edit-actions 0
enforce-blocks 0
buffer-limit 4096
enable-proxy-authentication-forwarding 0
forwarded-connect-retries  0
accept-intercepted-requests 0
allow-cgi-request-crunching 0
split-large-forms 0
keep-alive-timeout 5
tolerate-pipelining 1
socket-timeout 300

debug   4096 # Startup banner and warnings
debug   8192 # Errors - *we highly recommended enabling this*

forward-socks4a / 192.168.166.1:9050 .

/etc/squid3/squid.conf

Die Config für den Squid entspricht weitgehend den Defaults, jedoch wird als Upstream Proxy der Privoxy verwendet und es wird jeglicher Traffic zwangsweise über den Proxy geführt.

acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl CONNECT method CONNECT

acl bad_url dstdomain "/etc/squid/bad-sites.acl"

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access allow localhost manager
http_access deny manager

http_access deny bad_url

http_access deny to_localhost

acl localnet src 192.168.0.0/16

http_access allow localnet
http_access allow localhost

http_access deny all

http_port 3128

cache_peer 127.0.0.1 parent 8118 7 no-query no-digest
httpd_suppress_version_string on
forwarded_for off
never_direct allow all

coredump_dir /var/spool/squid3

refresh_pattern ^ftp:      1440   20%    10080
refresh_pattern ^gopher:   1440   0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0    0% 0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .       0  20%    4320

header_access X-Forwarded-For deny all
via off
forwarded_for off
follow_x_forwarded_for deny all

Im Falle eines Config Fehlers geht der Traffic wegen der zweistufigen Lösung nicht am Proxy vorbei, sondern er wird mangels Default Gateway einfach nicht geroutet.

/etc/squid/bad-sites.acl

In diese Datei werden Hosts bzw. Domains eingetragen, die problematisch (im Sinne des Datenschutzes) sind. Zunächst sollte da nur ein Eintrag stehen:

.privoxy.org

So kommt der WLAN User nicht an die Privoxy Internas.

Implementierung

Diese Lösung kann bereits auf einem kleinen Server oder einem Raspberry implementiert werden. Tor-Router und Tor-Proxy werden dabei in zwei LXC Container gepackt. Der Zugang zum Tor-Proxy sollte aus Sicherheitsgründen zumindest über ein getrenntes VLAN geführt werden. In diesem VLAN befindet sich der WLAN Access Point.

Warnung

Es sei der guten Ordnung halber noch darauf hingewiesen, dass

  • illegale Aktivitäten damit nicht legal werden
  • Die Qualität der Anonymisierung maßgeblich vom Nutzerverhalten abhängt, wer sich also in seinen Facebook Account anmeldet, ist auch mit tor nicht mehr anonym unterwegs.