Jak mogę zablokować cały ruch * oprócz * Tor?

26

W systemie Linux istnieje sposób na zablokowanie całego ruchu przychodzącego i wychodzącego, chyba że przechodzi on przez sieć Tor. Obejmuje to każdą formę komunikacji IP, nie tylko połączenia TCP. Na przykład chcę, aby UDP był całkowicie zablokowany, ponieważ nie może przejść przez Tora. Chcę, aby korzystanie z Internetu przez te systemy było całkowicie anonimowe i nie chcę, aby jakieś aplikacje były nieszczelne.

Zdaję sobie sprawę, że może to być skomplikowane, ponieważ sam Tor musi jakoś komunikować się z węzłami przekaźnikowymi.

David
źródło
Właśnie miałem zadać podobne pytanie :)
amyassin
5
Tym z was, którzy oddają bliskie głosy, chciałbym przypomnieć, że istnieją ważne przypadki użycia biznesowego dla Tora .
Michael Hampton

Odpowiedzi:

26

Łatwo z iptables. Może mieć reguły, które pasują do określonych użytkowników, i powinieneś już skonfigurować, toraby działał pod własnym identyfikatorem użytkownika; pakiety deb i rpm dostarczane przez główne dystrybucje Linuksa, a Projekt Tor już skonfigurował użytkownika dla Tora.

Poniżej podano pełną próbkę, użyteczne iptables i konfiguracje Tora. Zaporę tę można załadować za pomocą iptables-restorepolecenia. Wynik końcowy tej konfiguracji będzie w sposób transparentny kierował cały ruch pochodzący z hosta lub przekazywany przez niego do Tora, bez konieczności konfigurowania serwerów proxy. Ta konfiguracja powinna być szczelna; choć oczywiście powinieneś to dokładnie przetestować.

Zauważ, że identyfikator użytkownika dla użytkownika Tora (tutaj, 998) jest przechowywany w postaci liczbowej przez iptables. Podaj poprawny identyfikator użytkownika dla swojego użytkownika Tor w każdym miejscu, w którym się tu pojawi.

Należy również zauważyć, że adres IP hosta musi być podany w pierwszej regule, aby obsługiwać przychodzący ruch clearnet i LAN adresowany bezpośrednio do hosta (tutaj pokazany jako 198.51.100.212). Jeśli masz wiele adresów IP, powtórz regułę dla każdego adresu.

*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

Reguła ssh INPUT zezwala na połączenia tylko wtedy, gdy przybywają za pośrednictwem lokalnego hosta, tj. Usługi ukrytej Tora. Jeśli chcesz zezwolić na przychodzące połączenia ssh przez clearnet, usuń -d 127.0.0.1.

Odpowiedni torrcplik to:

User toranon
SOCKSPort 9050
DNSPort 53
TransPort 49151
AutomapHostsOnResolve 1

Ta konfiguracja wymaga, aby host miał statyczny adres IP. W przypadku oczekiwanych przypadków użycia prawdopodobnie zaplanowałeś już statyczny adres IP.

I wreszcie wynik!

[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
źródło