Como posso encapsular todo o tráfego da minha rede através do SSH?

117

Sempre que estou usando a Internet de um local inseguro (como wifi público), gosto de usar um túnel ssh ( ssh -D port host) para garantir que meu tráfego não possa ser detectado. Infelizmente, parece haver muitos aplicativos que não fornecem uma maneira de especificar um proxy (o Flash é um exemplo importante).

Parece que deve haver alguma maneira de usar um túnel para todo o tráfego de rede do meu computador, mas eu sou completamente ignorante de como fazer isso. Qualquer ajuda seria muito apreciada.

Jeremy Banks
fonte
16
É claro que você não pode encapsular literalmente TODO o seu tráfego através do ssh, porque isso significaria encapsular o ssh por si mesmo, mas sabíamos o que você queria dizer. :)
CarlF 29/10/2009
1
é uma boa ideia, mas você está protegido apenas entre o computador e o endpoint ssh. depois disso, seu tráfego ficará limpo (a menos que seja protegido de outra forma, por exemplo, SSL). concedido, é muito mais provável que seja por um fio, mas ainda assim ... você não pode realmente confiar em fios que não controla.
quack quixote
6
Mas quando você está na Internet, você tem alguma segurança em ser apenas um dos bilhões de pacotes, certo? Quando você se conectar a uma rede Wi-Fi, você é um dos talvez 3 conexões, você pode ser identificado pessoalmente, etc.
endolith

Respostas:

62

Para fazer o que você quer, recomendo sshuttle .

Você o usa assim:

./sshuttle -r username@sshserver 0.0.0.0/0 -vv

Ele encapsulará todo o seu tráfego TCP automaticamente para você. Você pode adicionar o --dnsargumento para que ele também encapsule o tráfego DNS. O servidor remoto precisa apenas ter o Python instalado.

Se você quiser apenas encapsular programas específicos, eu recomendaria proxychains .

Depois de instalado, inicie o proxy ssh socks da seguinte maneira:

ssh -fND 127.0.0.1:<local port> username@sshserver

Isso iniciará um proxy "SOCKS" escutando em <porta local>.

Em seguida, edite o /etc/proxychains.conf para apontar para a mesma porta que <porta local>.

Por fim, inicie o programa que você deseja usar como proxy:

proxychains <program name>

Deveria funcionar. No entanto, alguns programas terão problemas para trabalhar com correntes de proxy. Lembre-se também de que, no Firefox, é necessário alterar itens adicionais em about: config para forçá-lo a fazer pesquisas de DNS por meio do proxy, em vez de ignorá-lo.

Como uma observação adicional, nos navegadores da web. Se eles suportam proxies de meias, você não precisa fazer nada adicional para fazê-los usar o túnel ssh mencionado acima, basta digitar 127.0.0.1 para o servidor proxy SOCKS e <porta local> para a porta proxy.

EDIT 29/29/16

Como este post ainda está vendo alguns votos positivos, pensei em atualizá-lo. Proxychains ainda está na maioria dos repositórios Linux e ainda funciona no Linux. No entanto, o projeto é efetivamente abandonado e não funciona no OSX. Para Linux ou OSX, recomendo atualizar para um fork ainda mantido: proxychains-ng: https://github.com/rofl0r/proxychains-ng

Além de trabalhar no Linux e no OSX, é fácil de compilar e também oferece suporte muito melhor ao encapsulamento de DNS.

Devo também mencionar outra opção, que é redsocks. Funciona de maneira semelhante às proxychains (-ng) e também é provável no seu repo dist: https://github.com/darkk/redsocks

marisco
fonte
Nota para os sistemas Linux mais recentes que usam sshuttle: no momento em que escrevo, há um bug no kernel que lhe dará problemas de instalação. Nesse caso, use:sshuttle -r root@host -x host 0/0
agregate1166877
49

man sshdá um exemplo exatamente disso. Um vpn baseado em ssh:

SSH-BASED VIRTUAL PRIVATE NETWORKS
     ssh contains support for Virtual Private Network (VPN) tunnelling using
     the tun(4) network pseudo-device, allowing two networks to be joined
     securely.  The sshd_config(5) configuration option PermitTunnel controls
     whether the server supports this, and at what level (layer 2 or 3 traf-
     fic).

     The following example would connect client network 10.0.50.0/24 with
     remote network 10.0.99.0/24, provided that the SSH server running on the
     gateway to the remote network, at 192.168.1.15, allows it:

       # ssh -f -w 0:1 192.168.1.15 true
       # ifconfig tun0 10.0.50.1 10.0.99.1 netmask 255.255.255.252

~~ snip ~~

     Since a SSH-based setup entails a fair amount of overhead, it may be more
     suited to temporary setups, such as for wireless VPNs.  More permanent
     VPNs are better provided by tools such as ipsecctl(8) and isakmpd(8).

Depois de instalar essa nova interface, você apenas precisará torná-la a rota padrão, o que é uma pergunta diferente.

PriceChild
fonte
1
Você poderia explicar um pouco mais? O comando ifconfig cria uma nova interface chamada tun0, certo? Ou tun0 é criado pelo ssh e apenas configurado pelo ifconfig? Talvez adicione um exemplo relevante para a pergunta?
Ninguém
6

Procure a opção "Tunnel" no ssh. Isso cria um dispositivo de encapsulamento ao qual você pode atribuir um endereço IP e, em seguida, altera a rota padrão para usar esse encapsulamento.

Peter Eisentraut
fonte
4

Desenvolvi um software que permite encaminhar todo o TCP e, opcionalmente, o UDP por meio de um proxy SOCKS5, em todo o sistema.

http://code.google.com/p/badvpn/wiki/tun2socks

Pode até ser instalado em um roteador para encaminhar todas as conexões dos computadores na LAN.

Ambroz Bizjak
fonte
0

REDES PRIVADAS VIRTUAIS BASEADAS EM SSH ssh contém suporte para encapsulamento de rede virtual privada (VPN) usando o pseudo-dispositivo de rede tun (4), permitindo que duas redes sejam unidas com segurança. A opção de configuração sshd_config (5) PermitTunnel controla se o servidor suporta isso e em que nível (tráfego de camada 2 ou 3).

 The following example would connect client network 10.0.50.0/24 with
 remote network 10.0.99.0/24 using a point-to-point connection from
 10.1.1.1 to 10.1.1.2, provided that the SSH server running on the gateway
 to the remote network, at 192.168.1.15, allows it.

 On the client:

       # ssh -f -w 0:1 192.168.1.15 true
       # ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252
       # route add 10.0.99.0/24 10.1.1.2

 On the server:

       # ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252
       # route add 10.0.50.0/24 10.1.1.1

 Client access may be more finely tuned via the /root/.ssh/authorized_keys
 file (see below) and the PermitRootLogin server option.  The following
 entry would permit connections on tun(4) device 1 from user “jane” and on
 tun device 2 from user “john”, if PermitRootLogin is set to
 “forced-commands-only”:

   tunnel="1",command="sh /etc/netstart tun1" ssh-rsa ... jane
   tunnel="2",command="sh /etc/netstart tun2" ssh-rsa ... john

 Since an SSH-based setup entails a fair amount of overhead, it may be
 more suited to temporary setups, such as for wireless VPNs.  More perma‐
 nent VPNs are better provided by tools such as ipsecctl(8) and
 isakmpd(8).
Kristian Hermansen
fonte
1
adicione uma fonte para sua informação. nota: esta é uma pergunta antiga.
Lorenzo Von Matterhorn
-2

Só queria esclarecer que (ssh -D port host) não é uma maneira 100% segura de tráfego para não ser detectado. Adicionar (host da porta ssh -D -c blowfish) seria uma opção melhor porque você está adicionando criptografia à sua sessão. Você pode adicionar mais opções, mas é fácil digitar "man ssh" no seu terminal ou no Google para obter uma lista completa.

A opção que eu acho que você está procurando é configurar uma VPN (rede virtual privada)

Dê uma olhada neste artigo para entender a diferença entre os dois ( SSH x VPN ) ou uma boa versão resumida , antes de resolver a configuração de sua própria VPN. Se você decidir seguir a rota da VPN, recomendo o OpenVPN , é gratuito e possui muita documentação e suporte.

ricbax
fonte
6
maus conselhos. "blowfish" é uma cifra SSH-1; é rápido, considerado seguro (em 1999: unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1 ), mas ainda assim. você provavelmente deseja ssh -2 -C -D [...](forçar SSH2, usar compactação) e soltar o -c. de acordo com o meu sistema, man ssha lista de cifras no SSH2 é padronizada como aes128-cbc,3des-cbc,blowfish-cbc,[etc]. O que quero -c blowfishdizer é que, se você solicitar, poderá acabar com o SSH1, que é muito menos seguro que o SSH2.
quack quixote
2
É verdade, mas o Jeremy tinha a impressão de que a conexão estava segura com apenas -D 8080, apenas afirmei que era melhor do que o que ele estava usando. Você faz uma observação válida e é por isso que mencionei o manual para mais opções.
Ricbax 29/10/09
Talvez você deva mudar sua resposta, pois, caso contrário, é útil.
Endolith 02/11/2009
Esqueci Perguntei isso, não use este site regularmente. Obrigado pelo esclarecimento ... Tive a forte impressão de que o SSH era seguro por padrão.
Jeremy Banks
9
WTF não é SSH usando criptografia por padrão?
LatinSuD 18/07/11
-3

Use estes exemplos:

  • Encaminhe a porta 80 de um host remoto para 8888 no seu host local

    ssh -fnN -L8888: host local: 80 usuário @ servidor

    Use isso para acessar serviços em um host remoto disponível apenas lá

  • Encaminhar a porta 80 do yourlocalhost para 8888 em um host remoto

    ssh -fnN -R8888: host local: 80 usuário @ servidor

    Use isso para permitir que outros usuários acessem seus serviços: servidor da web ou qualquer outra coisa.

Felicidades! :)

Kolypto
fonte
Bom comentário, mas nada relacionado ao que estamos falando aqui. O ssh reverso permite que um SERVIDOR solicite que um CLIENTE direcione UMA porta de tráfego para ele. Seria necessária mais configuração para rotear esse tráfego para a Internet. Você também teria que configurar um túnel SSH para cada porta. E isso deve ser iniciado a partir do servidor, não do cliente - e por que você faria isso a menos que precisasse?
Beachhouse