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.
Editar /etc/default/knockd e deixar as duas linhas seguintes:
START_KNOCKD=1
KNOCKD_OPTS="-i eth0"
Isto define a placa que vai aceitar conexão e manter sempre o knock rodando.
Pronto, aqui acaba a configuração do servidor, mas antes reinicie.
# /etc/init.d/knockd restart
Se não estiver fechada, então feche a porta SSH do firewall pra testar se o serviço funciona. ; )
# iptables -A INPUT -p tcp --dport 22 -j DROP
# iptables -L
DROP tcp -- anywhere anywhere tcp dpt:ssh
Tente um acesso SSH. Com a porta fechada, assim além de não conseguir o acesso remoto , ainda vai deixar o atacante travado, pois nem resposta ele vai receber, ponto pra você. : )
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.