em Sem categoria

Knocking on servers doors

Artigo retirado do site Dicas-L da unicamp

Colaboração: Fabio Maximo

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 Andreeta – utilizar mas manter a nota de autoria.

$ vi knockd
============================INICIO DO SCRIPT==========================
#!/bin/sh
# Script written by Marcio Luis Barsi Andreeta 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