Questão Como posso tunelar todo o meu tráfego de rede através do SSH?


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

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


102


origem


É claro que você não pode encapsular literalmente todo o seu tráfego através do ssh, porque isso significaria encapsular o ssh através de si mesmo, mas nós sabíamos o que você queria dizer. :) - CarlF
Esta é uma boa idéia, mas você está protegido apenas entre o seu computador e seu ponto de extremidade ssh. depois disso, seu tráfego estará desimpedido (a menos que esteja protegido, por exemplo, SSL). concedido, é muito mais provável que seja através de um fio, mas ainda assim ... você realmente não pode confiar em fios que você não controla. - quack quixote
Mas quando você está na Internet, você tem alguma segurança em ser apenas um dos bilhões de pacotes, certo? Quando você se conecta a um Wi-Fi público, você tem uma de talvez três conexões, pode ser identificado pessoalmente, etc. - endolith


Respostas:


Para fazer o que você está querendo, eu recomendo sshuttle.

Você usa assim:

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

Ele irá tunelar todo o tráfego TCP automaticamente para você. Você pode adicionar o --dns argumento para tê-lo túnel seu tráfego DNS também. O servidor remoto só precisa ter o Python instalado.

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

Uma vez instalado, inicie seu proxy de ssh socks assim:

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

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

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

Por fim, inicie seu programa que você deseja que seja procurado:

proxychains <program name>

Deve apenas funcionar. No entanto, alguns programas terão problemas para trabalhar com cadeias de proxy. Também tenha em mente que, com o Firefox, você tem que alterar itens adicionais em about: config para forçá-lo a fazer pesquisas de DNS através do proxy, em vez de ignorá-lo.

Como nota adicional, em navegadores da web. Se eles suportarem proxies socks, você não precisa fazer nada adicional para fazê-los usar o túnel ssh mencionado acima, apenas digite 127.0.0.1 para o servidor proxy SOCKS e a <porta local> para a porta proxy.

EDIT 3/29/16

Como este post ainda está vendo alguns upvotes, 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, eu recomendo altamente a atualização para uma bifurcação ainda mantida: proxychains-ng: https://github.com/rofl0r/proxychains-ng

Além de trabalhar tanto no Linux quanto no OSX, é fácil compilar e também oferece suporte muito melhor para o tunelamento de DNS.

Eu também devo mencionar outra opção, que é redsocks. Ele funciona de forma semelhante a proxychains (-ng) e também é provável em seu repo de dist: https://github.com/darkk/redsocks


47





man ssh dá um exemplo exatamente disso. Uma vpn baseada 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

~~ recorte ~~

     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 ter essa nova interface, você só tem que torná-lo a rota padrão, que é uma questão diferente.


44



Você poderia explicar um pouco mais? O comando ifconfig cria uma nova interface chamada tun0, certo? Ou é tun0 criado por ssh e apenas mais configurado por ifconfig? Talvez adicione um exemplo relevante para a pergunta? - Nobody


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


7





Eu desenvolvi um software que permite que você encaminhe 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.


3





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

A opção que eu acho que você está procurando é configurar uma VPN (Virtual Private Network)

Dê uma olhada neste artigo para entender a diferença entre os dois (SSH vs. VPN) ou um bom versão resumida, antes de resolver a configuração da sua própria VPN. Se você decidir ir pela rota da VPN, eu recomendo OpenVPN, é grátis e tem muita documentação e suporte.


0



maus conselhos. "blowfish" é uma cifra SSH-1; é rápido, considerado seguro (a partir de 1999: unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1 ), mas ainda. você provavelmente quer ssh -2 -C -D [...] (força SSH2, use compressão) e solte o -c. de acordo com o meu sistema man ssh a lista de codificação no SSH2 é padronizada para aes128-cbc,3des-cbc,blowfish-cbc,[etc]. meu ponto é, se você pedir -c blowfish você pode acabar com o SSH1, que é muito menos seguro que o SSH2. - quack quixote
É verdade, mas o Jeremy estava com a impressão de que a conexão era segura com apenas -D 8080, eu simplesmente afirmei que era melhor do que o que ele estava usando. Você faz um ponto válido e é por isso que menciono o manual para mais opções. - ricbax
Talvez você deva mudar sua resposta, já que é útil de outra forma. - endolith
Esqueci que perguntei isso, não use este site regularmente. Obrigado pelo esclarecimento ... Eu tive a forte impressão de que o SSH era seguro por padrão. - user7301
WTF não é SSH usando criptografia por padrão? - LatinSuD


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

 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).

-2



Por favor, adicione uma fonte para sua informação. nota: esta é uma questão antiga. - Lorenzo Von Matterhorn


Use estes exemplos:

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

    ssh-fnN -L8888: localhost: 80 usuário @ servidor

    Use isto para acessar serviços em um host remoto que estão disponíveis apenas lá

  • Encaminhe a porta 80 de yourlocalhost para 8888 em um host remoto

    ssh -fnN -R8888: localhost: 80 usuário @ servidor

    Use isso para permitir que os usuários acessem seus serviços: servidor da Web ou o que for.

Felicidades! :)


-3



Bom comentário, mas não de todo relacionado ao que estamos falando aqui. O ssh reverso permite que um SERVIDOR solicite que uma porta CLIENTE de uma porta de tráfego a ele. Mais configurações seriam necessárias para rotear o tráfego para a internet. Você também teria que configurar um túnel SSH para cada porta. E tem que ser iniciado a partir do servidor, não do cliente - por que você faria isso a menos que precisasse? - Beachhouse