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.