Tentando criptografar dados

2

Eu tenho um aplicativo que transmite dados de texto sem formatação pela rede em uma determinada porta, digamos, a porta 4000. Esses dados são para outro aplicativo que está em execução no meu vps. Como eu poderia criptografar esses dados entre o meu servidor de casa para o vps. Eu pensei em um túnel ssh, mas não consigo descobrir como fazer isso, pois os dados são para ir direto para outro aplicativo no vps. então não seria como um simples "ssh -D 9000 user @ ip"

    
por user346305 14.07.2014 / 22:08

3 respostas

1

Estou assumindo que sua conexão é clara, de localhost a $VPS:4000 .

Para fazer um túnel SSH, você abrirá uma porta em localhost que tuneará o tráfego para a porta 4000 no servidor $VPS .

A seguinte linha de comando faz isso:

ssh -L9000:localhost:4000 user@$VPS

onde 9000 é a porta local que eu escolhi.

Em seguida, você precisa alterar seu aplicativo para não se conectar mais a $VPS:4000 , mas se conectar em vez de localhost:9000 .

Isso funciona conectando-se a user@$VPS e, em seguida, criando uma conexão segura entre localhost:9000 no host local e localhost:4000 no host remoto.

Dessa forma, a criptografia é transparente para você e você não precisa se preocupar em tentar implementar qualquer algoritmo de criptografia. Ou pior - faça o seu próprio.

Você faz precisa garantir que a conexão SSH esteja sempre disponível quando você precisar. Pode ser útil usar a autenticação de chave pública, caso você não esteja familiarizado com ela:)

    
por 15.07.2014 / 02:04
1

Aqui está um comando que pode ser útil:

ssh -C -L80:127.0.0.1:80 -L443:127.0.0.1:443 $USER@$VPS

-L$LOCALPORT:$JUMPIP:$REMOTEPORT

O $ JUMPIP não precisa ser o mesmo endereço do VPS.

Isso não é necessário se você tiver uma VPN completa para o seu VPS.

Se o seu aplicativo estiver usando uma porta efêmera, você poderá ter alguns problemas; você não saberia de antemão qual porta será usada.

    
por 15.07.2014 / 01:37
0

Como você nos deu alguns detalhes, a resposta a essa pergunta será um pouco complexa.

  1. Se você tiver uma conexão VPN com seu servidor, em geral a melhor solução é usá-lo para rotear seu aplicativo para seu correspondente remoto, porque todo o trabalho (roteamento e codificação / decifração) já foi configuração.

  2. Existem casos em que isso não pode ser feito. Por exemplo, você tem uma VPN roteada e seu aplicativo deseja usar protocolos de rede incomuns (NetTalk, IPX, IPv6 ...) ou você precisa estar no mesmo domínio de broadcast do seu servidor remoto. Ou seu aplicativo precisa usar o UDP, enquanto sua VPN usa o TCP. Isso simplesmente não pode ser feito, e esse mesmo comentário se aplica às outras respostas que sugeriram o uso de ssh .

A solução alternativa para isso é usar uma VPN em ponte, baseada em UDP . A primeira especificação permite que você pertença ao mesmo domínio de broadcast, e para usar qualquer protocolo de roteamento desejado, a segunda especificação (baseada em UDP) permite usar portas UDP.

Em geral, a solução mais simples é usar OpenVPN , mas é não é a única solução. Em um site irmão, o ServerFault, você pode encontrar esta resposta explicando como configurar o IPSec para um túnel GRE. IPSec fornece a criptografia, o túnel GRE a conexão ponto-a-ponto. Mais uma vez, você é aconselhado a executar o IPSec sobre UDP, não o TCP.

Informamos que discussões sobre VPNs sobre UDP sendo escamosas são discutíveis: uma vez que um pacote TCP é enviado sobre um UDP (ou TCP, para essa questão) VPN, se ele for perdido ele será retransmitido (cortesia do aplicativo de escuta), independentemente de a VPN estar sobre UDP ou TCP. Em outras palavras, a integridade do conteúdo é fornecida pelo protocolo encapsulado, não pelo protocolo da operadora. O que você ganha é que, dessa forma, você também pode encaminhar as comunicações da VPN usando o protocolo UDP.

    
por 15.07.2014 / 10:36