Como usar o encapsulamento SSH para acessar servidores restritos e navegar com segurança
Um cliente SSH se conecta a um servidor Secure Shell, que permite executar comandos do terminal como se você estivesse sentado na frente de outro computador. Mas um cliente SSH também permite "tunelar" uma porta entre o sistema local e um servidor SSH remoto.
Existem três tipos diferentes de tunelamento SSH, e todos eles são usados para finalidades diferentes. Cada um envolve o uso de um servidor SSH para redirecionar o tráfego de uma porta de rede para outra. O tráfego é enviado pela conexão SSH criptografada, portanto, não pode ser monitorado ou modificado em trânsito.
Você pode fazer isso com o ssh
comando incluído no Linux, macOS e outros sistemas operacionais semelhantes ao UNIX. No Windows, que não inclui um comando ssh integrado, recomendamos a ferramenta gratuita PuTTY para conectar-se aos servidores SSH. Ele também suporta encapsulamento SSH.
Encaminhamento de porta local: Torne os recursos remotos acessíveis em seu sistema local
“Encaminhamento de porta local” permite acessar recursos da rede local que não estão expostos à Internet. Por exemplo, digamos que você queira acessar um servidor de banco de dados em seu escritório a partir de sua casa. Por motivos de segurança, esse servidor de banco de dados é configurado apenas para aceitar conexões da rede do escritório local. Mas se você tiver acesso a um servidor SSH no escritório e esse servidor SSH permitir conexões fora da rede do escritório, você poderá se conectar a esse servidor SSH a partir de casa e acessar o servidor de banco de dados como se estivesse no escritório. Esse é frequentemente o caso, pois é mais fácil proteger um único servidor SSH contra ataques do que proteger uma variedade de recursos de rede diferentes..
Para fazer isso, você estabelece uma conexão SSH com o servidor SSH e diz ao cliente para encaminhar o tráfego de uma porta específica do seu PC local - por exemplo, porta 1234 - para o endereço do servidor do banco de dados e sua porta na rede do escritório. Assim, quando você tenta acessar o servidor de banco de dados na porta 1234 do seu PC atual, “localhost”, esse tráfego é automaticamente “encapsulado” sobre a conexão SSH e enviado para o servidor de banco de dados. O servidor SSH fica no meio, encaminhando o tráfego para frente e para trás. Você pode usar qualquer linha de comando ou ferramenta gráfica para acessar o servidor de banco de dados como se estivesse sendo executado em seu PC local.
Para usar o encaminhamento local, conecte-se ao servidor SSH normalmente, mas também forneça -eu
argumento. A sintaxe é:
ssh -L local_port: remote_address: remote_port [email protected]
Por exemplo, digamos que o servidor de banco de dados em seu escritório esteja localizado em 192.168.1.111 na rede do escritório. Você tem acesso ao servidor SSH do escritório em ssh.youroffice.com
, e sua conta de usuário no servidor SSH é prumo
. Nesse caso, seu comando ficaria assim:
ssh -L 8888: 192.168.1.111: 1234 [email protected]
Depois de executar esse comando, você poderá acessar o servidor de banco de dados na porta 8888 em localhost. Portanto, se o servidor de banco de dados oferecesse acesso à web, você poderia conectar http: // localhost: 8888 ao seu navegador para acessá-lo. Se você tivesse uma ferramenta de linha de comando que precisa do endereço de rede de um banco de dados, você a apontaria em localhost: 8888. Todo o tráfego enviado para a porta 8888 no seu PC será encapsulado em 192.168.1.111:1234 na rede do seu escritório..
É um pouco mais confuso se você quiser se conectar a um aplicativo de servidor em execução no mesmo sistema que o próprio servidor SSH. Por exemplo, digamos que você tenha um servidor SSH em execução na porta 22 em seu computador do escritório, mas também tem um servidor de banco de dados em execução na porta 1234 no mesmo sistema, no mesmo endereço. Você quer acessar o servidor de banco de dados de casa, mas o sistema está aceitando apenas conexões SSH na porta 22 e seu firewall não permite nenhuma outra conexão externa.
Nesse caso, você poderia executar um comando como o seguinte:
ssh -L 8888: localhost: 1234 [email protected]
Quando você tenta acessar o servidor de banco de dados na porta 8888 em seu PC atual, o tráfego será enviado pela conexão SSH. Quando chega ao sistema rodando o servidor SSH, o servidor SSH irá enviá-lo para a porta 1234 em “localhost”, que é o mesmo PC que executa o próprio servidor SSH. Então, o "localhost" no comando acima significa "localhost" da perspectiva do servidor remoto.
Para fazer isso no aplicativo PuTTY no Windows, selecione Conexão> SSH> Túneis. Selecione a opção "Local". Para “Source Port”, digite a porta local. Para "Destino", insira o endereço de destino e a porta no formato remote_address: remote_port.
Por exemplo, se você quiser configurar o mesmo túnel SSH acima, você deve inserir 8888
como a porta de origem e localhost: 1234
como o destino. Clique em “Adicionar” depois e depois clique em “Abrir” para abrir a conexão SSH. Você também precisará digitar o endereço e a porta do próprio servidor SSH na tela principal "Session" antes de conectar, é claro.
Encaminhamento de porta remota: Torne os recursos locais acessíveis em um sistema remoto
O "redirecionamento remoto de portas" é o oposto do encaminhamento local e não é usado com freqüência. Ele permite que você disponibilize um recurso em seu PC local no servidor SSH. Por exemplo, digamos que você esteja executando um servidor da Web no PC local em que está sentado na frente. Mas o seu PC está protegido por um firewall que não permite o tráfego de entrada para o software do servidor.
Supondo que você possa acessar um servidor SSH remoto, você pode se conectar a esse servidor SSH e usar o encaminhamento de porta remoto. Seu cliente SSH dirá ao servidor para encaminhar uma porta específica, porta 1234 - no servidor SSH para um endereço e porta específicos no seu PC atual ou rede local. Quando alguém acessa a porta 1234 no servidor SSH, esse tráfego será automaticamente "encapsulado" pela conexão SSH. Qualquer pessoa com acesso ao servidor SSH poderá acessar o servidor da Web em execução no seu PC. Esta é efetivamente uma maneira de encapsular através de firewalls.
Para usar o encaminhamento remoto, use o ssh
comando com o -R
argumento. A sintaxe é basicamente a mesma que no encaminhamento local:
ssh -R remote_port: local_address: local_port [email protected]
Digamos que você queira tornar um aplicativo de servidor escutando na porta 1234 em seu PC local, disponível na porta 8888 no servidor SSH remoto. O endereço do servidor SSH é ssh.youroffice.com
e seu nome de usuário no servidor SSH é prumo. Você executaria o seguinte comando:
ssh -R 8888: localhost: 1234 [email protected]
Em seguida, alguém poderia se conectar ao servidor SSH na porta 8888 e essa conexão seria encapsulada no aplicativo do servidor em execução na porta 1234 no PC local em que você estabeleceu a conexão..
Para fazer isso no PuTTY no Windows, selecione Conexão> SSH> Túneis. Selecione a opção "Remote". Para “Source Port”, digite a porta remota. Para "Destino", insira o endereço de destino e a porta no formato local_address: local_port.
Por exemplo, se você quiser configurar o exemplo acima, entrará 8888
como a porta de origem e localhost: 1234
como o destino. Clique em “Adicionar” depois e depois clique em “Abrir” para abrir a conexão SSH. Você também precisará digitar o endereço e a porta do próprio servidor SSH na tela principal "Session" antes de conectar, é claro.
As pessoas poderiam se conectar à porta 8888 no servidor SSH e seu tráfego seria encapsulado na porta 1234 em seu sistema local.
Por padrão, o servidor SSH remoto escutará apenas as conexões do mesmo host. Em outras palavras, apenas pessoas no mesmo sistema que o próprio servidor SSH poderão se conectar. Isto é por razões de segurança. Você precisará ativar a opção “GatewayPorts” em sshd_config no servidor SSH remoto se quiser substituir esse comportamento.
Encaminhamento de porta dinâmica: use seu servidor SSH como proxy
Há também "encaminhamento dinâmico de portas", que funciona de forma semelhante a um proxy ou VPN. O cliente SSH criará um proxy SOCKS que você pode configurar aplicativos para usar. Todo o tráfego enviado através do proxy seria enviado através do servidor SSH. Isso é semelhante ao encaminhamento local - ele leva o tráfego local para uma porta específica no seu PC e o envia pela conexão SSH para um local remoto..
Por exemplo, digamos que você esteja usando uma rede Wi-Fi pública. Você quer navegar com segurança sem ser bisbilhotado. Se você tiver acesso a um servidor SSH em casa, poderá se conectar a ele e usar o encaminhamento de porta dinâmico. O cliente SSH criará um proxy SOCKS no seu PC. Todo o tráfego enviado para esse proxy será enviado pela conexão do servidor SSH. Ninguém que monitore a rede Wi-Fi pública poderá monitorar sua navegação ou censurar os sites que você pode acessar. Do ponto de vista de qualquer site que você visitar, será como se você estivesse sentado em frente ao seu PC em casa. Isso também significa que você pode usar esse truque para acessar sites somente dos EUA enquanto estiver fora dos EUA - supondo que você tenha acesso a um servidor SSH nos EUA, é claro.
Como outro exemplo, você pode querer acessar um aplicativo de servidor de mídia que você possui em sua rede doméstica. Por motivos de segurança, você pode ter apenas um servidor SSH exposto à Internet. Você não permite conexões de entrada da Internet para o seu aplicativo de servidor de mídia. Você pode configurar o encaminhamento de porta dinâmico, configurar um navegador da Web para usar o proxy SOCKS e acessar servidores em execução na sua rede doméstica por meio do navegador da Web, como se estivesse sentado em frente ao seu sistema SSH em casa. Por exemplo, se o seu servidor de mídia estiver localizado na porta 192.168.1.123 em sua rede doméstica, você poderá conectar o endereço 192.168.1.123
em qualquer aplicativo usando o proxy SOCKS e você acessaria o servidor de mídia como se estivesse em sua rede doméstica.
Para usar o encaminhamento dinâmico, execute o comando ssh com o -D
argumento, assim:
ssh -D local_port [email protected]
Por exemplo, digamos que você tenha acesso a um servidor SSH em ssh.yourhome.com
e seu nome de usuário no servidor SSH é prumo
. Você deseja usar o encaminhamento dinâmico para abrir um proxy SOCKS na porta 8888 no PC atual. Você executaria o seguinte comando:
ssh -D 8888 [email protected]
Você poderia configurar um navegador da Web ou outro aplicativo para usar seu endereço IP local (127.0.01) e a porta 8888. Todo o tráfego desse aplicativo seria redirecionado por meio do túnel.
Para fazer isso no PuTTY no Windows, selecione Conexão> SSH> Túneis. Selecione a opção "Dinâmico". Para “Source Port”, digite a porta local.
Por exemplo, se você quisesse criar um proxy SOCKS na porta 8888, entraria 8888
como a porta de origem. Clique em “Adicionar” depois e depois clique em “Abrir” para abrir a conexão SSH. Você também precisará digitar o endereço e a porta do próprio servidor SSH na tela principal "Session" antes de conectar, é claro.
Você poderia então configurar um aplicativo para acessar o proxy SOCKS em seu PC local (isto é, endereço IP 127.0.0.1, que aponta para seu PC local) e especificar a porta correta.
Por exemplo, você pode configurar o Firefox para usar o proxy SOCKS. Isso é particularmente útil porque o Firefox pode ter suas próprias configurações de proxy e não precisa usar configurações de proxy para todo o sistema. O Firefox enviará seu tráfego através do túnel SSH, enquanto outros aplicativos usarão sua conexão normalmente.
Ao fazer isso no Firefox, selecione “Manual proxy configuration”, digite “127.0.0.1” na caixa do host SOCKS e insira a porta dinâmica na caixa “Port”. Deixe as caixas Proxy HTTP, Proxy SSL e Proxy FTP vazias.
O túnel permanecerá ativo e aberto enquanto você tiver a conexão da sessão SSH aberta. Quando você termina sua sessão SSH e se desconecta de um servidor, o túnel também será fechado. Basta reconectar com o comando apropriado (ou as opções apropriadas no PuTTY) para reabrir o túnel.