Como posso bloquear todo o tráfego * exceto * Tor?

25

Em um sistema Linux, existe uma maneira de bloquear todo o tráfego de entrada e de saída, a menos que ele passe pela rede Tor. Isso inclui qualquer forma de comunicação IP, não apenas conexões TCP. Por exemplo, eu quero que o UDP seja completamente bloqueado, pois não pode passar pelo Tor. Eu quero que o uso da Internet nesses sistemas seja totalmente anônimo, e não quero que nenhum aplicativo vaze.

Eu percebo que isso pode ser complicado porque o próprio Tor precisa se comunicar com nós de retransmissão de alguma forma.

    
por David 02.10.2012 / 11:45

1 resposta

26

Fácil o suficiente com o iptables. Ele pode ter regras que correspondem a usuários específicos e você já deve ter configurado tor para ser executado sob seu próprio ID de usuário; pacotes deb e rpm fornecidos pelas principais distribuições Linux e o Tor Project já configurou um usuário para o Tor.

Amostra completa, iptables utilizáveis e configurações Tor seguem. Esse firewall pode ser carregado com o comando iptables-restore . O resultado final desta configuração irá rotear de forma transparente o tráfego all proveniente de, ou sendo encaminhado através do host para Tor, sem a necessidade de configurar proxies. Essa configuração deve ser à prova de vazamentos; embora você deva, claro, testá-lo completamente.

Observe que o uid para o usuário tor (aqui, 998 ) é armazenado em formato numérico pelo iptables. Substitua o uid correto pelo seu usuário tor em cada lugar que aparece aqui.

Observe também que o endereço IP do host precisa ser fornecido na primeira regra para suportar tráfego clearnet e LAN de entrada endereçado diretamente ao host (aqui mostrado como 198.51.100.212 ). Se você tiver vários endereços IP, repita a regra para cada endereço.

*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

A regra de ENTRADA do ssh só permite conexões se elas chegarem através do host local, ou seja, um serviço oculto do Tor. Se você também quiser permitir conexões ssh de entrada via clearnet, remova -d 127.0.0.1 .

O arquivo torrc correspondente é:

User toranon
SOCKSPort 9050
DNSPort 53
TransPort 49151
AutomapHostsOnResolve 1

Essa configuração requer que o host tenha um endereço IP estático. Para os casos de uso esperados, é provável que você já tenha planejado que ele tenha um endereço IP estático.

E finalmente, a saída!

[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.
    
por 02.10.2012 / 11:59