Como posso garantir que todo o tráfego TCP do meu Mac passe por um proxy SOCKS5?

12

Eu tenho um proxy SOCKS com uma porta.

Como posso fazer meu MAC usá-lo? Quais configurações eu altero nas configurações de rede?

Alex
fonte

Respostas:

3

Por que as preferências do sistema -> rede -> (selecione uma rede no lado esquerdo da janela e escolha Avançado no canto inferior direito) -> Proxies (guia na parte superior) estão funcionando para você?

insira a descrição da imagem aqui

Everett
fonte
9
Isso não funciona para todos os aplicativos. Skype, Chrome e outros parecem ignorar essas configurações - pelo menos em 10.10 ...
Ingwie Phoenix
O que você disse é verdade. É até mencionado em outros comentários. O autor deixou claro que eles queriam simples, então comecei com o simples perguntando o que a resposta que eu publiquei não funcionaria para eles. Obviamente, funcionou para eles porque eles selecionaram. Segurança nem sempre é uma resposta 100%. Na maioria das vezes, trata-se de redução de risco.
Everett
1
O terminal não pode adotar as configurações de proxy da rede do sistema5, mas o aplicativo será bom.
E_Jovi
5

Embora definir as configurações de proxy em todo o sistema seja um bom começo, convém também usar o iptables para garantir que todo o tráfego esteja passando pelo proxy. Alguns aplicativos não usam definições de configuração em todo o sistema (entre elas o Firefox) e, portanto, é imperativo que você adapte suas regras para não permitir conexões diretas e apenas direcionar o tráfego através do proxy.

EDIT: Enquanto eu pessoalmente uso iptablesregras para gerenciar possíveis "vazamentos" da minha VPN, na verdade eu estava enganado ao pensar que o iptables poderia funcionar diretamente com um proxy de meias. Você precisará de algo como tun2socks para criar uma interface de túnel virtual (como o uso de vpn).

Depois disso, você pode configurar um script iptables semelhante ao seguinte:

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
    echo "This script must be run as root" 1>&2
    exit 1
fi

# name of primary network interface (before tunnel)
PRIMARY=eth0

# gateway ip address (before tunnel - adsl router ip address)
# automatically determine the ip from the default route
GATEWAY=`route -n | grep $PRIMARY | egrep "^0\.0\.0\.0" | tr -s " " | cut -d" " -f2`

# provided by tun2socks: interface name
TUNNEL=tun0

# If you'd like, putting the tun2socks command here is a good idea.  It may or may not be necessary to do so, but either way is more convenient than running the two commands separately.

# iptables rules - important!

LOCAL_NET=192.168.0.0/16
#LOCAL_NET=$GATEWAY

# Flush all previous filter rules, you might not want to include this line if you already have other rules setup
iptables -t filter --flush

iptables -t filter -X MYVPN
iptables -t filter -N MYVPN

# Add local routes to routing table
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
route add -host 23.21.163.237 dev eth0 gw 192.168.1.1

# Add ssh routes to routing table
ip route add table 128 to 192.168.1.0/24 dev eth0
ip route add table 128 default via 192.168.1.1

# Exceptions for local traffic & vpn server
iptables -t filter -A MYVPN -o lo -j RETURN
iptables -t filter -A MYVPN -o ${TUNNEL} -j RETURN
iptables -t filter -A MYVPN --dst 127.0.0.1 -j RETURN
iptables -t filter -A MYVPN --dst $LOCAL_NET -j RETURN
iptables -t filter -A MYVPN --dst ${SERVER} -j RETURN
iptables -t filter -A MYVPN --dst ${VPN_SERVER} -j RETURN

# Add extra local nets here as necessary

iptables -t filter -A MYVPN -j DROP

# MYVPN traffic leaving this host:
iptables -t filter -A OUTPUT -p tcp --syn -j MYVPN
iptables -t filter -A OUTPUT -p icmp -j MYVPN
iptables -t filter -A OUTPUT -p udp -j MYVPN

Naturalmente, você desejará que esse script reflita sua rede específica (ou seja, se você estiver usando algo como uma sub-rede 192.168.0.0/24, ajuste de acordo). Além disso, ele é muito bem baseado em um script que eu uso com uma VPN; portanto, todas as menções MYVPN ou VPN - enquanto você não está usando uma VPN, tun2socksse comporta efetivamente como se estivesse, portanto tudo deve funcionar da mesma maneira.

E um agradecimento especial a esta resposta no Unix.SE por me orientar na direção certa para responder a esta.

EDIT novamente: Então, parece que o OS X realmente faria isso com o ipfwiptables (desculpe, eu sou principalmente uma pessoa linux e pensei que o OS X tinha o iptables disponível). Existem equivalências para que o script possa ser adaptado, alguns dos quais são apontados aqui . man ipfwdeve definir você diretamente na sintaxe. Deixarei o iptablesscript original como um modelo para que você possa ver o que está acontecendo conceitualmente. Parece que o WaterRoof pode ajudar a tornar o uso ipfwum pouco mais amigável; outros front-ends também podem estar disponíveis.

0xDAFACADE
fonte
Eu não quero usar o iptables porque é muito complicado. Tun2socks parece que eu preciso de SSH e um servidor. Eu só tenho um IP e uma porta ... Como posso usar apenas o IP e a porta?
Alex4 /
tun2socksnão requer SSH e um servidor; o exemplo em seu site é para usar o SSH para criar o proxy SOCKS em primeiro lugar. Se você já possui um proxy SOCKS, é totalmente desnecessário. E sim, iptablesfoi um caminho errado da minha parte. O OS X, baseado no BSD, usa, em ipfwvez de iptables, o que é para o kernel do Linux. Quanto a ser complicado, talvez seja possível encontrar um front-end que o configure de maneira mais fácil de usar, mas não tenho experiência nesse assunto. De qualquer maneira, ser complicado em um nível baixo tem muito a ver com o porquê de ser tão capaz para o trabalho.
0xDAFACADE
Adicionei um frontend para você usar na resposta, se isso facilitar a navegação ipfw.
0xDAFACADE
5

Se você pode configurar um servidor SSH, o sshuttle gratuito poderá encapsular todo o tráfego TCP através da conexão, fazendo todo o firewall funcionar para você.

Para encaminhar todo o tráfego TCP e solicitações de DNS para um servidor SSH remoto, o comando é bastante simples:

sshuttle --dns -vr ssh_server 0/0

Além do TCP e DNS, o sshuttle não encaminha outros pedidos, como UDP, ICMP, ping etc.

Para mais informações e exemplos, consulte o artigo Usando o Sshuttle no trabalho diário .

harrymc
fonte
Embora o interlocutor não tenha um servidor SSH para esse fim, gostaria de agradecer pelo menos por me lembrar dessa excelente ferramenta e funcionalidade que ele traz. A simplicidade nessa sintaxe é fantástica, e poder lidar com iptables ou ipfw no back-end é realmente um recurso que vale a pena elogiar dos telhados.
0xDAFACADE
Isso não redireciona todo o tráfego TCP, por exemplo, se você tiver o VMWare em execução, ignora isso.
Soheil
0

Há várias soluções disponíveis. Nenhum deles é tão simples quanto alterar algumas configurações: o motivo é que isso derrota todo o objetivo do proxy, que é rotear um aplicativo específico por uma rota diferente (para fins de furtividade, segurança, proteção de identidade ...) enquanto sai você acessa a rota local (supostamente mais rápida).

Alguns devem ser descartados por causa de seus requisitos, mas deixe-os mencioná-los por uma questão de integridade: uma VPN, um túnel SSH, uso de pfctl (o filtro de pacotes e a interface de controle NAT). Além disso, o Tor, embora certamente não tenha sido projetado para o uso que você tem em mente, permite rotear todo o tráfego por meio de seus proxies.

Todos esses aplicativos são gratuitos e exigem, no máximo, alguma engenhosidade para que eles funcionem. Por outro lado, existem aplicativos pagos, onde a maior parte do trabalho foi realizada por outra pessoa, embora a um preço.

Proxycap

permite redirecionar as conexões de rede do seu computador através de servidores proxy. Você pode informar ao ProxyCap quais aplicativos serão conectados à Internet por meio de um proxy e sob quais circunstâncias. Isso é feito através de uma interface amigável, sem a necessidade de reconfigurar nenhum de seus clientes da Internet

Como alternativa, existe o Proxifier for Mac (cuidado: suporta apenas até 10.8). qual

permite que aplicativos de rede que não suportam o trabalho através de servidores proxy operem através de um proxy e cadeias SOCKS ou HTTPS.

MariusMatutiae
fonte
0

Vá para Preferências-> Rede Veja se existe um bloqueio, clique nele e forneça a senha da sua conta de administrador do sistema. Então Avançado-> Proxies-> Verifique no Socks Proxy. Dê suas configurações de proxy.

J Bourne
fonte