Comment puis-je bloquer tout le trafic * sauf * Tor?

26

Sur un système Linux, existe-t-il un moyen de bloquer tout le trafic entrant et sortant à moins qu'il ne passe par le réseau Tor. Cela inclut toute forme de communication IP, pas seulement les connexions TCP. Par exemple, je veux que UDP soit complètement bloqué car il ne peut pas passer par Tor. Je veux que l'utilisation d'Internet de ces systèmes soit entièrement anonyme et je ne veux pas que des applications fuient.

Je me rends compte que cela pourrait être compliqué parce que Tor lui-même doit communiquer avec les nœuds de relais d'une manière ou d'une autre.

David
la source
J'étais sur le point de poser une question similaire :)
amyassin
5
Pour ceux d'entre vous qui votent étroitement, je voudrais vous rappeler qu'il existe des cas d'utilisation commerciale valides pour Tor .
Michael Hampton

Réponses:

26

Assez facile avec iptables. Il peut avoir des règles qui correspondent à des utilisateurs spécifiques, et vous devriez déjà avoir configuré torpour exécuter sous son propre ID utilisateur; Les packages deb et rpm fournis par les principales distributions Linux et le projet Tor ont déjà configuré un utilisateur pour Tor.

Voici un échantillon complet, des iptables utilisables et des configurations Tor. Ce pare-feu peut être chargé avec la iptables-restorecommande. Le résultat final de cette configuration acheminera de manière transparente tout le trafic provenant de l'hôte ou acheminé via celui-ci vers Tor, sans avoir besoin de configurer de proxy. Cette configuration doit être étanche; bien que vous deviez bien sûr le tester à fond.

Notez que l'uid pour l'utilisateur tor (ici 998) est stocké sous forme numérique par iptables. Remplacez l'uid correct pour votre utilisateur tor à chaque endroit où il apparaît ici.

Notez également que l'adresse IP de l'hôte doit être indiquée dans la première règle pour prendre en charge le trafic Clearnet et LAN entrant adressé directement à l'hôte (ici indiqué comme 198.51.100.212). Si vous avez plusieurs adresses IP, répétez la règle pour chaque adresse.

*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 règle ssh INPUT n'autorise les connexions que si elles arrivent via l'hôte local, c'est-à-dire un service caché Tor. Si vous souhaitez également autoriser les connexions ssh entrantes via clearnet, supprimez -d 127.0.0.1.

Le torrcfichier correspondant est:

User toranon
SOCKSPort 9050
DNSPort 53
TransPort 49151
AutomapHostsOnResolve 1

Cette configuration nécessite que l'hôte ait une adresse IP statique. Pour les cas d'utilisation attendus, il est probable que vous ayez déjà prévu qu'il ait une adresse IP statique.

Et enfin, la sortie!

[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
la source