11.03  
Inicio arrow Artigos arrow Knock: "O poderoso abre/fecha porta".
Principal
Inicio
Noticias
Artigos
Regras da Lista
Assinar a Lista
Histórico da Lista
PC-BSD: Artigos
PC-BSD: Notícias
Galeria de Imagens
Contador Usuários FUG
FUGs Estaduais
Downloads
Enquetes
FAQ
Resumo do Site
Links
Pesquisar
Contato
Sobre a FUG-BR
RSS / Twitter
-
DOC-BR (FUG BR)
Introdução
Projeto DOC-BR
Handbook
FAQ Oficial
-
+ Noticias
Alertas de Seguranca
Alertas em Ports
BSD em Geral
DaemonNews (Ingles)
MyFreeBSD
Todas Categorias
-
Login
Nome de Usuário

Senha

Lembrar login
Esqueceu sua senha?
Sem conta? Crie uma
Histórico da Lista
  • [FUG-BR] [OFF] Tempo para migração
  • Re: [FUG-BR] [OFF] Tempo para migração
  • [FUG-BR] Cacti + Altq
  • Re: [FUG-BR] Cacti + Altq
  • Re: [FUG-BR] Cacti + Altq
  • Re: [FUG-BR] Cacti + Altq
  • [FUG-BR] FreeBSD na routerboard com arquitetura PowerPC
  • Re: [FUG-BR] FreeBSD na routerboard com arquitetura PowerPC

  • Alertas em Ports
  • drupal -- multiple vulnerabilities



  • Knock: "O poderoso abre/fecha porta". PDF Imprimir E-mail
    Por Giancarlo Rubio   
    17/10/2006
    El Gran BeastieNesse artigo vamos conhecer o knock, daemon que permite que portas sejam abertas ou fechadas por demanda, dependendo "de quem bate à porta", ou seja de acordo com o IP originando a requisição. Esse artigo trata de um exemplo prático, simples e claro do funcionamento do knock. Este título foi o que chegou mais perto para a definição da função do Knock.

    O que é Knock?

    Knock é um poderoso daemon, que gerencia a abertura/fechamento das portas de um determinado computador a apenas os usuários que obtiverem a permissão ou conhecerem.

    Como funciona?

    O cliente envia requisições (bate) a uma série de portas predefinidas e a abre a porta desejada. No nosso caso a porta 22 do ssh será aberta.
     
    Requisitos prévios para nossos exercícios são algum conhecimento básico em:

    • ipfw
    • ports

    Instalando Knock

    Sempre é recomendável atualizar a árvore dos ports para a instalação de qualquer aplicação.

    Para aqueles que ainda não usam portsnap vamos baixar e extrair

    #portsnap fetch extract

    Atualizando o ports

    #portsnap fetch update

    Instalando o Knock

    #cd /usr/ports/security/knock
    make install clean


    São mostradas as seguintes opções:

    •     Cliente, aquele que faz a requisição remota para abertura das portas;
    •     Servidor, aquele responsável por abrir a porta.

    O cliente não é tão necessário, mais tarde explico porque, mas o servidor é obrigatório para o desenrolar do artigo.

    O arquivo padrão está em /usr/local/etc/knockd.conf.sample

    Copiamos para o nome certo, sem .sample


    #cp /usr/local/etc/knockd.conf.sample /usr/local/etc/knockd.conf

    Vamos ao arquivo de configuração, com meus comentários

    #vi /usr/local/etc/knockd.conf

    [options]
            logfile = /var/log/knockd.log     # Local que serão registrados os logs de abertura de portas
            interface = fxp0        #Interface que vai ouvir, normalmente a internet
    #Abre o ssh
    [openSSH]
            sequence    = 7000,8000,9000    #Sequencia de portas que o cliente deve "bater" para logar
            seq_timeout = 5            #Intervalo de tempo (milisegundos) para uma requisição entre portas
            command     = /sbin/ipfw -q add pass proto tcp src-ip %IP% dst-port 22    #Regra a ser adicionada no firewall
            tcpflags    = syn        #Podem ser usados as seguintes opções:syn,fin,ack e !ack,!syn,!fin
    #Fecha o Ssh
    [closeSSH]
            sequence    = 9000,8000,7000   
            seq_timeout = 5
            command     = /sbin/ipfw -q delete pass proto tcp src-ip %IP% dst-port 22
            tcpflags    = syn


    Iniciando o daemon

    #/usr/local/etc/rd.d/knockd start

    Não sei porque o meu não iniciou assim, mais em todo caso iniciei na mão(-d daemon, -v verbose

    #knockd -dv

    Vamos ao funcionamento
    Primeiro bloquei o ssh na sua máquina


    su-2.05b# ipfw show
    00100   0     0 deny ip from any to me dst-port 22
    65535     0     0 allow ip from any to any
    su-2.05b#


    De fora da minha rede fiz um portscan, para ver as portas abertas usando o nmap (/usr/ports/security/nmap)

    su-2.05b# nmap -sS 201.21.140.208

    Starting Nmap 4.01 ( http://www.insecure.org/nmap/ ) at 2006-10-17 21:45 BRT
    Interesting ports on virtua-cwbas128-208.ctb.virtua.com.br (201.21.140.208):
    (The 1661 ports scanned but not shown below are in state: closed)
    PORT    STATE    SERVICE
    21/tcp  filtered ftp
    22/tcp  filtered ssh
    25/tcp  filtered smtp
    80/tcp  filtered http
    135/tcp filtered msrpc
    136/tcp filtered profile
    137/tcp filtered netbios-ns
    138/tcp filtered netbios-dgm
    139/tcp filtered netbios-ssn
    445/tcp filtered microsoft-ds
    587/tcp open     submission

    Nmap finished: 1 IP address (1 host up) scanned in 41.260 seconds
    su-2.05b#


    A porta está fechada ok?

    Vamo abri-la

    Existem 2 formas (De fora da rede)


    1- Usando o knock cliente

    #knock 201.21.140.208 7000 8000 9000

    2-Usando telnet, atente para o fato de serem regras simlultaneas, pois definimos o tempo em 5 milisegundos

    #telnet 201.21.140.208 7000;telnet 201.21.140.208 8000;telnet 201.21.140.208 9000

    Nosso /var/log/knockd.log

    [2006-10-17 21:49] 200.0.0.0: openSSH: Stage 1
    [2006-10-17 21:49] 200.0.0.0: openSSH: Stage 2
    [2006-10-17 21:49] 200.0.0.0: openSSH: Stage 3
    [2006-10-17 21:49] 200.0.0.0: openSSH: OPEN SESAME
    [2006-10-17 21:49] openSSH: running command: /sbin/ipfw -q add pass proto tcp src-ip 200.0.0.0 dst-port 22

    meu ipfw


    su-2.05b# ipfw show
    00100    4    176 deny ip from any to me dst-port 22
    65100    0      0 allow ip from any to any proto tcp src-ip 200.0.0.0 dst-port 22
    65000 6488 310002 allow ip from any to any
    su-2.05b#


    Pronto agora a porta esta aberta. Ele adicionou a regra 65100 com o ip da maquina cliente. Use a vontade a aplicação até necessitar que seja fechada a porta [closeSSH].


    1- Usando o knock cliente

    #knock 201.21.140.208 9000 8000 7000

    2-Usando telnet, atente para o fato de serem regras simlultaneas, pois definimos o tempo em 5 milisegundos

    #telnet 201.21.140.208 9000;telnet 201.21.140.208 8000;telnet 201.21.140.208 7000

    Vamos verificar

    su-2.05b# nmap -sS 201.21.140.208

    Starting Nmap 4.01 ( http://www.insecure.org/nmap/ ) at 2006-10-17 22:03 BRT
    Interesting ports on virtua-cwbas128-208.ctb.virtua.com.br (201.21.140.208):
    (The 1661 ports scanned but not shown below are in state: closed)
    PORT    STATE    SERVICE
    21/tcp  filtered ftp
    22/tcp  filtered ssh
    25/tcp  filtered smtp
    80/tcp  filtered http
    135/tcp filtered msrpc
    136/tcp filtered profile
    137/tcp filtered netbios-ns
    138/tcp filtered netbios-dgm
    139/tcp filtered netbios-ssn
    445/tcp filtered microsoft-ds
    587/tcp open     submission

    Nmap finished: 1 IP address (1 host up) scanned in 20.377 seconds
    su-2.05b#


    Porta fechada!!!!!

    Simples não??

    Resalvas:

    1. Nunca se sabe até aonde uma aplicação dessas deve gerenciar regras no firewall, lembre-se que ele executa como root, logo você é responsável pelo que faz.
    2. Evite usar essas portas default, coloque qualquer coisa diferente disso, ja existem scanner que varrem estas portas.

    Comentários
    Por Ari Arantes em 23/10/2006 18:50:31
    Será que conseguiu acessar de fora? 
     
    00100 4 176 deny ip from any to me dst-port 22 
    65100 0 0 allow ip from any to any proto tcp src-ip 200.0.0.0 dst-port 22 
     
    O deny all não deveria estar depois da regra 65100?
    Por gianrubio em 30/10/2006 10:50:05
    2 opcoes 
     
    1- Coloque sua regra deny como a ultima do firewall 
    ipfw add 65135 deny all from any to me dst-port 22 
     
    2-Altere seu knock.conf colocando o numero da regra antes do seu deny, digamos que seu deny seja no. 300 coloque assim 
    command = /sbin/ipfw -q add 299 pass proto tcp src-ip %IP% dst-port 22 #Regra a ser adicionada no firewall
    Por Anderson em 21/11/2006 01:36:01
    Porque o Virtua tenta acessar essa porta? Devo bloquear?
    Por gianrubio em 22/11/2006 16:48:34
    Pq eu fiz um portscan aqui de casa e eu uso virtua saco?
    Knock vs PF
    Por marcfee em 07/04/2008 16:53:05
    Boa tarde Giancarlo! 
     
    Sabe me responder se o "Knock" trabalha com o PF? 
     
    Grato.
    Porque o script de start não funcionou
    Por Geovane Gonçalves em 16/09/2008 10:28:51
    Na linha abaixo do script de inicialização (knockd.sh) abaixo, o default é "NO", troque por YES como no exemplo abaixo:  
     
    knockd_enable=${knockd_enable:-"YES"} 
     
    Gostei da dica e resolvi fazer uma pequena contribuição. 
    Até mais


    Comente!*
    Nome:
    E-mail
    Homepage
    Título:
    Comentário:

    Código:* Code

    Última Atualização ( 18/10/2006 )
     
    < Anterior   Próximo >
    FUG-BR - Espalhando BSD
    Dicas Rápidas:

    Para remover os caracteres ^M de um arquivo de texto de MS-DOS (e Windows), use o tr(1):

    tr -d \\r < arquivo_dos > arquivo_unix

     

     

     






    Wallpapers
    Sua Opiniao
    Online:
    Nós temos 30 visitantes online


    Devil Store - Sua loja BSD
    FreeBSD Brasil LTDA

    FUG-BR: Desde 1999, espalhando BSD pelo Brasil.