Knock adiciona uma camada simples e eficaz pra acesso via SSH. Normalmente você deixa a porta do SSH aberta pra conseguir acesso remoto, entretanto recebe inúmeras tentativas de invasão. O knock elimina a necessidade de portas abertas no firewall e só abre se você bater antes numa sequência pré-definida de portas.
Este serviço adiciona uma camada de segurança aos acessos via ssh, ele funciona da seguinte maneira: suponha que seu SSH esteja rodando na porta padrão "22", você como administrador pra ter acesso geralmente a deixa aberta, senão nem você acessa. ; )
Veja um log de tentativas de invasão nesta porta:
# tail -f /var/log/auth.log | grep Failed
Failed none for invalid user alexandre from 192.168.0.144 port 3561 ssh2
Failed keyboard-interactive/pam for invalid user alexandre from 192.168.0.144 port 3561 ssh2
Failed keyboard-interactive/pam for invalid user alexandre from 192.168.0.144 port 3561 ssh2
Failed keyboard-interactive/pam for invalid user alexandre from 192.168.0.144 port 3561 ssh2
Failed password for invalid user alexandre from 192.168.0.144 port 3561 ssh2
Failed none for invalid user fabiana from 192.168.0.144 port 3562 ssh2
Failed keyboard-interactive/pam for invalid user fabiana from 192.168.0.144 port 3562 ssh2
Failed keyboard-interactive/pam for invalid user fabiana from 192.168.0.144 port 3562 ssh2
Failed none for invalid user matrix from 192.168.0.144 port 3563 ssh2
Failed keyboard-interactive/pam for invalid user matrix from 192.168.0.144 port 3563 ssh2
Failed none for invalid user lavoisier from 192.168.0.144 port 3691 ssh2
Failed keyboard-interactive/pam for invalid user lavoisier from 192.168.0.144 port 3691 ssh2
Failed keyboard-interactive/pam for invalid user lavoisier from 192.168.0.144 port 3691 ssh2
Uma hora os cretinos, com testes de força bruta, acertam um usuário, daí mais um servidor invadido para as estatísticas.
Você sabe que se deixar a porta fechada com iptables seria o ideal, entretanto nem você acessaria, o knock abre a porta no firewall pra você, mas se antes você bater numa sequência de portas, exemplo:
Seu SSH está na porta 22, fechada com iptables, então para ser aberta você deve bater em outras 3 portas para o knock abrir a 22 somente para o seu ip.
Vamos para parte prática pra finalizar o entendimento e por pra rodar o knock. ; )
Descompacte em qualquer pasta do windows , e pelo prompt do Windows (execute cmd), vá para a pasta descompactada , onde está o executável knock .agora apenas execute como vc faria no Linux.
[5] Comentário enviado por agk em 02/02/2008 - 00:16h
Interessante, parabéns!
Não monitorei pra ter certeza, mas o kockd deve ser acionado quando encontra pacotes com a flag SYN/ACK, acho que se usar o telnet do Windows pra bater nas porta também deve funcionar.
[6] Comentário enviado por jotahreggae em 03/02/2008 - 08:30h
Uma certa vez eu vi um artigo parecedi, mas nao lembrava como o autor tinha implementado essa solucao.
Porem, eu me lembro dele nao usar um programa para abrir as portas, e sim executar, ou um telnet, ou uma requisicao ssh mesmo nas portas para elas se abrirem. Sabe se tem outro modo para executar. Por exemplo.
Tenho meu servidor bloqueado com o knock...preciso acessa-lo de casa..instalo o knock....preciso acessa-lo do servico.....instalo o knock....e se estiver em outro lugar, num cliente...ai baixo o knock e executo para depois acessar...meio frustrante nesse ponto somente.
[7] Comentário enviado por cromado em 03/02/2008 - 10:32h
jotahreggae vc está certo ;) , não precisa necessariamente usar o knock pra bater nas portas , basta vc usar o telnet pra fazer isso , pois como o agk falou , o knock assim como o telnet usam pacotes SYN/ACT pra abrirem conexão.
obs:bater com o telnet do Linux funcionou , más o do Windows apenas bate em duas portas , e na 3° vez fica parado... daí configurei o knockd pra usar 2 portas apenas , e aí sim o telnet do Windows funcionou...agora por que o Windows não bate nas 3 portas eu não sei =( ??? .
[8] Comentário enviado por nazareth87 em 04/02/2008 - 15:00h
Fiz conforme o procedimento acima, mas não está conectando o usuário, no log do knockd.log informa q abriu mas não consigo conectar. (Debian Lenny AMD64)
[9] Comentário enviado por cromado em 04/02/2008 - 15:17h
nazareth87
Vai ser logado apenas o IP do usuário no knockd.log , o usuário vc pode ver no /var/log/syslog .
Agora se seu knockd logou com sucesso todas batidas e abriu a porta pro SSH conforme o log:
Então o problema é no SSH , pois o objetivo do knockd está cumprido com sucesso ;).
Vc tem o mesmo usuário criado tanto no servidor quanto no cliente?será que seu SSH não está com alguma restrição para usuário?(como por ip , password , usuario ... sei lá)
blz
[12] Comentário enviado por walber em 06/02/2008 - 10:11h
Legal o artigo, + quando adicionando a regra no iptables para fechar a porta 22 e uso knock para bater as portas e consecutivamente a porta não abre pois ficam duas regras uma drop e uma accept e sendo assim não funciona pois quando bater com knock ele deveria apagar a regra do drop e adicionar a do accept + não ele fica com as duas regras,e quando for fechar ele deverá fechar novamente a porta add dinovo a regra drop.
Como faço para resolver esse problema?
Já tentei add um novo comando no arquivo de configuração do knockd para após bater as portas e abrir ele limpar todas as regras + não funfou.
Apenas mude o "A".
O Parametro "I" coloca a regra em primeiro , permitindo o acesso SSH , com isso a saída do comando iptables , após abrir a porta ,ficaria assim:
[15] Comentário enviado por agk em 07/02/2008 - 00:02h
Pois é, não consegui fazer funcionar por telnet, mas com o knock client funciona que é uma blz e já protege um pouco contra os brute force que tem por ae.
Se você tem um firewall statefull (controla os pacotes por estado), pode fazer assim:
[opencloseSSH]
sequence = 2222:udp,3333:udp,4444:udp
seq_timeout = 15
tcpflags = syn,ack
start_command = /sbin/iptables -A INPUT -s %IP% -p tcp --syn --dport 22 -j ACCEPT
cmd_timeout = 30
stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --syn --dport 22 -j ACCEPT
Depois de colocar a sequência você tem 30 segundos para estabelecer uma conexão ssh, depois a regra é removida do iptables e novas conexões não são mais possíveis, isso é bom, pois quando você conectar remotamente com seu servidor após 30 segundos a porta ssh vai estar fechada novamente, e você vai permanecer conectado até encerre sua sessão atual.
Não precisa se preocupar em dar o comando para fechar novamente o seu firewall.