Criando VPNs usando o SSH

Por: Julio Cesar Bessa Monqueiro

Em tutoriais anteriores, falei sobre a possibilidade de criar túneis seguros usando o SSH, uma forma simples de encriptar protocolos que em condições normais não suportam encriptação. Usando este recurso, é possível ligar uma das portas da sua máquina à porta do servidor onde o serviço em questão está ativo. Nesse caso, é criada uma espécie de VPN temporária, através da qual é possível acessar o serviço de forma segura. Todas as informações transmitidas são encriptadas pelo SSH, tornando seguros mesmo protocolos “escancarados”, como o FTP.

Usando este recurso, você poderia criar, por exemplo, um túnel entre a porta 3128 da sua máquina e a porta 3128 de um servidor remoto rodando um servidor proxy, como em:

$ ssh -f -N -L3128:200.231.23.21:3128 -l tux 200.231.23.21

Você poderia então configurar o navegador na sua máquina para acessar usando o proxy, que agora pode ser contactado através da porta 3128 do localhost. Isso faz com que todos os acessos sejam direcionados ao túnel criado através do SSH e cheguem até o proxy de forma encriptada:

Se você é um leitor atento, você deve ter se perguntado se, já que é possível criar tuneis envolvendo portas específicas, não seria possível criar de uma vez um túnel englobando todas as portas, estabelecendo assim uma VPN. A boa notícia é que este recurso está disponível no OpenSSH 4.3 em diante, de forma que já está disponível na grande maioria das distribuições atuais.

O túnel é criado utilizando a interface TUN/TAP, disponível no Kernel, que permite a criação de interfaces de rede virtuais. Ao criar o túnel, é criada uma interface virtual interligando o cliente e o servidor, que recebe um endereço IP próprio e tudo mais, permitindo que todos os recursos disponibilizados pelo servidor, incluindo compartilhamentos de arquivos e impressoras fiquem disponíveis para o cliente e vice-versa.

Além de muito mais simples do que criar uma VPN usando o PPPD ou outras ferramentas, as VPNs criadas usando o SSH são mais seguras, já que são estabelecidas usando o ambiente criptográfico oferecido pelo SSH.

O primeiro passo é editar o arquivo “/etc/sshd_config” no servidor (você pode usar o próprio SSH para editar o arquivo), adicionando a linha:

PermitTunnel yes

É necessário também que a linha “PermitRootLogin = yes” esteja presente, já que, por segurança, apenas o root pode criar a VPN. Se você não quer permitir logins como root devido à questão da segurança, uma opção é combiná-la com a linha “PermitRootLogin = forced-commands-only”, como em:

PermitRootLogin = yes
PermitRootLogin = forced-commands-only

Ela torna o acesso como root um pouco mais restritivo, pois permite apenas o uso do root para a execução de comandos (como o que usaremos para criar o túnel) e não para login direto. Depois de feitas as alterações, reinicie o servidor SSH para que as alterações entrem em vigor:

# /etc/init.d/ssh restart

Se nesse ponto você receber um erro como:

/etc/ssh/sshd_config: line 16: Bad configuration option: PermitTunnel
/etc/ssh/sshd_config: terminating, 1 bad configuration options

… significa que você está utilizando uma versão antiga do SSH, que não suporta o recurso. Como disse, a criação de túneis é um recurso disponível a partir do OpenSSH 4.3 (ele já é usado no Debian Etch, por exemplo). A solução é atualizar o SSH, ou migrar para uma distribuição mais atual.

Uma dica é que você não precisa ter medo de reiniciar o SSH quando estiver conectado ao servidor remotamente, pois reiniciar o serviço não derruba as conexões já estabelecidas, afetando apenas as novas conexões. Mesmo que algum erro de configuração faça o servidor deixar de inicializar, você ainda poderá usar a conexão atual para resolver o problema.

Sobre o Autor