Você está na página 1de 8

----------------------------------------------------------------

---------- Anonimato com proxy, por Zeyerq - rascunho ----------


----------------------------------------------------------------
----------------------------------------------------------------

Sou Zeyerq, vc pode me encontrar no telegram com esse username.

Irei abordar de maneira introdutoria 3 pontos criticos ao anonimato, que


inevitavelmente ira expor seu ip real ao navegar na rede onion usando proxy.
Recomendo conhecimento previo de redes e linux.

O assunto sera a respeito de 3 pontos principais:


- firewall, nesse caso iptables
- dns
- proxychains ou torsocks

Os exemplos partem do principio que vc esteja em uma distro debian based, com
systemd como init system.
Use uma conexão cabeada com roteador proprio.

----------------------------------------------------------------
----------------- INTRODUÇÃO AO DNS EXPOSED --------------------
----------------------------------------------------------------

Preciso comecar de algum ponto, então o cenario sera esse: vc abre seu
terminal e instala o tor, proxychains ou torsocks.
Vejamos esse exemplo de requisição:
torsocks wget www.google.com
ou
proxychains wget www.google.com

O que vc acha que ocorreu "por detras dos panos"? Usaremos o comando abaixo
para conferir.
tcpdump -nSai any -s 0 -vvv | grep UDP

Novamente:
torsocks wget www.google.com
ou
proxychains wget www.google.com

-*- anexar imagem 1

Vejamos: por default, o dns sera resolvido de acordo com a configuração do seu
isp, provavelmente 8.8.8.8 ou cloudflare.
Vc não tem nenhuma regra de firewall impedindo udp, logo, vc usa udp para
resolver dns.
Vc ira resolver o dns expondo seu ip real(fornecido pelo seu isp), ja que a
rede onion não suporta udp.
Mesmo se tentar impedir udp, ainda assim vc seria exposto, ja que a
configuração default não força a conexão pela rede onion.

----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------

Vamos para pratica. Para isso, vc precisa instalar alguns programas e


dependencias:
apt install iptables -y
apt install tor -y
apt install apt-transport-tor -y
apt install apt-transport-https -y
apt install torsocks -y
apt install proxychains -y
apt install nyx -y (para monitorar o trafego onion)
apt install macchanger -y (para alterar o endereco mac)

Alem disso, vc precisa iniciar alguns servicos*:


systemctl enable tor.service

*Um 'daemon service' sera criado, vc precisa inicia-lo tambem. Explicação na


Parte 3 desse livro.

----------------------------------------------------------------
----------------- PARTE 1 - proxy e network conf ---------------
----------------------------------------------------------------

Usarei socks5 como padrão


Iremos trabalhar com tcp only, mais detalhes na parte 2 - firewall

Em /etc/tor/torrc fica o arquivo de configuração do serviço onion. Iremos


setar a porta 9053 como dns port:
echo '''DNSPort 9053
AutomapHostsOnResolve 1''' >>/etc/tor/torrc
sed -i 's/\#SocksPort\ 9050/SocksPort\ 9050/g' /etc/tor/torrc
sed -i 's/\#ControlPort/ControlPort/g' /etc/tor/torrc
chattr +i /etc/tor/torrc

O arquivo /etc/resolv.conf é um arquivo de configuração usado pelo sistema


operacional Linux para armazenar informações sobre servidores DNS (Domain Name
System).
Este arquivo contém uma lista de endereços de servidor DNS, bem como outras
opções que controlam como a resolução DNS funciona em seu sistema.
Usaremos a seguinte configuração:
echo '''# Generated by NetworkManager
nameserver 127.0.0.1''' >/etc/resolv.conf
chattr +i /etc/resolv.conf
-> Em /etc/tor/torsocks.conf fica o arquivo de configuração do torsocks.
Faremos as seguintes alteraçoes:
sed -i 's/#AllowInbound\ 1/AllowInbound\ 0/g' /etc/tor/torsocks.conf
sed -i 's/#AllowOutboundLocalhost\ 1/AllowOutboundLocalhost\ 0/g'
/etc/tor/torsocks.conf
sed -i 's/#IsolatePID/IsolatePID/g' /etc/tor/torsocks.conf
chattr +i /etc/tor/torsocks.conf

O arquivo /etc/network/interfaces contém informações de configuração de


interface de rede para Debian Linux based.
Aqui é onde você configura como seu sistema está conectado à rede. No caso,
usaremos a configuração manual, sem dhcp.
Esse e apenas um exemplo, usando a interface eth0:
allow-hotplug eth0
iface eth0 inet static
address 10.0.0.121
netmask 255.255.255.255
gateway 10.0.0.1
broadcast 10.0.0.255
dns-nameservers 0.0.0.0(coloque aqui o dns)

Exemplos de dns:
duckduckgo 52.142.124.215 40.114.177.156
dnscrypt 3.64.163.50
opendns 208.67.222.222
emeraldonion 185.199.108.153

----------------------- PROXYCHAINS CONF -----------------------


Usando "export LD_PRELOAD", vc pode obrigar que tudo que acontecer no terminal
passar pelo proxy.

-> Em /home/user/.zshrc ou /home/user/.bashrc


export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libproxychains.so.3

-> Em /etc/proxychains.conf
echo 'socks5 127.0.0.1 9050' >>/etc/proxychains.conf
sed -i 's/strict_chain/#strict_chain/g' /etc/proxychains.conf
sed -i 's/#random_chain/random_chain/g' /etc/proxychains.conf
sed -i 's/socks4\ /#socks4\ /g' /etc/proxychains.conf

-> Em /usr/bin/proxychains3
sed -i 's/echo "ProxyChains/#echo "ProxyChains/g' /usr/bin/proxychains3
sed -i 's/export LD_PRELOAD=libproxychains.so.3/export
LD_PRELOAD=\/usr\/lib\/x86_64-linux-gnu\/libproxychains.so.3/g'
/usr/bin/proxychains3
#chattr +i /etc/proxychains.conf /usr/bin/proxychains3

----------------------- TORSOCKS CONF --------------------------


Em /home/user/.zshrc ou /home/user/.bashrc
. torsocks --quiet on
----------------------------------------------------------------
-------------- PARTE 2 - firewall e mac address ----------------
----------------------------------------------------------------

As regras de firewall serão escritas a parte, em c ou assembly por questoes de


desempenho e uso de recursos.

As regras serão as seguintes:


- tcp apenas;
- liberar apenas as portas necessarias, bloquear o resto;
- conexoes nao estabelecidas devem ser rejeitadas;
- ipv6 deve ser desabilitado;
- setar manualmente as interfaces de rede e suas regras;
* Em relacao ao bypass com bridge de rede, irei abordar a parte;

Irei partir do principio que vc tenha as interfaces com nome "eth0" e "lo".
Isso varia conforme a placa de rede.
-> Para saber o nome das interfaces de rede, use o comando:
ip -c a

-> Para alteracao do mac address, usaremos macchanger para esse proposito.
Exemplo:
macchanger -r eth0

-> Para saber o mac address, vc tambem pode usar o comando:


ip -c a

Irei criar um script em c com as regras de firewall.


Para isso, precisamos de "um lugar" para armazenar esse script. Usarei /etc/
como exemplo.

Daremos um nome para ele, como exemplo sera rules.c

#include <stdio.h>
#include <stdlib.h>

int main(void){
system("macchanger -r eth0");
system("iptables -F");
system("iptables -t raw -A PREROUTING -m state --state ESTABLISHED -p udp
-j DROP");
system("iptables -t raw -A PREROUTING -m state --state ESTABLISHED -p icmp
-j DROP");
system("iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-
ports 9053");
system("iptables -t nat -A PREROUTING -p tcp --dport 5353 -j REDIRECT -
-to-ports 9053");
system("iptables -t nat -A PREROUTING -p tcp --destination 0.0.0.0/0 -m
multiport --dport 80,443,8080 -j ACCEPT");
system("iptables -t nat -A PREROUTING -p tcp -m multiport --dport
4:52,54:79,81:442,444:5352,5354:8079,8081:9049,9200:65533 -j REDIRECT --to-
ports 9050");
system("iptables -t raw -A PREROUTING -p udp -m udp -j DROP");
system("iptables -t raw -A PREROUTING -p icmp -j DROP");
system("iptables -P INPUT DROP");
system("iptables -A INPUT -m state --state ESTABLISHED -p udp -j DROP");
system("iptables -A INPUT -m state --state ESTABLISHED -p icmp -j DROP");
system("iptables -t filter -A INPUT -p udp --destination 0.0.0.0/0 -j
DROP");
system("iptables -t filter -A INPUT -p icmp --destination 0.0.0.0/0 -j
DROP");
system("iptables -A INPUT -m state --state INVALID -j DROP");
system("iptables -A INPUT -m conntrack --ctstate INVALID -j DROP");
system("iptables -A INPUT -p tcp -m tcp --tcp-flags
FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK -j DROP");
system("iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j
DROP");
system("iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j
DROP");
system("iptables -A INPUT -f -j DROP");
system("iptables -A INPUT -p tcp -m tcp --tcp-flags
FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP");
system("iptables -A INPUT -p tcp -m tcp --tcp-flags
FIN,SYN,RST,PSH,ACK,URG NONE -j DROP");
system("iptables -A INPUT -p tcp -j ACCEPT");
system("iptables -A INPUT -j DROP");
system("iptables -A INPUT -p tcp --destination 0.0.0.0/0 -m multiport -
-dport 80,443,8080,9050,9051,9053 -j ACCEPT");
system("iptables -A OUTPUT -m state --state ESTABLISHED -p udp -j DROP");
system("iptables -A OUTPUT -m state --state ESTABLISHED -p icmp -j DROP");
system("iptables -t filter -A OUTPUT -p udp --destination 0.0.0.0/0 -j
DROP");
system("iptables -t filter -A OUTPUT -p icmp --destination 0.0.0.0/0 -j
DROP");
system("iptables -A OUTPUT -m state --state INVALID -j DROP");
system("iptables -A OUTPUT -m conntrack --ctstate INVALID -j DROP");
system("iptables -t nat -A OUTPUT -p tcp --dport 53 -j REDIRECT --to-ports
9053");
system("iptables -t nat -A OUTPUT -p tcp --dport 5353 -j REDIRECT --to-
ports 9053");
system("iptables -t filter -A OUTPUT -p tcp --destination 0.0.0.0/0 -m
multiport --dport 80,443,8080 -j ACCEPT");
// system("iptables -t nat -A OUTPUT -p tcp -m multiport --dport
4:52,54:79,81:442,444:5352,5354:8079,8081:9049,9200:65533 -j REDIRECT --to-
ports 9050");
system("iptables -t filter -A OUTPUT -p tcp -m multiport --dport
4:52,54:79,81:442,444:5352,5354:8079,8081:9049,9200:65533 -j DROP");
system("iptables -A FORWARD -j DROP");
system("iptables -A FORWARD -m state --state ESTABLISHED -p tcp -o eth0 -j
ACCEPT");
system("iptables -A FORWARD -m state --state ESTABLISHED -p tcp -o lo -j
ACCEPT");
system("iptables -A FORWARD -m state --state ESTABLISHED -p udp -j DROP");
system("iptables -A FORWARD -m state --state ESTABLISHED -p icmp -j
DROP");
system("iptables -t filter -A FORWARD -p udp --destination 0.0.0.0/0 -j
DROP");
system("iptables -t filter -A FORWARD -p icmp --destination 0.0.0.0/0 -j
DROP");
system("iptables -A FORWARD -m state --state INVALID -j DROP");
system("iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP");
system("iptables -t mangle -A POSTROUTING -p tcp --destination 0.0.0.0/0
-m multiport --dport 80,443,8080 -j ACCEPT");
system("iptables -t mangle -A POSTROUTING -p tcp --destination 0.0.0.0/0
-m multiport --dport 4:52,54:79,81:442,444:5352,5354:8079,8081:9049,9200:65533
-j DROP");
system("iptables -t mangle -A POSTROUTING -m state --state ESTABLISHED -p
udp -j DROP");
system("iptables -t mangle -A POSTROUTING -m state --state ESTABLISHED -p
icmp -j DROP");
system("iptables -t mangle -A POSTROUTING -p udp -m udp --destination
0.0.0.0/0 -j DROP");
system("iptables -t mangle -A POSTROUTING -p icmp --destination 0.0.0.0/0
-j DROP");
system("ip6tables -F");
system("ip6tables -t raw -A PREROUTING --destination 0.0.0.0/0 -j DROP");
system("ip6tables -P INPUT DROP");
system("ip6tables -P OUTPUT DROP");
system("ip6tables -P FORWARD DROP");
system("ip6tables -A INPUT -j REJECT --reject-with adm-prohibited");
system("ip6tables -A INPUT --destination 0.0.0.0/0 -j DROP");
system("ip6tables -A INPUT -m state --state RELATED -p tcp -j DROP");
system("ip6tables -A INPUT -m state --state RELATED -p udp -j DROP");
system("ip6tables -A INPUT -m state --state RELATED -p icmp -j DROP");
system("ip6tables -A OUTPUT -j REJECT --reject-with adm-prohibited");
system("ip6tables -A OUTPUT --destination 0.0.0.0/0 -j DROP");
system("ip6tables -A OUTPUT -m state --state RELATED -p tcp -j DROP");
system("ip6tables -A OUTPUT -m state --state RELATED -p udp -j DROP");
system("ip6tables -A OUTPUT -m state --state RELATED -p icmp -j DROP");
system("ip6tables -A FORWARD -j REJECT --reject-with adm-prohibited");
system("ip6tables -A FORWARD -p icmp -j REJECT --reject-with icmp6-adm-
prohibited");
system("ip6tables -A FORWARD --destination 0.0.0.0/0 -j DROP");
system("ip6tables -A FORWARD -m state --state RELATED -p tcp -j DROP");
system("ip6tables -A FORWARD -m state --state RELATED -p udp -j DROP");
system("ip6tables -A FORWARD -m state --state RELATED -p icmp -j DROP");
return 0;
}

Precisamos compilar esse codigo. Partindo do principio que ele esta salvo em
/etc/rules.c
cd /etc/
gcc rules.c -o rules
rm rules.c
----------------------------------------------------------------
---------------- PARTE 3 - servicos adicionais -----------------
----------------------------------------------------------------

Criaremos um "serviço" que ira "carregar" nosso script a cada reinicialização:

echo '''[Unit]
Description=ScriptInit

[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/etc/rules start
ExecStop=/etc/rules stop
ExecReload=/etc/rules restart

[Install]
WantedBy=multi-user.target
''' >/etc/systemd/system/initrules.service
chattr +i /etc/systemd/system/initrules.service

Para ativar este serviço, usaremos os comandos abaixo:


systemctl daemon-reload
systemctl enable initrules

-> Desativar IPV6


Para desabilitar ipv6, em /etc/default/grub digite ipv6.disable=1 ao final da
linha que se inicia com GRUB_CMDLINE_LINUX, em seguida, reinicie o grub.
-> Reiniciar o grub:
update-grub
update-grub2
#em caso de erro: grub[2]-mkconfig -o /boot/grub/grub.cfg

Reinicie o computador. Use o comando abaixo para verificar a rota do trafego:


ip route

Por enquanto, as configuraçoes ate aqui serão suficientes para uso em distros
server, terminal only.
Abaixo, tem a parte 4 que aborda o bypass de firewall por meio de bridge de
rede.

----------------------------------------------------------------
-------- PARTE 4 - Bridge de rede, bypass de firewall ----------
----------------------------------------------------------------
----------------------------------------------------------------
Irei abordar esse tema assim que possivel. Sera extenuante, de ardua
compreenção, e parte do principio que vc ja tenha conhecimento previo de
forence de rede.

Você também pode gostar