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.
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.
$ wget "http://www.zeroflux.org/knock/files/knock-0.5.tar.gz"
$ tar -xvzf knock-0.5.tar.gz
$ cd knock-0.5 $ ./configure $ make $ make install
$ vi /etc/knockd.conf
$ 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
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários