iptables (iptables)

Port Knocking para acesso SSH

Categoria: Segurança

Software: iptables

[ Hits: 13.002 ]

Por: Gustavo Vasconcelos


Este arquivo (/etc/sysconfig/iptables no Fedora Core 3) bloqueia o acesso á sua máquina na rede, inclusive para SSH inicialmente. Para acessar é necessário um port knocking (bater na porta) na porta 1600 (que será descatado - DROP), que pode ser feito com um simples telnet para que a porta 22 se abra. Após a conexão via SSH outro knocking na porta 1599 ou 1601 torna a fechar (sem desconectar o cliente já logado).

Este método é ótimo para evitar port scanners (já que o método DROP evita qualquer envio de informações da máquina, ao contrário de um REJECT) e já que a porta que abrirá o SSH fica entre duas que fecham  qualquer port scan incremental/decremental vai tornar a fechar a porta após abrí-la.

(Este conf NÃO É DE MINHA AUTORIA, encontrei-o na Internet algum tempo atrás, em site que não mais recordo. Estou colocando-o aqui por ser um lugar seguro e sempre acessível a outros usuários.)


*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -s 10.0.0.0/24 -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -m recent --rcheck --name SSH -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1599 -m recent --name SSH --remove -j DROP
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1600 -m recent --name SSH --set -j DROP
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1601 -m recent --name SSH --remove -j DROP
-A RH-Firewall-1-INPUT -j DROP
COMMIT
  


Comentários
[1] Comentário enviado por isaacson em 01/05/2005 - 18:06h

é muito bom vou configurar na minha maquina para fazer os testes ok

[2] Comentário enviado por y2h4ck em 02/05/2005 - 09:54h

Caro Tango, estou tentando realizar alguns testes com essa configuraçao para
tenta coloca-la em desenvolvimento. Porem meus testes nao estão tendo muita produtividade. Sera que poderiamos conversar para que eu possa analisar algumas impressoes melhores sobre este script ?

Agradeço

[3] Comentário enviado por Tango em 02/05/2005 - 11:03h

Olá Anderson, claro que podemos. Aqui mesmo ou por algum IM de sua preferência. O email disponível no meu perfil também é meu username no MSN Messenger.

De antemão, porém, digo que não sou especialista em IPTables, e que apesar de entender seus arquivos de configuração não tenho aptidão para escrever um do zero. Como expliquei, este conf foi encontrado na iNet alguns meses atrás, e coloquei aqui por ser útil e para que nãoi "se perdesse" na rede.

[4] Comentário enviado por agk em 03/05/2005 - 21:35h

Realmente muito interessante essa dica, está de parabéns por tê-la compartilhado conosco.
Vou fazer alguns testes e se funcionar dentro do esperado vou começar a utilizar esse conceito.
Pelo parece precisa ter o módulo recent do iptables compilado.
Vlw.

[5] Comentário enviado por cvs em 06/05/2005 - 21:54h

<karnagge> isso inibe newbies que querem ser hackers
<karnagge> mais e se eu fizesse um script que fisesse assim
<karnagge> mandava um pacote e checava
<karnagge> em cada porta
<karnagge> e me desse um relatório?
<karnagge> entendeu?
<karnagge> eu mandaria na 1000 e checava todas as portas
<karnagge> ae mandaria na 1001 e checaria todas as portas
<karnagge> e ae eu tivesse esse relatorio :D
<karnagge> pronto resolvido
<karnagge> descobriria seu esquema :D
<karnagge> certo mano?

[6] Comentário enviado por Tango em 07/05/2005 - 01:07h

Okay, então você quer checar TODAS as portas após enviar um pacote para CADA UMA delas? Sim, é possível que isso acabe abrindo a porta do SSH e que seja possível acessá-la desta forma, mas se seu sistema está passível de um hacking neste nível (que dificilmente será executado por um bot) então é bom também implementar um sistema IDS e colocá-lo atrás de um roteador.

Além do que se você mudar a porta do SSH e colocar várias outras portas em DROP seu computador vai parecer invisível na rede, e o "script" teria que esperar o timeout para poder se certificar de que o pacote não foi rejeitado ou aceito.

Isso faria com que o tempo de verificar estas portas fosse extraordinariamente grande, tornando inviável este método.

[7] Comentário enviado por luizquovadis em 19/05/2005 - 06:52h

Caramba, essa configuração é 10. Fiz aqui e deu tudo certinho, na mais perfeita ordem. Esse Tango realmente bota muito quente. Valeu cara.


Contribuir com comentário