Port knocking + Iptables fechando portas abertas a internet

Você já se preocupou com a quantidade de portas abertas no firewall da sua empresa, a porta 22 precisa para o acesso SSH, a 3389 para o terminal Server, a 5900 para o VNC?

Claro que a gente não se preocupa isso é bobagem, afinal nós profissionais de TI sempre temos pouca coisa para fazer e estamos constantemente trocando senhas de todos os serviços, atualizando o sistema, monitorando logs, e usamos tunelamento*. Além disso, não usamos portas padrões para o ssh, ele está rodando na porta “60500” e nenhum Hacker* irá descobrir isso :D. Bom brincadeiras a parte afinal em qualquer chat de Stripts* a palavra nmap* rola solta.

Sabemos no entanto que é praticamente impossível não possuir nenhuma porta aberta para o uso externo. Afinal temos servidores pop (porta 110), smtp (porta 25), e o próprio servidor web (porta 80) que devem estar “bem abertas” para o acesso. No entanto podemos minimizar o problema abrindo outras portas apenas quando realmente for necessário.

A idéia de um Port knocking é exatamente essa. As portas de serviços como o do Ssh ficam fechadas para acesso externo até segunda ordem a não ser que você solicite a abertura.

*Tunelamento resumidamente seria a conexão entre duas máquinas utilizando-se de uma porta qualquer onde podem trafegar informações de qualquer serviço mesmo que utilizem outra porta. Um bom exemplo de protocolo que suporta tunelamento é o Security Shell (ssh).

*Hacker diz respeito ao usuário que estuda um sistema ou hardware de computador, procurar entender seu mecanismo e como ele funciona a fim de aperfeiçoá-lo. Ao contrário do que divulga a mídia onde o Hacker é o usuário que invade sistemas e os danifica, ela está se referindo na verdade ao Cracker. Um Hacker pode invadi um sistema a fim de apontar falhas a serem corrigidas no entanto jamais causará prejuízos ou roubo de informações sigilosas.

*Scripts antigamente denominado de Lamer é o usuário que apesar de não compreender exatamente como um sistema ou mecanismo funciona utiliza-se de ferramentas criadas por outros. Esses causam prejuízos, danificam sistemas com o único intuito de ganhar fama ou dinheiro.

*Nmap software utilizado para escaneamento de redes a procura de informações diversas de um host.

 

 

Knockd

O knockd é um servidor port knoking que utiliza a lógica de combinações de portas, ou seja, caso uma tentativa de conexão externa respeite uma lógica de portas previamente definidas, a porta realmente requerida será aberta.

Um serviço knockd fica ativo em seu servidor monitorando todas as tentativas de conexões externas, caso a ordem das tentativas de conexões em portas distintas respeitem a ordem definida no seu arquivo de configuração uma regra é ativada e adicionada ao firewall.

Imaginamos que precisamos acesso a porta 3389, tentaremos inicialmente a conexão no servidor pelas portas 5000, 6000 e 7000 respectivamente (também fechadas), o serviço knockd estará monitorando essa tentativa e disparando a regra correspondente liberando acesso a porta 3389 no firewall.

Da mesma forma que a porta é aberta após finalizarmos a conexão uma outra regra é definida para fechar a porta.

 

O que foi utilizado

Para esse tutorial foram utilizados os sistemas Ubuntu server 11.04 configurado como firewall que possui duas placas de redes uma para acesso da internet e outro para a rede local, uma máquina cliente da rede local com Windows 2008 R2, ip 192.168.1.18, rodando o Terminal Server na porta3389 (“Windows com W viu :)”) e uma maquina externa a rede Windows Seven que irá acessar o TS da internet.

Nosso objetivo será manter a porta 3389 fechada para acesso externo no firewall e abri-la apenas(não para toda a internet) ao cliente externo que entrou com a seqüência de portas definidas no arquivo de configuração do knocking.

 

Instalação e configuração do servidor

Para instalar o knockd como root digite:

#apt-get install knockd

Edite o arquivo de configuração:

# mcedit /etc/knockd.conf

Apague o conteúdo padrão do arquivo e preencha com o seguinte conteúdo:

#–INICIO–#

[options]

UseSyslog

[OPENTS2003]

sequence = 7000,8000,9000

seq_timeout = 5

command = /sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 –dport 3389 -j DNAT -s %IP% –to 192.168.1.18

tcpflags = syn

[CLOSETS2003]

sequence = 9000,8000,7000

seq_timeout = 5

command = sbin/iptables -t nat -D PREROUTING -p tcp -i eth0 –dport 3389 -j DNAT -s %IP% –to 192.168.1.18

tcpflags = syn

#–FIM–#

As linhas mais importantes desse arquivo são:

sequence = 7000,8000,9000
é onde definimos a seqüência de portas tcp que devem respeitada para a adição da regra da linhacommand = /sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 –dport 3389 -j DNAT -s %IP% –to 192.168.1.18 
no firewall.

sequence = 9000,8000,7000 é onde definimos a seqüência de portas tcp que devem respeitada para a remoção da regra da linha command = /sbin/iptables -t nat -D PREROUTING -p tcp -i eth0 –dport 3389 -j DNAT -s %IP% –to 192.168.1.18do firewall.

 

Execute o knockd com o seguinte comando:

knockd –i eth0 –d –c /etc/knockd.conf

Obs: Neste tutorial considere eth0 a placa do firewall ligada à internet.

Dicas:

*Você pode adicionar no final do arquivo /etc/rc.local o comando knockd –i eth0 –d –c /etc/knockd.conf afim de o serviço do knocking iniciar junto com o servidor.

*Podem ser adicionadas novas regras OPEN e CLOSE no arquivo de configuração do knocking.

 

Configuração o cliente knockd no Windows

Com o servidor em pleno funcionamento vamos baixar o cliente knockd para Windows e criar um pequeno script para executá-lo e disparar a solicitação de abertura da porta 3389 ao servidor além de abrir o cliente do Terminal Server para acesso.

Baixe o cliente knock para Windows no link abaixo:

http://www.zeroflux.org/proj/knock/files/knock-win32.zip

Cria uma pasta no c: com o nome de knockcli

Descompacte o arquivo baixado, entre na pasta Release e copie o executável knock.exe para a pasta c:knockcli

Abra o bloco de notas e digite o seguinte conteúdo:

c:
cd
cd knockcli
knock “ipdoservidor” 7000:tcp 8000:tcp 9000:tcp
cls
echo “Mantenha essa janela aberta”
%windir%system32mstsc.exe
knock “ipdoservidor” 9000:tcp 8000:tcp 7000:tcp

 

Salve com o arquivo com o nome de iniciaTS.cmd

 

Configuração o cliente knockd em uma máquina Linux (Ubuntu).

Para instalar cliente do knockd no Linux o comando é o mesmo do servidor, como root:

#apt-get install knockd

Podemos agora criar um pequeno script que irá executar o cliente knocking, abrir o cliente TS (Rdesktop) e ao término da sessão do TS fechar a porta novamente.

Em um terminal crie o arquivo exemplo.sh no diretório de sua preferência (não precisa ser como root):

$ mcedit /home/itn/exemplo.sh

Adicione o seguinte conteúdo ao arquivo:

#!/bin/bash
knock “ipdoservidor” 7000:tcp 8000:tcp 9000:tcp
rdesktop “ipdoservidor”
knock “ipdoservidor” 9000:tcp 8000:tcp 7000:tcp

As linhas

knock “ipdoservidor” 7000:tcp 8000:tcp 9000:tcp é a seqüência de solicitação de conexão de portas definidas no servidor para abrir a porta 3389.

 

knock “ipdoservidor” 9000:tcp 8000:tcp 7000:tcp é a seqüência de solicitação de conexão de portas definidas no servidor para fechamento da porta 3389.

Marque o arquivo como executável:

$ chmod +x /home/itn/exemplo.sh

Execute o arquivo (clicando sobre ou via terminal).

$ /home/itn/exemplo.sh

Fonte: http://itnproducoes.blogspot.com.br/2011/07/port-knocking-iptables-fechando-portas.html