De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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