você está aqui: Home  → Arquivo de Mensagens

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

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*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