Wie kann ich den gesamten Verkehr * außer * Tor blockieren?

26

Auf einem Linux-System gibt es eine Möglichkeit, den gesamten ein- und ausgehenden Datenverkehr zu blockieren, sofern dieser nicht über das Tor-Netzwerk geleitet wird. Dies umfasst jede Form der IP-Kommunikation, nicht nur TCP-Verbindungen. Zum Beispiel möchte ich, dass UDP vollständig blockiert wird, da es nicht durch Tor passieren kann. Ich möchte, dass die Internetnutzung dieses Systems vollständig anonym ist und keine Anwendungen auslaufen.

Mir ist klar, dass dies kompliziert sein könnte, weil Tor selbst irgendwie mit Relay-Knoten kommunizieren muss.

David
quelle
Ich wollte gerade eine ähnliche Frage stellen :)
Amyassin
5
Für diejenigen unter Ihnen, die enge Abstimmungen abgeben, möchte ich Sie daran erinnern, dass es für Tor gültige Geschäftsanwendungsfälle gibt .
Michael Hampton

Antworten:

26

Einfach genug mit Iptables. Es kann Regeln geben, die bestimmten Benutzern entsprechen, und Sie sollten bereits so eingerichtet sein tor, dass sie unter einer eigenen Benutzer-ID ausgeführt werden. Deb- und RPM-Pakete, die von großen Linux-Distributionen und dem Tor-Projekt bereitgestellt werden, haben bereits einen Benutzer für Tor eingerichtet.

Komplettes Beispiel, verwendbare Iptables und Tor-Konfigurationen folgen. Diese Firewall kann mit dem iptables-restoreBefehl geladen werden . Das Endergebnis dieser Konfiguration leitet den gesamten Datenverkehr, der vom Host stammt oder durch diesen weitergeleitet wird, transparent an Tor weiter, ohne dass Proxys konfiguriert werden müssen. Diese Konfiguration sollte dicht sein. obwohl du es natürlich gründlich testen solltest.

Beachten Sie, dass die Benutzer-ID für den Benutzer tor (hier 998) von iptables in numerischer Form gespeichert wird. Ersetzen Sie die richtige Benutzer-ID für Ihren Tor-Benutzer an jeder Stelle, an der sie hier angezeigt wird.

Beachten Sie auch, dass die IP-Adresse des Hosts in der ersten Regel angegeben werden muss, um eingehenden Clearnet- und LAN-Verkehr zu unterstützen, der direkt an den Host adressiert ist (hier dargestellt als 198.51.100.212). Wenn Sie mehrere IP-Adressen haben, wiederholen Sie die Regel für jede 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

Die ssh INPUT-Regel erlaubt nur Verbindungen, die über den lokalen Host, dh einen versteckten Tor-Dienst, ankommen. Wenn Sie auch eingehende SSH-Verbindungen über Clearnet zulassen möchten, entfernen Sie -d 127.0.0.1.

Die entsprechende torrcDatei lautet:

User toranon
SOCKSPort 9050
DNSPort 53
TransPort 49151
AutomapHostsOnResolve 1

Diese Konfiguration erfordert, dass der Host eine statische IP-Adresse hat. Für die erwarteten Anwendungsfälle ist es wahrscheinlich, dass Sie bereits eine statische IP-Adresse geplant haben.

Und zum Schluss die Ausgabe!

[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
quelle