Post

Guia Completo para Configuração Avançada de Túnel SSH

Guia Completo para Configuração Avançada de Túnel SSH

Introdução

O SSH (Secure Shell) é uma ferramenta essencial para administradores de sistemas e desenvolvedores, permitindo acesso remoto seguro a servidores, transferência de arquivos e execução de comandos em máquinas remotas. No entanto, suas funcionalidades vão muito além de simples conexões, podendo ser configuradas para resolver problemas complexos de acesso a redes internas, segurança e automação.

Este tutorial detalhado tem como objetivo guiar você pelas técnicas avançadas de uso do SSH, desde configurações básicas de conexão no arquivo ~/.ssh/config, até cenários mais complexos envolvendo redirecionamento de portas, criação de túneis dinâmicos com proxy SOCKS5 e encadeamento de proxies. Cada seção inclui exemplos práticos e explicações claras para ajudar você a otimizar seu uso do SSH em diferentes ambientes de rede.


Sumário

Estrutura e Sintaxe do Arquivo ~/.ssh/config

Objetivo

O arquivo ~/.ssh/config permite a definição de parâmetros de conexão SSH de forma simplificada. Usá-lo é uma maneira de padronizar e automatizar as conexões, economizando tempo e facilitando o acesso a múltiplos servidores.

Estrutura Básica

Cada configuração dentro do arquivo ~/.ssh/config é organizada em blocos, onde cada bloco inicia com a palavra-chave Host, seguida de um nome amigável para o host. Embaixo do Host, são especificadas as configurações específicas para aquela conexão.

1
2
3
4
Host nome_amigavel
    HostName endereco_do_servidor
    User usuario_ssh
    Port numero_porta
Parâmetros Comuns
  1. Host: Define um nome amigável para identificar o servidor. Pode ser um nome curto (ex. web_server) ou um padrão que abranja múltiplos hosts (ex. Host 192.168.0.*).
  2. HostName: Endereço do servidor (pode ser um domínio ou IP).
  3. User: Usuário SSH padrão para aquele host.
  4. Port: Porta do serviço SSH (o padrão é 22).

Exemplo Básico

Aqui está um exemplo de configuração para três servidores comuns: um servidor web, um de banco de dados e um de arquivos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Host web_server
    HostName web.example.com
    User webuser
    Port 22
    IdentityFile ~/.ssh/web_key

Host db_server
    HostName db.example.com
    User dbuser
    Port 3306
    IdentityFile ~/.ssh/db_key

Host file_server
    HostName files.example.com
    User fileuser
    Port 22
    IdentityFile ~/.ssh/file_key

Uso: Após salvar essas configurações, você pode se conectar facilmente usando os nomes amigáveis, como em ssh web_server.

Exercício Prático 1: Configuração Básica de Múltiplos Hosts

  1. Edite o Arquivo ~/.ssh/config: Abra o arquivo no seu editor preferido (vim, nano, etc.) e adicione as configurações.
  2. Conecte-se com Apelidos: Experimente se conectar usando os nomes configurados, como ssh web_server, ssh db_server, etc.

Configurações Úteis e Variáveis Dinâmicas

Para facilitar a gestão de redes complexas, o SSH oferece configurações avançadas que permitem um controle maior sobre as conexões.

  1. ProxyCommand: Define um comando personalizado para roteamento de conexões através de um proxy. Esse recurso é essencial quando você precisa acessar um servidor remoto que só está acessível através de um host intermediário (proxy).

    1
    2
    3
    
    Host servidor_remoto
        HostName servidor.com
        ProxyCommand ssh -q proxy_host nc %h %p
    

    Explicação:

    • proxy_host é o servidor que age como intermediário para a conexão.
    • nc %h %p (Netcat) redireciona a conexão para o host final.

Verifique se o Netcat (nc) está instalado no sistema, pois ele é necessário para alguns comandos de encadeamento. Caso não esteja disponível, pode ser instalado em sistemas Debian/Ubuntu com sudo apt install netcat ou em sistemas CentOS/RHEL com sudo yum install nc.

  1. IdentityFile: Define a chave SSH a ser utilizada para autenticação. Muito útil quando diferentes servidores exigem chaves distintas.

    1
    2
    3
    4
    
    Host servidor_banco
        HostName db.example.com
        User dbuser
        IdentityFile ~/.ssh/chaves/db_key
    
  2. DynamicForward (-D): Configura um proxy SOCKS5 diretamente no arquivo de configuração. Ideal para criar um túnel SSH que pode ser usado como um proxy de rede.

    1
    2
    3
    4
    
    Host proxy_exemplo
        HostName example.com
        User proxyuser
        DynamicForward 1080
    
  3. ForwardAgent: Redireciona a autenticação SSH, permitindo que você se conecte de um servidor a outro usando suas credenciais locais.

    1
    2
    3
    
    Host servidor_intermediario
        HostName proxy.example.com
        ForwardAgent yes
    

Exercício Prático 2: Conectando-se a um Servidor Remoto Usando ProxyCommand

Imagine que você deseja se conectar a internal.example.com, que só está acessível através de proxy.example.com.

  1. Configuração: Adicione ao ~/.ssh/config:

    1
    2
    3
    4
    
    Host internal_server
        HostName internal.example.com
        User internaluser
        ProxyCommand ssh proxyuser@proxy.example.com -W %h:%p
    
  2. Conexão: Após salvar, você poderá se conectar ao servidor interno com ssh internal_server, sem precisar lembrar do comando completo.

Esse é um exemplo da flexibilidade do SSH para conexões complexas e multi-hop, simplificando o acesso a servidores internos.

Parte 3: Redirecionamento de Porta Local com SSH

O redirecionamento de porta local permite que você encaminhe o tráfego de uma porta específica no seu computador local para uma porta em um servidor remoto, via SSH. Esse recurso é muito utilizado para acessar serviços internos que estão disponíveis apenas a partir de um servidor específico.

Exemplo de Caso de Uso: Redirecionamento de Porta para Acesso a um Serviço Remoto

Imagine que você precisa acessar o site geanmartins.com.br, mas ele só está disponível através de um servidor intermediário (192.168.0.254). Em vez de acessar o site diretamente, você cria um túnel SSH que redireciona o tráfego para passar por esse servidor intermediário.

Comando de Redirecionamento de Porta Local

  1. Comando Completo:
    1
    
    sudo -E ssh -L 127.0.0.3:443:geanmartins.com.br:443 -N -f gean@192.168.0.254
    
  2. Explicação dos Parâmetros:
    • -L 127.0.0.3:443:geanmartins.com.br:443: Redireciona o tráfego da porta 443 no IP 127.0.0.3 do seu computador local para o endereço geanmartins.com.br:443 através do servidor intermediário.
    • -f: Coloca a conexão em segundo plano.
    • -N: Não executa comandos remotos, apenas cria o túnel.
    • -E: Preserva variáveis de ambiente (opcional), útil ao executar como sudo.
  3. Adicionando ao Arquivo /etc/hosts: Para que seu navegador ou outras aplicações acessem geanmartins.com.br via o túnel, adicione uma entrada no arquivo /etc/hosts:
    1
    
    echo "127.0.0.3 geanmartins.com.br" | sudo tee -a /etc/hosts
    
  4. Resultado: Agora, qualquer acesso a https://geanmartins.com.br no seu navegador será redirecionado pelo túnel, passando pelo servidor intermediário 192.168.0.254.

Proxy Dinâmico com SOCKS5

Um proxy SOCKS5 dinâmico permite que você redirecione o tráfego de várias portas e endereços através de um túnel SSH, funcionando como um proxy configurável. É útil para navegar na web de forma segura ou acessar redes internas sem precisar configurar o redirecionamento de porta individualmente.

Exemplo de Caso de Uso: Criando um Proxy SOCKS5

Suponha que você precise de um proxy para acessar a internet ou recursos internos a partir de um servidor intermediário (192.168.0.254). O proxy SOCKS5 permite encaminhar todo o tráfego HTTP, HTTPS, e até de outras aplicações, através do túnel.

  1. Comando para Criar o Proxy SOCKS5:
    1
    
    ssh -D 1080 -f -C -q -N gean@192.168.0.254
    
  2. Explicação dos Parâmetros:
    • -D 1080: Cria um proxy SOCKS5 na porta 1080 do localhost.
    • -f: Coloca o comando em segundo plano.
    • -C: Habilita compressão, o que pode melhorar a velocidade de conexões lentas.
    • -q: Suprime mensagens de aviso e debug.
    • -N: Não executa comandos no servidor, apenas cria o túnel.
  3. Configuração no ~/.ssh/config: Para tornar essa configuração mais prática, adicione ao ~/.ssh/config:

    1
    2
    3
    4
    
    Host socks_proxy
        HostName 192.168.0.254
        User gean
        DynamicForward 1080
    

Agora, você pode ativar o proxy SOCKS5 simplesmente com ssh socks_proxy.

  1. Configuração do Navegador:
    • Configure seu navegador (Firefox, Chrome, etc.) para usar localhost:1080 como proxy SOCKS5.
    • Esse proxy estará ativo enquanto a conexão SSH estiver aberta.
  2. Resultado: Todo o tráfego de rede do navegador ou de outros aplicativos que usem o proxy será encaminhado de forma segura através do túnel SSH.

Configuração Avançada com Redirecionamento de Sub-rede Específica

Você também pode usar o proxy SOCKS5 em conjunto com ProxyCommand para acessar dispositivos em uma sub-rede específica através do servidor intermediário.

Exemplo de Caso de Uso: Redirecionamento de Sub-rede com Proxy SOCKS5

Suponha que você precise acessar uma sub-rede 192.168.200.*, que só é acessível através de um proxy SOCKS5 em 192.168.0.254.

  1. Criação do Proxy SOCKS5:
    1
    
    ssh -D 1080 -f -C -q -N gean@192.168.0.254
    
  2. Configuração no ~/.ssh/config: Configure o arquivo para rotear automaticamente o tráfego para qualquer host da sub-rede 192.168.200.* usando o proxy SOCKS5:

    1
    2
    3
    
    Host 192.168.200.*
        ProxyCommand nc -x 127.0.0.1:1080 %h %p
        User gean
    

    Esse bloco indica ao SSH que, ao tentar acessar um IP na sub-rede 192.168.200.*, ele deve redirecionar o tráfego pelo proxy SOCKS5 configurado em 127.0.0.1:1080.

  3. Resultado: Quando você se conectar a qualquer IP em 192.168.200.*, o SSH encaminhará automaticamente o tráfego pelo proxy SOCKS5, permitindo acesso à sub-rede de forma segura e transparente.

Encadeamento de Proxies com ProxyCommand

Encadeamento de Proxies permite que o tráfego SSH passe por múltiplos intermediários antes de chegar ao destino final. Com o uso de ProxyCommand, você pode definir uma sequência de servidores/proxies que o SSH precisa atravessar para acessar o servidor desejado.

Exemplo de Caso de Uso: Acesso a um Servidor Final através de Dois Proxies Intermediários

Imagine que você precisa se conectar a um servidor finalserver.com, mas ele só pode ser acessado após passar por dois proxies intermediários: proxy1.com e proxy2.com.

Configuração com ProxyCommand no ~/.ssh/config

Para configurar o encadeamento de proxies, vamos criar um bloco de configuração para cada servidor/proxy. A ideia é que o finalserver utilize o proxy2 como intermediário e o proxy2, por sua vez, utilize o proxy1.

  1. Passo a Passo para Configuração:

    No arquivo ~/.ssh/config, adicione as seguintes entradas:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    Host proxy1
        HostName proxy1.com
        User usuario1
    
    Host proxy2
        HostName proxy2.com
        User usuario2
        ProxyCommand ssh -W %h:%p usuario1@proxy1.com
    
    Host finalserver
        HostName finalserver.com
        User usuariofinal
        ProxyCommand ssh -W %h:%p usuario2@proxy2.com
    
    • Host proxy1: Configura o primeiro proxy (proxy1.com), onde você fornece o nome de usuário (usuario1).
    • Host proxy2: Configura o segundo proxy (proxy2.com), que utilizará proxy1.com como intermediário através de ProxyCommand.
    • Host finalserver: Configura o servidor final (finalserver.com) para utilizar proxy2.com como intermediário, o qual já está configurado para passar pelo proxy1.
  2. Explicação do Encadeamento:
    • ssh -W %h:%p usuario1@proxy1.com: Esse comando redireciona a conexão para o primeiro proxy.
    • ssh -W %h:%p usuario2@proxy2.com: Redireciona do segundo proxy para o servidor final.
    • Cada salto é configurado automaticamente pelo SSH ao conectar ao finalserver.
  3. Conexão: Agora, ao executar ssh finalserver, o SSH automaticamente percorre o caminho proxy1proxy2finalserver.

Alternativa com nc (Netcat) para Encadeamento de Proxies

Se você possui o Netcat (nc) instalado, ele oferece uma alternativa simples para realizar o encadeamento de proxies. Isso pode ser útil em redes onde o Netcat é permitido e pode ser configurado para o roteamento.

Exemplo de Encadeamento com Netcat

  1. Configuração com Netcat:

    Adicione o seguinte bloco no ~/.ssh/config para realizar o encadeamento:

    1
    2
    3
    4
    
    Host finalserver
        HostName finalserver.com
        User usuariofinal
        ProxyCommand ssh -q -W %h:%p usuario2@proxy2.com -o ProxyCommand="ssh -W %h:%p usuario1@proxy1.com"
    
    • Aqui, proxy2.com redireciona para proxy1.com, que redireciona para finalserver.com.
    • A opção -o ProxyCommand="ssh -W %h:%p usuario1@proxy1.com" define o proxy inicial (proxy1) no mesmo comando, criando uma cadeia mais simples.
  2. Conexão: Execute ssh finalserver para iniciar o encadeamento, que passará automaticamente por proxy1 e proxy2 até o destino final.


Casos de Uso e Benefícios do Encadeamento de Proxies

  1. Ambientes Corporativos Seguros: Em redes corporativas, o encadeamento de proxies é comum em ambientes com zonas de segurança em camadas, onde diferentes proxies e firewalls isolam segmentos de rede.
  2. Ambientes de Alta Segurança: Em infraestruturas de alta segurança, esse método ajuda a mascarar o ponto de origem do tráfego e proteger as conexões.
  3. Acesso a Redes Privadas em Cascata: Quando o destino final está em uma rede privada protegida por vários proxies, o encadeamento permite acessar esses recursos sem configurações extras de VPN.

Conclusão

Este tutorial explorou o uso avançado do SSH para tornar suas conexões mais seguras, flexíveis e eficientes. A partir das configurações no arquivo ~/.ssh/config, mostramos como padronizar e automatizar o acesso a múltiplos servidores. Em seguida, abordamos técnicas de redirecionamento de portas e criação de túneis com proxy SOCKS5, recursos fundamentais para contornar restrições de rede e garantir segurança em ambientes complexos. Por fim, exploramos o encadeamento de proxies, uma técnica poderosa para acessar redes internas altamente segmentadas ou ambientes corporativos com várias camadas de segurança.

O SSH é uma ferramenta extremamente versátil, e dominar essas configurações pode reduzir o tempo gasto em tarefas rotineiras, além de aumentar a segurança no acesso a servidores remotos. Com essas técnicas, você poderá adaptar o SSH a praticamente qualquer cenário de rede, aprimorando seu fluxo de trabalho e tornando suas conexões mais seguras.

Esperamos que este guia tenha sido útil e que as práticas aqui apresentadas possam ser aplicadas em seu ambiente profissional para tornar o uso do SSH mais produtivo e confiável.


This post is licensed under CC BY 4.0 by the author.