Transparentes TOR Gateway unter Ubuntu

Um ein transparentes TOR Gateway zu realisieren kann man wie folgt vorgehen:

Nach der Installation von TOR wird die torrc unter

/etc/tor/torrc

wie folgt ergänzt (ich habe das ganz oben gemacht):

Log notice file /var/log/tor/tor-notices.log
VirtualAddrNetwork 10.192.0.0/10
AutomapHostsSuffixes .onion,.exit
AutomapHostsOnResolve 1
TransPort 9040
TransListenAddress 192.168.100.254
DNSPort 53
DNSListenAddress 192.168.100.254

anschließend den TOR Dienst neu starten:

sudo service tor restart

neu starten.

Mittels iptables kann man dann den gesamten Traffic eines interfaces (im Beispiel eth1) auf den TOR Transport umleiten. Dazu sollte die PREROUTING Chain der nat Table folgende Regeln enthalten:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
REDIRECT   udp  --  anywhere             anywhere             udp dpt:domain redir ports 53
REDIRECT   tcp  --  anywhere             anywhere             tcpflags: FIN,SYN,RST,ACK/SYN redir ports 9040

Die erste Regel sorgt dafür, das DNS queries den lokalen Rechner erreichen damit .onion und .exit URLs aufgelöst werden können. Die zweite Regel leitet allen anderen Traffic auf den TOR Transport um.

Die Regeln können wie folgt erstellt werden:

sudo iptables -t nat -A PREROUTING -i eth1 -p udp --dport 53 -j REDIRECT --to-ports 53
sudo iptables -t nat -A PREROUTING -i eth1 -p tcp --syn -j REDIRECT --to-ports 9040

Etwas detaillierter ist das ganze noch hier beschrieben.