Um cliente SSH se conecta a um servidor Secure Shell , que permite que você execute comandos de terminal como se você estivesse sentado na frente de outro computador. Mas um cliente SSH também permite que você “encapsule” uma porta entre seu sistema local e um servidor SSH remoto.
Existem três tipos diferentes de tunelamento SSH e todos 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 se conectar a servidores SSH. Ele também suporta tunelamento SSH.
Índice
Encaminhamento de porta local: torne os recursos remotos acessíveis em seu sistema local
“Encaminhamento de porta local” permite que você acesse recursos de rede local que não estão expostos à Internet. Por exemplo, digamos que você deseja acessar um servidor de banco de dados em seu escritório de sua casa. Por motivos de segurança, esse servidor de banco de dados é configurado apenas para aceitar conexões da rede local do escritório. Mas se você tiver acesso a um servidor SSH no escritório e esse servidor SSH permitir conexões de fora da rede do escritório, poderá se conectar a esse servidor SSH de casa e acessar o servidor de banco de dados como se estivesse no escritório. Geralmente, esse é o caso, pois é mais fácil proteger um único servidor SSH contra ataques do que 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 de 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. Portanto, quando você tenta acessar o servidor de banco de dados na porta 1234 do seu PC atual, “localhost”, esse tráfego é automaticamente “encapsulado” pela conexão SSH e enviado ao 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 ele estivesse sendo executado em seu PC local.
Para usar o encaminhamento local, conecte-se ao servidor SSH normalmente, mas forneça também o -L
argumento. A sintaxe é:
ssh -L local_port: remote_address: remote_port username@server.com
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 é bob
. Nesse caso, seu comando ficaria assim:
ssh -L 8888: 192.168.1.111: 1234 bob@ssh.youroffice.com
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 navegador da web 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 para localhost: 8888. Todo o tráfego enviado para a porta 8888 em seu PC será direcionado para 192.168.1.111:1234 na rede de seu escritório.
É um pouco mais confuso se você deseja 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 do computador do escritório, mas também tenha um servidor de banco de dados em execução na porta 1234 no mesmo sistema e no mesmo endereço. Você deseja acessar o servidor de banco de dados de casa, mas o sistema só está aceitando conexões SSH na porta 22 e seu firewall não permite nenhuma outra conexão externa.
Nesse caso, você pode executar um comando como o seguinte:
ssh -L 8888: localhost: 1234 bob@ssh.youroffice.com
Quando você tenta acessar o servidor de banco de dados na porta 8888 no seu PC atual, o tráfego será enviado pela conexão SSH. Ao chegar ao sistema rodando o servidor SSH, o servidor SSH o enviará para a porta 1234 no “localhost”, que é o mesmo PC rodando o próprio servidor SSH. Portanto, 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 “Porta de origem”, insira 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, deverá inserir 8888
como porta de origem e localhost:1234
como destino. Clique em “Adicionar” depois e clique em “Abrir” para abrir a conexão SSH. Você também precisará inserir o endereço e a porta do próprio servidor SSH na tela principal “Sessão” antes de conectar, é claro.
Encaminhamento de porta remota: torne os recursos locais acessíveis em um sistema remoto
“Encaminhamento de porta remota” é o oposto de 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 ao qual está sentado. 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 – digamos, porta 1234 – no servidor SSH para um endereço e porta específicos em 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 web em execução no seu PC. Esta é efetivamente uma maneira de criar um túnel através de firewalls.
Para usar o encaminhamento remoto, use o ssh
comando com o -R
argumento. A sintaxe é basicamente a mesma do encaminhamento local:
ssh -R remote_port: local_address: local_port username@server.com
Digamos que você queira disponibilizar um aplicativo de servidor ouvindo na porta 1234 em seu PC local 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 é bob . Você executaria o seguinte comando:
ssh -R 8888: localhost: 1234 bob@ssh.youroffice.com
Alguém poderia então se conectar ao servidor SSH na porta 8888 e essa conexão seria canalizada para o aplicativo do servidor em execução na porta 1234 no PC local a partir do qual você estabeleceu a conexão.
Para fazer isso no PuTTY no Windows, selecione Conexão> SSH> Túneis. Selecione a opção “Remoto”. Para “Porta de origem”, insira 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, deve inserir 8888
como a porta de origem e localhost:1234
como o destino. Clique em “Adicionar” depois e clique em “Abrir” para abrir a conexão SSH. Você também precisará inserir o endereço e a porta do próprio servidor SSH na tela principal “Sessão” antes de conectar, é claro.
As pessoas poderiam então se conectar à porta 8888 no servidor SSH e seu tráfego seria canalizado para a porta 1234 em seu sistema local.
Por padrão, o servidor SSH remoto ouvirá 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á habilitar 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 um proxy
Também existe o “encaminhamento de porta dinâmico”, que funciona de forma semelhante a um proxy ou VPN. O cliente SSH criará um proxy SOCKS que você pode configurar os aplicativos a serem usados. Todo o tráfego enviado através do proxy seria enviado através do servidor SSH. Isso é semelhante ao encaminhamento local – leva o tráfego local enviado para uma porta específica em 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ê deseja navegar com segurança sem ser espionado . 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 em seu PC. Todo o tráfego enviado para esse proxy será enviado pela conexão do servidor SSH. Ninguém monitorando a rede Wi-Fi pública será capaz de monitorar sua navegação ou censurar os sites que você pode acessar. Do ponto de vista de qualquer site que você visita, será como se você estivesse sentado em frente ao PC em casa. Isso também significa que você pode usar esse truque para acessar sites exclusivos dos EUA enquanto estiver fora dos EUA – supondo que você tenha acesso a um servidor SSH nos EUA, é claro.
Como outro exemplo, você pode desejar acessar um aplicativo de servidor de mídia existente em sua rede doméstica. Por motivos de segurança, você só pode ter um servidor SSH exposto à Internet. Você não permite conexões de entrada da Internet para 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, em seguida, acessar os servidores em execução na sua rede doméstica por meio do navegador da web como se estivesse em frente ao seu sistema SSH em casa. Por exemplo, se seu servidor de mídia estiver localizado na porta 192.168.1.123 em sua rede doméstica, você pode conectar o endereço 192.168.1.123
a qualquer aplicativo usando o proxy SOCKS e acessa 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 username@server.com
Por exemplo, digamos que você tenha acesso a um servidor SSH em ssh.yourhome.com
e seu nome de usuário no servidor SSH seja bob
. 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 bob@ssh.yourhome.com
Você pode então 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 através do túnel.
Para fazer isso no PuTTY no Windows, selecione Conexão> SSH> Túneis. Selecione a opção “Dinâmico”. Para “Porta de origem”, insira a porta local.
Por exemplo, se você quiser criar um proxy SOCKS na porta 8888, deverá inserir 8888
como a porta de origem. Clique em “Adicionar” depois e clique em “Abrir” para abrir a conexão SSH. Você também precisará inserir o endereço e a porta do próprio servidor SSH na tela principal “Sessão” antes de conectar, é claro.
Você pode então configurar um aplicativo para acessar o proxy SOCKS em seu PC local (ou seja, o 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 de Internet normalmente.
Ao fazer isso no Firefox, selecione “Configuração manual do proxy”, digite “127.0.0.1” na caixa do host SOCKS e digite a porta dinâmica na caixa “Porta”. Deixe as caixas Proxy HTTP, Proxy SSL e Proxy FTP vazias.
O túnel permanecerá ativo e aberto enquanto você tiver a conexão de sessão SSH aberta. Quando você encerra sua sessão SSH e se desconecta de um servidor, o túnel também é fechado. Basta reconectar com o comando apropriado (ou as opções apropriadas no PuTTY) para reabrir o túnel.