www.fabiankeil.de/blog-surrogat/2006/06/08/von-kopf-bis-fuss-auf-tor-eingestellt.html
Ein lästiges Problem bei der Tor-Nutzung sind Programme ohne Socks-Unterstützung.
Programme mit Unterstützung für HTTP-Proxys können noch über Privoxy zur Tor-Nutzung überredet werden, doch der Rest erfordert deutlich mehr Arbeit.
Tor bringt dazu das Skript torify
mit. Es bringt Programmen die Tor-Nutzung
über tsocks
bei, muss aber für jedes Programm einzeln aufgerufen werden –
sehr umständlich.
Eine deutlich elegantere Lösung ist trans-proxy-tor
: ein transparenter Proxy,
der zusammen mit OpenBSDs
PF oder den auf Kinder-Unixen verfügbaren iptables einfach alle nicht von Tor ausgehenden Verbindungen
abfängt und umleitet.
Siehe Screenshot: eine von cdda2wav
eingeleitete FreeDB-Verbindung wurde abgefangen und
anonymisiert abgewickelt, cdda2wav
wurde
ganz normal gestartet und
bekam davon nichts mit.
trans-proxy-tor
unter FreeBSD
FreeBSD wird von trans-proxy-tor
0.0.7 noch nicht unterstützt, in den FreeBSD-Ports ist
trans-proxy-tor
daher noch nicht enthalten. Abhilfe ist geplant und der Grundstein mit
p5-Event-Lib
seit heute gelegt – den schneidigen Titel FreeBSD-Contributor gab's gratis dazu.
Den ersten trans-proxy-Patch für FreeBSD
habe ich bereits weitergeleitet, ich nehme daher an, dass spätere Versionen
FreeBSD auch von Hause aus unterstützen werden. Update: seit trans-proxy-tor
0.0.8
gehört FreeBSD zu den unterstützten Betriebssystemen.
Am einfachsten ist es, trans-proxy-tor
zusammen mit dem mitgelieferten dns-proxy-tor
zu nutzen. Zum Testen habe ich genau das getan, außerdem die mitgelieferte Paket-Filter-Konfiguration aus
Beispiel 1 benutzt.
Der Anfang einer von Sylpheed-Claws angeforderten Verbindung zu meinem Mail-Server sieht damit so aus:
fk@TP51 ~/downloads/trans-proxy-tor-0.0.7 $sudo ifconfig lo1 create 127.0.0.2 up fk@TP51 ~/downloads/trans-proxy-tor-0.0.7 $sudo chown fk /dev/pf fk@TP51 ~/downloads/trans-proxy-tor-0.0.7 $sudo pfctl -f /etc/transproxy.conf fk@TP51 ~/downloads/trans-proxy-tor-0.0.7 $./dns-proxy-tor -b 127.0.0.1:5353 -f -t 127.0.0.1:9051 -v debug &\ > ./trans-proxy-tor -b lo:1112 -s 127.0.0.1:9050 -v debug -f [1] 1703 Proxy bound to 127.0.0.1:5353 Connected to Tor Test connection succeeded to SOCKS4 server at 127.0.0.1:9050 Proxy listening on 127.0.0.1:1112 Received datagram from 127.0.0.1:63962 id=0xb472 flags=0x0100 qd=0x0001 an=0x0000 ns=0x0000 ar=0x0000 Adding mapaddress to buffer for sslmailpool.ispgateway.de Adding session for sslmailpool.ispgateway.de Handling write to Tor control port Handling read from Tor control port Resolved sslmailpool.ispgateway.de => 127.192.0.1, sent to 127.0.0.1:63962 Received datagram from 127.0.0.1:54380 id=0xb473 flags=0x0100 qd=0x0001 an=0x0000 ns=0x0000 ar=0x0000 Adding mapaddress to buffer for sslmailpool.ispgateway.de Adding session for sslmailpool.ispgateway.de Handling write to Tor control port Handling read from Tor control port Resolved sslmailpool.ispgateway.de => 127.192.0.1, sent to 127.0.0.1:54380 Accepting connection from 192.168.0.49:60802 Original destination returned from pf: 127.192.0.1:995 Adding write event for TCP connect to 127.0.0.1:9050 (127.192.0.1:995) Handling connect to 127.0.0.1:9050 (127.192.0.1:995) Adding write event for SOCKS4 connect to 127.0.0.1:9050 (127.192.0.1:995) Handling SOCKS4 connect write to 127.0.0.1:9050 (127.192.0.1:995) Adding read event for SOCKS4 connect to 127.0.0.1:9050 (127.192.0.1:995) Handling SOCKS4 connect read from 127.0.0.1:9050 (127.192.0.1:995) SOCKS4 connected to 127.0.0.1:9050 (127.192.0.1:995) Adding read event for 192.168.0.49:60802 (127.192.0.1:995) Handling read from 192.168.0.49:60802 (127.192.0.1:995) Read 142 bytes from 192.168.0.49:60802 (127.192.0.1:995) Adding read event for 127.0.0.1:9050 (127.192.0.1:995) Handling write to 127.0.0.1:9050 (127.192.0.1:995)
Sylpheed-Claws DNS-Abfragen auf Port 53 wurden von
PF auf Port 5353 umgeleitet, vom dort lauschenden dns-proxy-tor
an Tor weitergegeben und
schließlich mit 127.192.0.1 beantwortet.
Der lokale Tor-Server leitet anschließend Kontaktversuche mit 127.192.0.1 nach 80.67.18.41 (die wirkliche Adresse) um; ohne Tor kommt Sylpheed-Claws nicht ins Internet und der von Tor vergebene Bereich 127.192.0.0/10 macht PF das Leben noch leichter.
Die von PF vorgenommenen Umleitungen:
fk@TP51 ~ $sudo pfctl -sn rdr pass on lo1 inet proto tcp all -> 127.0.0.1 port 1112 rdr pass on em0 inet proto tcp from any to ! (em0:network) -> 127.0.0.1 port 1112 rdr pass on lo1 inet proto udp from any to any port = domain -> 127.0.0.1 port 5353 rdr pass on em0 inet proto udp from any to any port = domain -> 127.0.0.1 port 5353
Und die Filter-Regeln:
fk@TP51 ~ $sudo pfctl -sr scrub in all fragment reassemble block drop in all block return out all pass out quick on lo0 route-to lo1 inet proto tcp from any to 127.192.0.0/10 flags S/SA modulate state pass out quick on lo0 route-to lo1 inet proto udp from any to any port = domain keep state pass quick on lo0 all keep state pass in on em0 inet proto tcp from any to any port = ssh flags S/SA keep state pass out quick on iwi0 inet proto tcp all user = 1002 flags S/SA modulate state pass out on iwi0 route-to lo1 inet proto tcp all flags S/SA modulate state pass out on iwi0 route-to lo1 inet proto udp from any to any port = domain keep state
Fertig ist die Laube.
Bis auf den Patch habe ich für den Port selbst noch nichts getan. Für das Problem der nur über Tor erreichbaren Website habe ich auch noch keine Patent-Lösung und die Privilege-Separation klappt noch nicht unter FreeeBSD. Ich nehme an, dass es sich dabei um eine Kleinigkeit handelt, der Port sollte in den nächsten zwei Wochen das Tageslicht erblicken.
Die Privilege-Separation erforderte nur einen kleinen Workaround, der in trans-proxy-tor
0.0.9
bereits enthalten ist. Die Ports sind mittlerweile in einem funktionsfähigen Zustand, erfordern aber
noch ein paar kosmetische Veränderungen: die Startskripte enthalten noch etwas Gefrickel und bei der Deinstallation
bleiben bislang die Log- und Run-Verzeichnisse übrig, da ich noch nicht rausgefunden habe, wie ich aus
pkg-plist
die Löschung von Dateien außerhalb von PREFIX
veranlassen kann.
Die Vorversionen für Abenteuerlustige:
und nach Aktualisierung der Ports-Collection über:
cd /usr/ports/security/trans-proxy-tor make install clean
zu installieren.