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.
Diese zwei Stufen entspringen nicht einfach meiner Paranoia, sondern verhindern effektiv ein IP Adress Leak. Die zwei Stufen bestehen aus
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:
Die Tatsache, dass der Proxy kein Default Gateway hat, verhindert zuverlässig, dass eine kaputte Anwendung am Proxy vorbei in das Internet geht.
Der Bind9 bekommt eine sehr spezielle Konfiguration, damit er seine Aufgabe erfüllen kann.
$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
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";
};
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.
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 .
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.
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.
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.
Es sei der guten Ordnung halber noch darauf hingewiesen, dass