Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Virtualização XEN

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Knocking on servers doors

Colaboração: Fabio Maximo

Data de Publicação: 13 de Setembro de 2006

Essa dica é muito legal para quem tem servidores remotos e preocupa-se com segurança no SSH. Voce pode fechar todo fluxo na porta 22 e so voce abre quando precisa.

O knock é um daemon que atenta para o que ocorre em certas portas no servidor. Quando alguem "bate" nas portas certas e na ordem certa, um determinado comando é executado.

Importante notar que as portas não estão abertas. O Deamon checa isso a nivel de kernel, portanto um port scan não detecta diferença nenhuma entre uma porta que sera knockada e uma outra qualquer.

Uma vez que o knock tenha sido realizado corretamente, o comando padrao é liberar acesso ssh para o IP que knockou o servidor.

Poder ser adicionados outros comandos e combinacoes de porta.

Obter o programa

  $ wget "http://www.zeroflux.org/knock/files/knock-0.5.tar.gz"

Descompactar

  $ tar -xvzf knock-0.5.tar.gz

instalar

  $ cd knock-0.5
  $ ./configure
  $  make
  $  make install

Configurar

  $ vi /etc/knockd.conf

Ainda configuracao

  $  cd /etc/init.d/

O Seguinte script para inicialização foi escrito por Marcio Andréeta - utilizar mas manter a nota de autoria.

  $  vi knockd
  ============================INICIO DO SCRIPT==========================
  #!/bin/sh
  # Script written by Marcio Luis Barsi Andréeta 04/07/2005
  #
  # This script starts/stops knockd
  # normal UNIX system operation
  #
  # This file is installed as:
  #     /etc/rc.d/init.d/knockd
  EXECUTABLE=/usr/local/sbin/knockd
  # error "description"
  error () {
  /bin/echo $0: $* 2>&1
  exit 1
  }
  # find the named process(es)
  findproc() {
  pid=`/bin/ps auxww |
  /bin/grep root |
  /bin/grep -e "$1\$" |
  /bin/grep -v grep |
  /bin/awk '{print $2}'`
  /bin/echo $pid
  }
  # for testing purposes only
  testproc() {
  pid=`/bin/ps auxww |
  /bin/grep root |
  /bin/grep -e "$1\$" |
  /bin/grep -v grep |
  /bin/awk '{print $2}'`
  /bin/echo $pid
  }
  # kill the named process(es)
  killproc() {
  pid=`findproc "$1"`
  [ "$pid" != "" ] && kill -TERM $pid
  }
  # kill the named process(es)
  forcedkillproc() {
  pid=`findproc "$1"`
  [ "$pid" != "" ] && kill -9 $pid
  }
  # Start/stop knockd
  case "$1" in
  'start')
  /bin/echo -n "Starting knockd..."
  # Check if the server is already running.
  if [ -n "`findproc "$EXECUTABLE"`" ]; then
  /bin/echo "knockd deamon is running."
  exit 0
  fi
  $EXECUTABLE &
  /bin/echo "done"
  ;;
  'stop')
  /bin/echo -n "Stopping knockd..."
  echo `findproc $EXECUTABLE`
  if [ -z "`findproc "$EXECUTABLE"`" ]; then
  /bin/echo "not running."
  exit 0
  fi
  killproc "$EXECUTABLE"
  /bin/echo "done"
  ;;
  *)
  /bin/echo "Usage: $0 { start | stop }"
  # for testing testing functions
  echo "`testproc "$EXECUTABLE"`"
  ;;
  esac
  ============================FIM DO SCRIPT==========================
  
  Startar o serviço no RedHat / Fedora
  
  ``` $  service knockd start
  
  Em outras distros
  
  ``` $ /etc/init.d/knockd start
  
  Para que o mesmo starte no boot da maquina vamos adicionar um link no Run
  Level 3 - Isso pode mudar de acordo com a distro.

$ cd /etc/rc3.d/ $ ln -s /etc/init.d/knockd S99knockd

  
  Abaixo esta o conteudo do /etc/knockd.conf - Repare que o mesmo é muito
  simples, dando opcao de configuracao do arquivo de log e os comandos abaixo
  com as sequiencias de portas na opcao sequence.
  
  
  ==Conteudo do /etc/knockd.conf==
  

[options] logfile = /var/log/knockd.log

[openSSH] sequence = 7000,8000,9000 seq_timeout = 5 command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn

[closeSSH] sequence = 9000,8000,7000 seq_timeout = 5 command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn

  
  Interessante que se voce quiser montar uma sequencia para outro comando voce
  pode. Mas se voce tem shell, pra que mais?
  
  Em todo caso poderiamos acrescentar:

[wall] sequence = 7001,8001,9001 seq_timeout = 5 command = /usr/bin/wall "TESTE OK" tcpflags = syn

  
  Bem, mas como vamos bater nessa porta??
  
  Simples:
  
  De sua estação use o comando knock seguindo a sintaxe / exemplo abaixo:

knock [ip] [portas] $ knock 192.168.0.90 7001 8001 9001

  Para os que usam estação Windows, ha um "batedor" para windows,
  e a sintaxe é a mesma. Da para baixar do seguinte link:
  http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki

Veja a relação completa dos artigos de Fabio Maximo

Stumble Upon Digg This Del.icio.us Twitter Recomendar este artigo a um amigo Entre em contato Formato PDF
Newsfeed RSS
Formato para impressão
StumbleUpon Digg Del.icio.us Twitter Recomendar Contato PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 3.02/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (868 votos)

Opinião dos Leitores

Andre
13 Mar 2009, 12:40
Para funcionar o knock no windows com o telnet, basta aumentar um pouco o tempo para o knock e adicionar 3 batidas em cada porta, pois o telnet tenta 3 vezes (ao menos no meu caso foi assim).
Para ter certeza, basta utilizar um sniffer e dar uma olhada.
Diego Rocha
26 Abr 2007, 16:58
Fou tudo em ordem quando usei o programa para knockar as portas. Sempre executo umas 2 ou 3 vezes para dar certo.
Com telnet não rolou. Acho que tem um tempo certo entre uma e outra para ele identificar.

Knockei tanto apartir do Linux como do Windows e deu certo. Muito bom.
Gilson Beckman
01 Fev 2007, 11:52
Gostaria de uma ajuda, eu instalei o knockd e está tudo otimo, funcionando perfeitamente, alterando firewall e etc...

O problema é quando uso o TELNET do windows para fazer o knock. eu percebi que o telnet faz 2 "knocks" para um unico comando, e com isso ele falha depois do segundo "stage". O lok do knockd registra sempre 2x o stage 1. Imagino que o stage 2 tb seja registrado 2x gerando a falha na sequencia.
Jairo Willian
16 Set 2006, 00:19
Dica de Seguranca: so nao utilizem as portas padroes como no exemplo. Ja existem exploits que testam algumas combinacoes bem utilizadas.
Ivan Apolonio
13 Set 2006, 20:24
Um "batedor" de portas simples pode ser o próprio comando telnet. No exemplo das portas 9000,8000,7000 bastaria dar 3 comandos de telnet nas respectivas portas:

telnet 192.168.0.90 9000
telnet 192.168.0.90 8000
telnet 192.168.0.90 7000
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Faça o download gratuito da 10ª Edição da Broffice.ORG Zine
Submarino.com.br
DVDs - Submarino.com.br