sexta-feira, 11 de novembro de 2011

Unisul TechDay 2011

Finalmente um evento sem igual em nossa região onde tem como objetivo reunir profissionais dos mais diferentes ramos da área de tecnologia da informação.
Com muito orgulho estarei participando dessa iniciativa protagonizada pelo especialista Rafael Meyer e por toda a equipe de tecnologia da Unisul de Tubarão.
O evento acontecerá durante o dia 26 de novembro (sábado).
Entre as diversas palestras, mini-palestras e mini-cursos do evento estarei ministrando a palestra de Técnicas de recuperação de arquivos e o mini-curso de Introdução ao Firewall em Linux (Iptables).

Abaixo os links para os arquivos da palestra e mini-curso:

Técnicas de recuperação de arquivos

Introdução ao Firewall em Linux (Iptables).

Maiores informações no site:
http://unisultechday.wordpress.com/organizacao/


Abraços!!

sábado, 13 de agosto de 2011

FTP Seguro com Proftpd + SSL tutorial rápido e prático (Parte2)

INTRODUÇÃO
 
Na parte 1 desse tutorial realizamos a configuração básica do proftpd e nos familiarizamos com alguns conceitos que nos fez entender melhor o seu funcionamento.
Nessa parte do tutorial iremos implementar o FTPs, ou seja a transferência segura dos arquivos via FTP utilizando certificados.
Esse tutorial é uma continuação dessa forma é necessário termos finalizado com êxito a parte anterior.


O QUE FOI UTILIZADO

Além do que foi utilizado na parte 1 desse tutorial aqui iremos precisar do pacote Openssl que será utilizado para gerar os certificados

INSTALAÇÃO E CONFIGURAÇÃO

Instale o pacote openssl:
#apt-get install openssl

Crie uma pasta em /etc/proftpd/certs e navegue até ela:
#mkdir /etc/proftpd/certs
#cd /etc/proftpd/certs

Utilize os comandos abaixo para gerar a chave primária, o pedido de assinatura, e o certificado:

Obs: Esse comando irá pedir uma senha que deverá ser digitada para possibilitar a geração da chave privada.
#openssl genrsa -des3 -out server.key 1024

Obs: Esse comando irá pedir a mesma senha digitada na geração da chave privada.
#openssl rsa -in server.key -out server.key.insecure

Obs: Esse comando irá pedir uma série de informações que podem ser preenchidas ou simplesmente aceitarmos as opções default utilizando enter.
#openssl req -new -key server.key.insecure -outform PEM -out server.csr

Obs: Esse comando irá pedir a mesma senha digitada na geração da chave privada.
#openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Explicando:
server.key 1024 É a chave privada com criptografia de 1024 bits.
server.key.insecure É a mesma chave privada sem password, isso se faz necessário pelo simples fato de que se utilizarmos uma chave com password será necessário digitar a senha cada vez que o proftpd for inicializado.

server.csr É pedido de assinatura da certificação
server.crt É o certificado auto-assinado.

-days 365 É o tempo o qual o certificado será válido (365 dias = 1 ano), aumente se necessário.

Com os certificados gerados localize as linhas abaixo em nosso arquivo de configuração do /etc/proftpd/proftpd.conf e retire os comentários para ativarmos o suporte ao FTPs:

LoadModule mod_sftp_pam.c
LoadModule mod_sftp.c
< IfModule mod_tls.c > TLSEngine on
TLSRequired on
TLSVerifyClient off
TLSProtocol SSLv23
TLSLog /var/log/proftpd_tls.log
TLSRSACertificateFile /etc/proftpd/certs/server.crt
TLSRSACertificateKeyfile /etc/proftpd/certs/server.key.insecure
TLSRenegotiate required off
< /IfModule >
Reinicie o servidor profptd:
#/etc/init.d/proftpd restart

CONFIGURAÇÃO DOS CLIENTES.

A transferência segura já está ativa, sendo assim você só conseguirá acessar o FTP com um cliente compatível e configurados corretamente.

Para clientes Linux via linha de comando você pode utilizar o ftp-ssl:
#apt-get install ftp-ssl
$ftp-ssl

E para linux e Windows graficamente o Filezilla que possui cliente para diversas plataformas, downloads no link abaixo:

Para o filezilla:
-Abra o gerenciador de sites;
- Clique em novo site;
- Host “ip do servidor”;
- Protocolo escolha “FTP protocolo de transferência de arquivos”;
- Encriptação “Requer FTP sobre TLS Explícito”;
- Tipo de logon “normal”;
- Usuário “suporte, itn2”;
- Senha “correspondente ao usuário”;
Veja a imagem abaixo:
Obs: O login anônimo com ssl ativo não irá funcionar.

CONCLUSÃO

A implementação de FTP com transferência aqui mostrada foi bastante simples mas ao mesmo tempo oferece uma segurança considerável levando em consideração que estamos utilizando chaves criptografadas em 1024 bits.
Espero que para aqueles que não possuíam familiaridade com ftps sobre a plataforma Linux consigam com esse tutorial utilizar o proftpd sem maiores problemas.

Abraço a todos.
Irineu Teza Nunes.


REFERÊNCIAS

MORIMOTO, Carlos. Instalando um servidor ftp. Disponível em: < http://www.hardware.co m.br/livros/servidores-linux/instalando-servidor-ftp.html > Acesso em: 08 de ago. 2011.

RIBEIRO, Pinguim. Proftpd + tls/ssl. Disponível em: Acesso em: 07 ago. 2011.

RIBEIRO, Pinguim. Certificados ssl auto-assinados. Disponível em: < http://pinguimribeiro.wikidot.com/ssl-cert-self > Acesso em: 07 ago. 2011.

LIST, of raw command. Disponível em: < http://www.nsftools.com/tips/RawFTP.htm > Acesso em 08 ago. 2011.

FILE, transference protocol. Disponível em: < http://en.wikipedia.org/wiki/File_Transfer_Protocol > Acesso em: 08 ago. 2011.

sexta-feira, 12 de agosto de 2011

FTP Seguro com Proftpd + SSL tutorial rápido e prático (Parte1)

INTRODUÇÃO

O ftp é um dos serviços mais antigos e utilizados na internet para troca de arquivos entre servidores e clientes. Devido ao fato de ter sido projetado inicialmente apenas como uma maneira fácil de disponibilizar os arquivos online, não utilizava a transferência segura criada mais tarde com o nome de FTPS (não confundir com SFTP que utiliza o protocolo ssh). O FTPS nada mais é que um FTP que utiliza a transferência de arquivos entre o cliente e servidor de forma criptografada dificultando e impedindo a coleta de dados como senha e nome de usuários com programas sniffers. Apesar de o FTP sem transferência segura ser muito utilizado, as vezes torna-se necessário a implantação do FTPs em empresas que precisam de sigilos entre as informações e dados trocados via ftp.

Neste tutorial estaremos abordando uma forma simples de utilizar o servidor Proftpd tanto como um ftp normal ou implementando a transferência segura através de chaves SSL.


O QUE FOI UTILIZADO

Para esse tutorial foram utilizados o Ubuntu Server 11.04 rodando o servidor Proftpd e para os clientes o Filezilla e o Ftp-ssh (este ultimo é um cliente ftp seguro por linha de comando para Linux). Apesar de ter sido utilizado o Ubuntu Server nesse tutorial, o servidor Proftpd pode ser utilizado praticamente em qualquer distribuição Linux, sendo que na maioria das vezes ele já vem pré instalado na distribuição.


INSTALANDO E CONFIGURANDO O SERVIDOR PROFTPD

Para instalar o Proftpd como root execute o comando:

#apt-get install proftpd

Nas perguntas feitas pelo configurador mantenha as respostas padrões.

Renomei o arquivo /etc/proftpd/proftpd.conf para /etc/proftpd/proftpd.conf.backup

#mv /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.backup


Cria um novo arquivo proftpd.conf:

#mcedit /etc/proftpd/proftpd.conf

Digite o seguinte conteúdo no arquivo criado:


#Carrega módulos adicionais do proftpd
LoadModule mod_ctrls_admin.c
LoadModule mod_tls.c
LoadModule mod_radius.c
LoadModule mod_quotatab.c
LoadModule mod_quotatab_file.c
LoadModule mod_quotatab_radius.c
LoadModule mod_wrap.c
LoadModule mod_rewrite.c
LoadModule mod_load.c
LoadModule mod_ban.c
LoadModule mod_wrap2.c
LoadModule mod_wrap2_file.c
LoadModule mod_dynmasq.c
LoadModule mod_vroot.c
LoadModule mod_exec.c
LoadModule mod_shaper.c
LoadModule mod_ratio.c
LoadModule mod_site_misc.c
#LoadModule mod_sftp.c
#LoadModule mod_sftp_pam.c
LoadModule mod_facl.c
LoadModule mod_unique_id.c
LoadModule mod_ifsession.c

#Configuracao principal do servidor
ServerType standalone
DefaultServer on
Umask 022
ServerName "
ITN SERVER FTP"
ServerIdent on "Bem vindo ao ITN Server FTP"
ServerAdmin itn@localhost
IdentLookups off
UseReverseDNS off
Port 21
PassivePorts 60000 62000
DefaultRoot ~
TimesGMT off
MaxInstances 30
MaxLoginAttempts 3
TimeoutLogin 300
TimeoutNoTransfer 120
TimeoutIdle 120
DisplayLogin welcome.msg
DisplayChdir .message
User nobody
Group nobody
DirFakeUser off nobody
DirFakeGroup off nobody
DefaultTransferMode binary
AllowForeignAddress off
AllowRetrieveRestart on
AllowStoreRestart on
DeleteAbortedStores off
TransferRate RETR 220
TransferRate STOR 250
TransferRate STOU 250
TransferRate APPE 250
SystemLog /var/log/secure
RequireValidShell off

#Para utilizacao de certificados SSL/TLS
#<IfModule mod_tls.c>
#TLSEngine on
#TLSRequired on
#TLSVerifyClient off
#TLSProtocol SSLv23
#TLSLog /var/log/proftpd_tls.log
#TLSRSACertificateFile /etc/proftpd/certs/server.crt
#TLSRSACertificateKeyfile /etc/proftpd/certs/server.key.insecure
#TLSRenegotiate required off
#</IfModule>


<IfModule mod_ratio.c>

Ratios off

SaveRatios off

RatioFile "/restricted/proftpd_ratios"

RatioTempFile "/restricted/proftpd_ratios_temp"

CwdRatioMsg "Please upload first!"

FileRatioErrMsg "FileRatio limit exceeded, upload something first..."

ByteRatioErrMsg "ByteRatio limit exceeded, upload something first..."

LeechRatioMsg "Your ratio is unlimited."

</IfModule>

#Apenas se o usuario for acessar seu home via ftp
<Limit LOGIN>
#AllowUser usuarioComHome1
#AllowUser usuarioComHome2
#AllowUser usuarioComHome3
DenyALL

</Limit>

<Anonymous /ftp/anonimo>
User anonymous
Group ftp
AnonRequirePassword off
MaxClients 10 "The server is full, hosting %m users"
DisplayLogin welcome.msg
DisplayChdir .msg
UserRatio anonymous 0 0 0 0
<Limit LOGIN>
Allow from All
Deny from all
</Limit>
AllowOverwrite off
<Limit LIST NLST
RETR PWD XPWD SIZE STAT CWD XCWD CDUP XCUP>
AllowAll
</Limit>
<Limit STOR STOU APPE RNFR RNTO DELE MKD XMKD SITE_MKDIR RMD XRMD SITE_RMDIR SITE SITE_CHMOD SITE_CHGRP MTDM>
DenyAll
</Limit>
</Anonymous>

<Anonymous /ftp/suporte>
User suporte
Group ftp
AnonRequirePassword on
MaxClients 10 "The server is full, hosting %m users"
DisplayLogin welcome.msg
DisplayChdir .msg
UserRatio suporte 0 0 0 0
<Limit LOGIN>
Allow from All
Deny from all
</Limit>
AllowOverwrite off
<Limit LIST NLST RETR PWD XPWD SIZE STAT CWD XCWD CDUP XCUP>
AllowAll
</Limit>
<Limit STOR STOU APPE RNFR RNTO DELE MKD XMKD SITE_MKDIR RMD XRMD SITE_RMDIR SITE SITE_CHMOD SITE_CHGRP MTDM>
DenyAll
</Limit>
</Anonymous>


<Anonymous /ftp>

User itn2

Group
ftp
AnonRequirePassword on

MaxClients 10 "The server is full, hosting %m users"

DisplayLogin welcome.msg

DisplayChdir .msg

UserRatio itn 0 0 0 0

<Limit LOGIN>

Allow from All

Deny from all

</Limit>

AllowOverwrite on

<Limit LIST NLST STOR STOU APPE RETR RNFR RNTO DELE MKD XMKD SITE_MKDIR RMD XRMD SITE_RMDIR SITE SITE_CHMOD SITE_CHGRP MTDM PWD XPWD SIZE STAT CWD XCWD CDUP XCUP>

AllowAll

</Limit>

<Limit NOTHING>

DenyAll

</Limit>

</Anonymous>


Calma a configuração não é tão complicada quanto possa parecer de início :D.

Vejamos as linhas principais:

ServerType standalone

Modo como o servidor irá se comportar (standalone ou inetd). Segundo Morimoto (2010) O standalone é mais seguro e mais rápido, enquanto o inetd faz com que ele fique ativo apenas quando acessado, economizando cerca de 400 KB de memória RAM (que fazem pouca diferença hoje em dia).

MaxInstances 30
Diz respeito ao número de conexões simultâneas que serão aceitas pelo servidor.

ServerName "ITN SERVER FTP"
Nome do servidor FTP que será apresentado aos clientes ao se conectarem.


ServerAdmin itn@localhost
Email do administrador do sistema.

Port 21
Porta que será utilizada para escuta das conexões (padrão do FTP é 21).

PassivePorts 60000 62000
Configuração das portas utilizadas pelo ftp passivo (devem estar abertas no firewall).

DefaultRoot ~
Opção importante de segurança que restringe os usuários ao acesso ao seu próprio home.

ServerIdent on "Bem vindo ao ITN Server FTP"
Configuração da mensagem que será mostrada aos clientes ao se conectarem.


User nobody

Group nobody

Com essas duas linhas definimos que as instâncias do servidor Proftpd serão executar com privilégios restritos impedindo um comprometimento do sistema caso seja detectada uma falha grave.

#LoadModule mod_sftp_pam.c
#LoadModule mod_sftp.c
Carrega módulos necessários para ativar o SFTP.

#Para utilizacao de certificados SSL/TLS
#< IfModule mod_tls.c >
#TLSEngine on
#TLSRequired on
#TLSVerifyClient off
#TLSProtocol SSLv23
#TLSLog /var/log/proftpd_tls.log
#TLSRSACertificateFile /etc/proftpd/certs/server.crt
#TLSRSACertificateKeyfile /etc/proftpd/certs/server.key.insecure
#TLSRenegotiate required off
#< /IfModule >

Essas linhas serão utilizadas quando configuramos o FTP para transferência segura. Para um FTP normal mantenha essas linhas comentadas.

#Apenas se o usuario for acessar seu home via ftp
< Limit LOGIN >
#AllowUser usuarioComHome1
#AllowUser usuarioComHome2
#AllowUser usuarioComHome3
DenyALL

< /Limit >

Caso você queira que um usuário possa acessar sua pasta home via FTP inclua aqui AllowUser “nomeDoUsuario” nesta tag.

Na tag:

< Anonymous /ftp/anonimo >

Definimos as pastas efetivamente compartilhadas pelo ftp e dentro delas quem tem permissão de acessar ou não as pastas bem como o que pode ser feito ou não dentro da pasta. No exemplo de configuração a pasta /ftp/anonimo pode ser acessado por login anônimos (mas apenas para downloads). Isso é definido pelas linhas:
User anonymous

Group ftp

AnonRequirePassword off

A principal diferença da tag:
< Anonymous /ftp/anonimo >

Para as tags:
< Anonymous /ftp/suporte >
< Anonymous /ftp >

é que nessas duas últimas é necessário que o usuário entre com a senha para autenticação no servidor. Isso é definido pela opção:
AnonRequirePassword on

Com a linha abaixo definimos os comandos que o usuário anônimo pode executar. Entre eles o download de arquivos:
< Limit LIST NLST RETR PWD XPWD SIZE STAT CWD XCWD CDUP XCUP >
AllowAll
< /Limit >


Já com a linha abaixo definimos os comandos que o usuário anônimo pode não pode executar. Entre apagar arquivos, criar pastas, e executar uploads:
< Limit STOR STOU APPE RNFR RNTO DELE MKD XMKD SITE_MKDIR RMD XRMD SITE_RMDIR SITE SITE_CHMOD SITE_CHGRP MTDM >
DenyAll
< /Limit >

Veja ao final desse artigo uma lista de alguns dos comandos FTP utilizados nesse artigo.

De maneira resumida com esse exemplo de arquivo de configuração, o usuário anonymous pode apenas executar download da pasta /ftp/anonimo. O usuário suporte pode executar download da pasta /ftp/suporte. Já o usuário itn2 tem permissão completa (upload, downloads, renomear ou remover arquivos, etc), seria como um administrador do ftp, que pode acessar a raiz /ftp e fazer as modificações necessárias.


CRIANDO AS PASTAS, GRUPO E USUÁRIOS PARA O USO DO FTP.

Precisamos criar o grupo ftp e os usuários que fazem parte desse grupo para que acessem o FTP. No entanto esses usuários não devem ter permissão para logarem no servidor como usuários comuns. Para tanto execute seguintes comandos:

Cria o grupo ftp
# addgroup ftp

Cria os usuários sem pasta home e com shell desativado:

# adduser itn2 --shell /bin/false --no-create-home
#
adduser suporte --shell /bin/false --no-create-home
#
adduser anonymous --shell /bin/false –no-create-home

Adiciona os usuário ao grupo ftp

# adduser itn2 ftp
# adduser suporte ftp
# adduser anonymous ftp

Agora vamos criar as pastas raiz do ftp, do usuário anonymous e do suporte definidos nas tags correspondentes no arquivo de configuração:

# mkdir /ftp
# mkdir /ftp/anonimo
# mkdir /ftp/suporte

Vamos ajustar a permissão das pastas:

Define o grupo ftp como dono do diretório /ftp e todos seus subdiretórios (opção -R)

# chown -R ftp.ftp /ftp

Define permissão total para o grupo ftp do diretório /ftp e todos seus subdiretórios (opção -R)

# chmod 575 -R /ftp

Basta agora liberamos as portas 21 bem como as portas 60000 ao 62000 no firewall. Se você utiliza o Iptables adicione as seguintes linhas no seu script:

iptables –A INPUT –p tcp --dport 21 –j ACCEPT
iptables –A INPUT –p tcp --dport 60000:62000 –j ACCEPT


Reinicie o servidor proftpd:
#/etc/init.d/proftpd restart

Caso você receba um erro de grupo nobody não encontrado, ao iniciar o servidor proftpd crie o grupo nobody com o comando abaixo e torne a reiniciar o proftpd:
# addgroup nobody
#/etc/init.d/proftpd restart

COMANDOS FTP PADRONIZADOS

Os comandos abaixo dizem respeito a comandos FTP padronizados pela RFC 959, os quais irão aparecer nas tags do nosso arquivo de configuração. Você pode achar estanho a ausência na lista de comandos como get por exemplo, isso irá acontecer porque o get é considerado um comando de usuário utilizado pelas aplicações ftp que indicam a requisição do download de um arquivo do servidor, no entanto o comando get é representado dentro da padronização pelo retr.
Vejamos abaixo alguns comandos que podem ser adicionados nas tags afim de permitir ou negar que determinado usuário execute determinada ação:

list Permite que o usuário liste os arquivos dos diretórios.

nlst Lista o nome dos diretórios.

retr Executa o download de um arquivo.

pwd Mostra o diretório atual.

size Permite o retorno do tamanho de um arquivo em decimal.

stat Retorna informações sobre o servidor.

cwd Permite definir o diretório inicial no ato da conexão.

cdup Marca o diretório acessado como diretório raiz para os demais.

stor, stou Permitem iniciar o upload de arquivos.

appe Utilizado para acrescentar informações ao final de um arquivo.

rnfr, rnto Utilizados para renomear arquivos.

dele Utilizado para exclusão de arquivos.

mkd Utilizado para criar diretórios.


CONCLUSÃO

Com a parte 1 desse tutorial nosso servidor FTP já está no ar e pronto para ser utilizado, podendo ser acessado normalmente por qualquer cliente FTP (mesmo que não possua suporte a conexão segura SSL como o Firezilla ou o Ftp-ssl, isto porque iremos implementar a transferência segura SSL na parte 2.

Não percam a continuação…

Link Parte 2

REFERÊNCIAS

FILE, transference protocol. Disponível em: < http://en.wikipedia.org/wiki/File_Transfer_Protocol > Acesso em: 08 ago. 2011.

MORIMOTO, Carlos. Instalando um servidor ftp. Disponível em: < http://www.hardware.co m.br/livros/servidores-linux/instalando-servidor-ftp.html > Acesso em: 08 de ago. 2011.

RIBEIRO, Pinguim. Proftpd + tls/ssl. Disponível em:< http://pinguimribeiro.wikidot.com/proftpd-tls-ssl > Acesso em: 07 ago. 2011.

RIBEIRO, Pinguim. Certificados ssl auto-assinados. Disponível em: < http://pinguimribeiro.wikidot.com/ssl-cert-self > Acesso em: 07 ago. 2011.

LIST, of raw command. Disponível em: < http://www.nsftools.com/tips/RawFTP.htm > Acesso em 08 ago. 2011.


sábado, 30 de julho de 2011

Port knocking + Iptables fechando portas abertas a internet

Introdução.

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 porta 3389 (“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 linha command = /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.18 do 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%\system32\mstsc.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

Conclusão


Esse tutorial foi uma pequena demonstração do uso prático de um Port knocking, sendo que o limite para o seu uso é a imaginação. Concluímos também que com esse pequeno guia podemos dormir mais tranqüilos sabendo que a “temida” porta 3389 está fechada dando um pouco mais de dor de cabeça ao Scripts, Hacker ou curiosos de plantão .

Referências

KNOCKD, a port-knocking server. Disponível em: Acesso em: 29 jul. 2011.