quinta-feira, 29 de dezembro de 2016

Proxy Transparente pela Tor utilizando OpenWrt

Olá a todos!

O desafio deste artigo é apresentar como se configura uma caixa OpenWrt para que possamos sair para a Internet através da rede Tor de forma transparente para quem se conectar na rede, em inglês, também chamado de Anonymizing Middlebox.

Tor TechneDigitus
Tor: Rede aberta, dentro da Internet que provê robusta, mas não perfeita, camada de anonimado para acesso a Internet.

OpenWrt TechneDigitus
OpenWrt: Firmware baseado em Linux como alternativa de sistema operacional para roteadores domésticos, transformando-os em poderosas e flexíveis ferramentas.

Pré-Requisito não abordado neste artigo: Roteador com OpenWrt instalado

Resumidamente, precisa possuir um roteador compatível com o OpenWrt. Para isso, acesse https://wiki.openwrt.org/toh/start e confira se seu roteador está na lista de roteadores suportados.
Se seu roteador não estiver listado, será necessário arrumar um. A lista de roteadores compatíveis você já tem!
Uma vez identificado que seu router é compatível, é necessário instalar o OpenWrt no mesmo. Cada router ou firmware pode ter um tutorial específico para ele no site da OpenWrt. Porém, eles disponibilizam um artigo genérico para esse procedimento: https://wiki.openwrt.org/doc/howto/generic.flashing

CLI OpenWrt


Primeiro Passo: Instalando o Tor no OpenWrt


1. Logue em seu roteador por CLI
2. Digite opkg update //Para baixar a lista de pacotes disponíveis para instalação
3. Digite opkg install tor //Para instalar o Tor propriamente dito

Passo Dois: Configurando o Tor


1. Faça um backup das configurações originais do Tor com o comando cp /etc/tor/torrc /etc/tor/torrc.bkp
2. Edite o arquivo torrc, como aqui eu já havia previamente instalado o vim (opkg install vim), utilizei o seguinte comando: vim /etc/tor/torrc
3. Apague todo o conteúdo deste arquivo e cole somente as linhas abaixo:

##Configurações Básicas da Tor
User tor
RunAsDaemon 1
PidFile /var/run/tor.pid
DataDirectory /var/lib/tor
VirtualAddrNetwork 10.192.0.0/10 #Esta rede é interna do serviço da Tor
AutomapHostsOnResolve 1              

##Configurações Importantes
TransPort 9040 #Definimos a porta que será utilizada para receber o tráfego TCP que será encaminhado para a Tor
TransListenAddress 192.168.10.1 #Definimos o IP deste router que irá receber as requisições na porta TransPort
DNSPort 9053 #Definimos a porta que será utilizada para receber as requisições DNS que serão encaminhadas para a Tor
DNSListenAddress 192.168.10.1 #Definimos o IP deste router que irá receber as requisições na porta DNSPort

Passo Três: Configurando a Rede


1. Faça um backup das configurações de rede de seu router com o comando cp /etc/config/network /etc/config/network.bkp
2. Abra o arquivo backapeado anteriormente com seu editor de textos vim /etc/config/network

Explanação:
Aqui, configuraremos uma "interface" virtual de rede para nosso roteador utilizar para a Tor. Seguiremos as configurações de rede já expostas anteriormente (192.168.10.0/24).

Basicamente, iremos inserir agora uma sessão "config interface" para a Tor, chamaremos-a de transtor.

Note que em vermelho, estará indicada a interface do roteador que utilizaremos para declarar essa rede. Para ver o nome exato das suas interfaces disponíveis para utilizar neste arquivo de configuração, basta usar o comando ifconfig.

E em amarelo, a máscara e o IP da interface, respectivamente.

3. Insira a sessão abaixo no arquivo network

config interface 'transtor'                                               
        option proto 'static'                                             
        option netmask '255.255.255.0'                                    
        option ipaddr '192.168.10.1'                                      
        option _orig_ifname 'wlan0'                                     
        option _orig_bridge 'false'                                       
        option delegate '0'                                               
        option type 'bridge'                                              
        option ifname 'wlan0'

Passo Quatro: Configurando o DHCP


1. Faça um backup das configurações de dhcp de seu router com o comando cp /etc/config/dhcp /etc/config/dhcp.bkp

2. Abra o arquivo dhcp com seu editor de textos: vim /etc/config/dhcp

Explanação:
Aqui, basicamente adicionaremos uma sessão "config dhcp" para distribuir o endereçamento pela interface transtor criada anteriormente.

3. Insira a sessão abaixo no arquivo dhcp:

config dhcp 'transtor'                     
        option interface 'transtor'              
        option 'start' '100'               
        option 'limit' '150'                     
        option 'leasetime' '12h'

Passo Cinco: Configurando o Firewall Básico


1. Faça um backup das configurações de rede de seu router com o comando cp /etc/config/firewall /etc/config/firewall.bkp

2. Abra o arquivo firewall com seu editor de texto: vim /etc/config/firewall

Explanação:
Aqui basicamente iremos criar uma zona com regras default mais três regras específicas.

3. Insira as sessões abaixo em seu arquivo firewall:

#Na Zona configuramos que toda a entrada e encaminhamento de pacotes para a interface transtor será rejeitada, somente liberando a saída de pacotes por essa interface
config zone
        option name 'transtor'
        option output 'ACCEPT'
        option syn_flood '1'
        option conntrack '1'
        option family 'ipv4'
        option network 'transtor'
        option input 'REJECT'
        option forward 'REJECT'

#Libera tráfego DHCP da Interface transtor oara a porta 67 UDP deste router
config rule
        option name 'DHCP-para-Transtor'
        option src 'transtor'
        option proto 'udp'
        option dest_port '67'
        option target 'ACCEPT'

#Libera tráfego da Interface transtor para a porta 9040 TCP (TransPort) deste router
config rule
        option name 'TransPort-Allow'
        option src 'transtor'
        option proto 'tcp'
        option dest_port '9040'
        option target 'ACCEPT'

#Libera tráfego da Interface transtor para a porta 9053 UDP (DNSPort) deste router
config rule
        option name 'DNSPort-Allow'
        option src 'transtor'
        option proto 'udp'
        option dest_port '9053'
        option target 'ACCEPT'

Passo Seis: Configurando o encaminhamento automático das conexões


Explanação:
Aqui basicamente criaremos regras de redirecionamento do tráfego que nossos computadores conectados na rede transtor enviam para o roteador. Todo tráfego TCP será enviado para a porta 9040 TCP. Todo o tráfego de DNS (Porta 53 UDP) será enviado para a porta 9053 (UDP) do router.
Quem recebe o tráfego das porta 9040 e 9053 é o serviço do Tor. É aqui que a mágica acontece! A resposta do tráfego sai pela interface de volta para seu computador automaticamente graças ao parâmetro ACCEPT na opção option output da Zona transtor que configuramos no firewall.

1. Faça um backup das configurações de rede de seu router com o comando cp /etc/firewall.user /etc/firewall.user.bkp

2. Abra o arquivo firewall com seu editor de texto: vim /etc/firewall.user

3. Insira as duas linhas a seguir neste arquivo:

iptables -t nat -A PREROUTING -i br-transtor -p udp --dport 53 -j REDIRECT --to-ports 9053

iptables -t nat -A PREROUTING -i br-transtor -p tcp --syn -j REDIRECT --to-ports 9040

Atenção - Pulo do Gato:
Como pode ter observado, em vermelho nas linhas acima, utilizamos br-transtor ao invés de wlan0.
Essa é a interface que foi criada (e após um "reboot") pode ser conferida no ifconfig.

Passo Sete: Disponibilizando a interface transtor em uma rede sem fio


1. Faça um backup das configurações de wireless de seu router com o comando cp /etc/config/wireless /etc/config/wireless.bkp

2. Abra o arquivo wireless com seu editor de texto: vim /etc/config/wireless

3. Insira a sessão "config wifi-iface" abaixo conforme a interface de rádio (em vermelho) que desejar. Lembre-se que a senha (option key) e o nome da rede sem fio (option ssid) (ambas em amarelo) devem ser configuradas conforme desejar.

Em caso de dúvidas, observe neste mesmo arquivo, outras redes que podem estar configuradas para que você possa seguir o padrão.

config wifi-iface
        option device 'radio0'
        option key 'senhasupersecreta123'
        option encryption 'psk+tkip'
        option mode 'ap'
        option ssid 'Tor Wifi'
        option network 'transtor'

Passo Oito: Reiniciar tudo e ver a coisa toda funcionando


1. Digite "reboot" na CLI de seu router.

2. Após o reboot, observaremos que a rede wifi "Tor Wifi" apareceu e que, uma vez conectados a ela, estaremos saindo pela Tor.

Por esta rede não poderemos mais acessar a gerência de nosso router. Para checar o IP que estamos recebendo para a Internet e validar se estamos mesmo saindo pela Tor acessando o site: https://check.torproject.org/.

Este deve ser o resultado esperado:

Teste Tor


Possível Passo Nove: Troubleshotting


Pode ser que não dê certo! Pode ser que alguma configuração que citei acima esteja defasada ou seja incompatível com a versão do OpenWrt ou do Tor que você instalou.
Talvez as interfaces estejam erradas...

Tenha em mente que tudo que você fez foi instalar o Tor (você pode desinstalá-lo com opkg remove tor) e algumas alterações nos arquivos torrc, network, dhcp, firewall, firewall.user e wireless e; durante o passo a passo, criamos uma cópia backup para restauração ou consultas em caso de necessidade. (Na hora do troubleshotting vale tudo).

Existem também alguns sites em inglês dos quais me utilizei para aprender a fazer essas configurações e também recomendo que você os consulte:


E se tudo mais falhar...

Nesse caso, encorajo você a me pedir ajuda por E-mail: technedigitus [at] protonmail [dot] ch ou através de comentários neste artigo!

Suas dúvidas ou pedido de ajuda serão de fundamental importância para que este artigo possa ser melhorado!

Se curtiu o artigo, não deixe de compartilhá-lo!