¿Cómo puedo bloquear todo el tráfico * excepto * Tor?

26

En un sistema Linux, ¿hay alguna manera de bloquear todo el tráfico entrante y saliente a menos que pase a través de la red Tor? Esto incluye cualquier forma de comunicación IP, no solo conexiones TCP. Por ejemplo, quiero que UDP esté completamente bloqueado ya que no puede pasar a través de Tor. Quiero que el uso de Internet de este sistema sea completamente anónimo, y no quiero que se filtren aplicaciones.

Me doy cuenta de que esto podría ser complicado porque Tor necesita comunicarse con los nodos de retransmisión de alguna manera.

David
fuente
Estaba a punto de hacer una pregunta similar :)
amyassin
55
Para aquellos de ustedes que emitan votos cercanos, me gustaría recordarles que hay casos de uso comercial válidos para Tor .
Michael Hampton

Respuestas:

26

Bastante fácil con iptables. Puede tener reglas que coincidan con usuarios específicos, y ya debería haber configurado torpara ejecutarse con su propia ID de usuario; los paquetes deb y rpm proporcionados por las principales distribuciones de Linux y el Proyecto Tor ya configuraron un usuario para Tor.

Muestra completa, iptables utilizables y configuraciones de Tor a continuación. Este firewall se puede cargar con el iptables-restorecomando. El resultado final de esta configuración enrutará de forma transparente todo el tráfico que se origina o se reenvía a través del host a Tor, sin necesidad de configurar proxies. Esta configuración debe ser a prueba de fugas; aunque, por supuesto, deberías probarlo a fondo.

Tenga en cuenta que 998iptables almacena el uid para el usuario tor (aquí ). Sustituya el uid correcto para su usuario tor en cada lugar que aparece aquí.

Tenga en cuenta también que la dirección IP del host debe proporcionarse en la primera regla para admitir el tráfico entrante de red clara y LAN dirigido directamente al host (aquí se muestra como 198.51.100.212). Si tiene varias direcciones IP, repita la regla para cada dirección.

*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -d 198.51.100.212/32 -j RETURN
-A PREROUTING -p udp -m udp --dport 53 -j REDIRECT --to-ports 53
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 49151
-A OUTPUT -o lo -j RETURN
-A OUTPUT -m owner --uid-owner 998 -j RETURN
-A OUTPUT -p udp -m udp --dport 53 -j REDIRECT --to-ports 53
-A OUTPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 49151
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp -d 127.0.0.1 --dport 22 -j ACCEPT
-A INPUT -j LOG --log-prefix "IPv4 REJECT INPUT: "
-A FORWARD -j LOG --log-prefix "IPv4 REJECT FORWARD: "
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -d 127.0.0.1/32 -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 49151 -j ACCEPT
-A OUTPUT -m owner --uid-owner 998 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -j LOG --log-prefix "IPv4 REJECT OUTPUT: "
COMMIT

La regla ssh INPUT solo permite conexiones si llegan a través del host local, es decir, un servicio oculto Tor. Si también desea permitir conexiones ssh entrantes a través de clearnet, elimine -d 127.0.0.1.

El torrcarchivo correspondiente es:

User toranon
SOCKSPort 9050
DNSPort 53
TransPort 49151
AutomapHostsOnResolve 1

Esta configuración requiere que el host tenga una dirección IP estática. Para los casos de uso esperados, es probable que ya haya planeado que tenga una dirección IP estática.

Y finalmente, la salida!

[root@unknown ~]# curl ifconfig.me
31.31.73.71
[root@unknown ~]# host 31.31.73.71
71.73.31.31.in-addr.arpa domain name pointer cronix.sk.
[root@unknown ~]# curl ifconfig.me
178.20.55.16
[root@unknown ~]# host 178.20.55.16
16.55.20.178.in-addr.arpa domain name pointer marcuse-1.nos-oignons.net.
Michael Hampton
fuente