segunda-feira, 5 de novembro de 2012

Acesse o SSHD (porta 22) via regra no Firewall de borda liberado para o SSL (porta 443)

Neste post vou falar sobre uma ferramenta muito legal e que com certeza vai salvar a vida de muita gente. O sslh permite com que na mesma máquina aceite conexões HTTPS e SSH, com ele você tanto pode acessar sua aplicação na porta HTTPS quanto gerenciar seu servidor através do serviço SSH, e tudo isso apenas com a porta 443 aberta.

Imagine o seguinte, você trabalha em uma empresa onde você não gerencia o firewall de borda desta empresa, mas você tem um servidor WEB (porta 80 e 443) em produção na rede interna que é a acessada da Internet por meio de um NAT criado no firewall de borda, veja a figura abaixo:



Neste cenário temos um servidor WEB na rede interna com o IP 10.1.4.249. Como esta máquina possui um IP privado (não acessível pela Internet), então é precisso criar um NAT no Firewall para que o acesso vindo da Internet seja possível. Foi criado um NAT, onde todo o tráfego vindo da Internet com destino ao IP 200.164.100.103 será redirecionado para o IP 10.1.4.249, perceba também que só as portas 80 e 443 foram liberadas neste Firewall, com isso qualquer outra tentativa de acesso em outra porta do servidor será bloqueada pelo Firewall.

O que queremos fazer é usar a conexão liberada pelo Firewall na porta 443 para acessar minha aplicação WEB e também o serviço SSHD, que permite com que eu possa administrar meu servidor, é ai que entra o sslh. O sshl vai gerenciar toda conexão com destino a porta 443 do servidor e decidir se aquela conexão tem que ser direcionada para a aplciação (porta 443) ou para o serviço SSHD (porta 22), veja a figura abaixo:


Primeiramente vamos instalar o sslh (Debian):
#aptitude install sslh

Levando em consideração que seu servidor WEB já esta funcionando e configurado para aceitar conexões na porta 443 (SSL), certifique-se que o apache esteja escutando na porta 443 com o IP 127.0.0.1, veja figura abaixo:
 


Vamos editar o arquivo de configuração do sslh (vim /etc/default/sslh), ficando assim:

RUN=yes
DAEMON_OPTS="-u sslh -p 10.1.4.249:443 -s 127.0.0.1:22 -l 127.0.0.1:443"

Onde:
-p 10.1.4.249:443 = ip do servidor com a porta onde o sslh vai estar esperando por conexão
-s 127.0.0.1:22 = Ip e porta do serviço SSHD (neste caso local)
-l 127.0.0.1:443 = por onde as conexões SSL vão ser repassadas

Agora reinicie o serviço sslh:
#/etc/init.d/sslh restart

Veja com o comando netstat como ficou os serviços:



Pronto. Agora podemos testar.
Primeiro vamos acessar nossa aplicação WEB na porta SSL:


Como podemos ver conseguimos acessar nossa aplicação sem problema, agora vamos usar o comando ssh do linux para acessar o serviço SSHD usando o IP 200.164.100.103 e a porta 443, exatamente como usamos para acessar via browser, veja como ficou:

Agora só é entrar com a senha. Pronto você nem precisou acionar os responsáveis pelo Firewall para adicionarem uma nova porta na sua regra para acessar seu serviço SSHD.

Conhecimento é “tudo”.