Criar túnel SSH para VNC

Se utiliza o protocolo Virtual Network Computing (VNC), a sua ligação pode não ser segura… Alguns clientes VNC não cifram a ligação após o login inicial.

Algumas organizações bloqueiam portos como o 5901 por segurança, pois caso contrário poderia permitir qualquer utilizador aceder através de VNC.

Um tunel SSH permite uma ligação mais segura para o VNC, e além diso permite a utilização de ligações VNC mesmo quando uma porta típica do VNC (ex. 5901) se encontra bloqueada.

Neste artigo assume-se que o serviço SSH está configurado no servidor remoto.

Configurar Servidor VNC

Pode começar-se por instalar o Xfce juntamente com o pacote xfce4-goodies, que contém algumas melhorias para o ambiente desktop:

sudo apt install xfce4 xfce4-goodies

Uma vez que a instalação tiver terminada, instale o servidor de VNC TightVNC:

sudo apt install tightvncserver

Execute o comando “vncserver” para definir uma password de acesso VNC, criar os arquivos de configuração iniciais e iniciar uma instância de servidor VNC.

vncserver

Pode ser alterada a password com o comando “vncpasswd”.

O VNC precisa agora de saber a qual ambiente gráfico de desktop deve utilizar.

Passos a realizar:

Interrompa a instância do servidor VNC que estiver em execução na porta 5901:

vncserver -kill :1

Antes de modificar o arquivo xstartup, faça um backup do original:

mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

Agora, crie um novo arquivo xstartup e abra-o num editor de texto, como o nano:

nano ~/.vnc/xstartup

De seguida, adicione as seguintes linhas ao arquivo:

#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &

Para garantir que o servidor VNC será capaz de utilizar esse novo arquivo de inicialização corretamente, precisaremos torná-lo executável.

chmod +x ~/.vnc/xstartup

Em seguida, reinicie o servidor VNC:

vncserver -localhost

O comando acima inicia o servidor VNC.

Observe que, desta vez, o comando inclui a opção -localhost, que vincula o servidor VNC à interface loopback do seu servidor. Isso fará com que o VNC permita apenas ligações que se originam do servidor onde ele está instalado.

Essa estratégia adicionará uma camada de segurança extra em torno do VNC, pois os únicos utilizadores que poderão ter acesso via VNC são os que já têm acesso SSH ao seu servidor.

Configurar o PuTTY

O PuTTY oferece uma interface gráfica que pode ser facilmente configurada para permitir, sobre uma ligação de, por exemplo, SSH usar um túnel para outro software como um cliente VNC.

Passos a realizar no PuTTY:

  • Iniciar o PuTTY
  • Definir os dados associados à sessão SSH. Alterar o porto padrão se necessário (de acordo com o configurado no servidor SSH remoto)
  • Opcionalmente guardar a sessão
  • No menu à esquerda, na aba “Connection” e depois “SSH” existe a opção “Tunnels”.

Na secção de redirecionamento de portos, é necessário configurar o Putty para que permita criar um túnel para a ligação VNC sobre SSH. Na porta de origem preencha o porto que será utilizado na máquina que estamos a utilizar (máquina pessoal) para realizar o redirecionamento (ex: 5901), e no destino preencha “localhost” e o porto associado ao serviço VNC no servidor no formato IP:PORTO.

Com as configurações prontas do PuTTy, guarde a sessão no PuTTy e realize a ligação SSH inserindo os seus dados de autenticação.

Após a ligação SSH ser estabelecida e estar ativa, é possível agora realizar a ligação via VNC usando um cliente VNC (ex: MobaXterm) para o endereço “127.0.0.1:5901”.

O PuTTY estará a monitorizar o porto 5901 e irá redirecionar automaticamente a ligação para o servidor remoto.

É importante ainda que referir que existem clientes de VNC como o MobaXterm que permitem criar um túnel SSH para VNC diretamente sem recorrer ao PuTTy para realizar o redirecionamento de portos.


Nota: Para confirmar o porto, associado ao protocolo VNC, que está a ser utilizado pelo servidor, pode ser utilizado o seguinte comando:

sudo netstat -ntlp | grep LISTEN

Iniciar o servidor com o sistema

Para que não se esteja a iniciar manualmente o servidor de VNC, podemos automatizar o seu início cada vez que a máquina seja iniciada, criando um systemd script.

Para iniciar, crie o seguinte ficheiro:

sudo nano /etc/systemd/system/vncserver@.service

Após o ficheiro estar aberto insira o conteúdo seguinte, sendo que deve substituir o “user1” (na linha 7 e 10) pelo seu nome de utilizador.

[Unit]
Description=Systemd VNC server startup for Ubuntu 20.04
After=syslog.target network.target

[Service]
Type=forking
User=user1
ExecStartPre=-/usr/bin/vncserver -kill :%i &> /dev/null
ExecStart=/usr/bin/vncserver -depth 24 -geometry 800x600 :%i
PIDFile=/home/user1/.vnc/%H:%i.pid
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

Repare que este script foi apenas testado na versão 20.04 do Ubuntu.

De seguida, reinicie o Systemd para que as mudanças tenham efeito.

Pode iniciar o servidor VNC 1 com o seguinte comando:

sudo service vncserver@1 start

Para que ativar o servidor VNC 1 sempre que a máquina iniciar, utilize o seguinte comando:

sudo systemctl enable vncserver@1
João Orvalho
João Orvalho received his B.Sc in Computer Science and M.Sc. in Computer Security Engineering at Polytechnic Institute of Beja in Portugal, where he also taught. His interests include most aspects of cyber security, with an emphasis on network security, intrusion detection and prevention, cyber risk assessments and penetration testing.