Bom esse post explica como fazer um Port Knocking com Iptables.
Port Knocking seria mais ou menos liberar uma porta no iptables caso seu ip esteja numa lista, caso contrário deixá-la bloqueada.
O exemplo que vou usar será o do ssh.
Antes de mais nada verifique se seu kernel possui o módulo ipt_recent
# modprobe -l | grep recent
se a saida do comando for parecida com
/lib/modules/2.6.20-15-generic/kernel/net/ipv4/netfilter/ipt_recent.ko
você não precisará compilar seu kernel. Agora suba o módulo
# modprobe ipt_recent
Agora crie um arquivo, o nome que utilizarei é pknock.sh e adicione ao seu conteúdo
Obs: As portas e o nome da lista podem e devem ser alterados para maior segurança.
#!/bin/bash
# bloqueia a porta do ssh, no caso a 2000 iptables -A INPUT -p tcp -s 0/0 --dport 2000 -j DROP
# libera a porta do ssh caso o ip esteja na lista SSHKNOCK iptables -I INPUT -p tcp -s 0/0 --sport 1024:65535 --dport 2000 -m recent --rsource --name SSHKNOCK --rcheck -j ACCEPT
# ao se conectar na porta 2100 adiciona o ip na lista SSHKNOCK iptables -I INPUT -p tcp -s 0/0 --sport 1024:65535 --dport 2100 -m recent --rsource --set --name SSHKNOCK -j DROP
# ao se conectar na porta 2200 retira o ip da lista SSHKNOCK iptables -I INPUT -p tcp -s 0/0 --sport 1024:65535 --dport 2200 -m recent --rsource --name SSHKNOCK --remove -j DROP
salve o arquivo.
Agora para aplicar as regras ao iptables sempre que iniciar, no ubuntu edite o arquivo /etc/rc.local como root
# pico /etc/rc.local
antes da linha "exit 0"
adicione bash /home/user/pknock.sh
troque isso pela localização exata no teu pc.
salve o arquivo rc.local
Agora de permissão de execução para ele:
# chmod +x /etc/rc.local
Agora sempre que inicar seu pc as regras já estarão no iptables.
Dúvidas? comentem
Port Knocking seria mais ou menos liberar uma porta no iptables caso seu ip esteja numa lista, caso contrário deixá-la bloqueada.
O exemplo que vou usar será o do ssh.
Antes de mais nada verifique se seu kernel possui o módulo ipt_recent
# modprobe -l | grep recent
se a saida do comando for parecida com
/lib/modules/2.6.20-15-generic/kernel/net/ipv4/netfilter/ipt_recent.ko
você não precisará compilar seu kernel. Agora suba o módulo
# modprobe ipt_recent
Agora crie um arquivo, o nome que utilizarei é pknock.sh e adicione ao seu conteúdo
Obs: As portas e o nome da lista podem e devem ser alterados para maior segurança.
#!/bin/bash
# bloqueia a porta do ssh, no caso a 2000 iptables -A INPUT -p tcp -s 0/0 --dport 2000 -j DROP
# libera a porta do ssh caso o ip esteja na lista SSHKNOCK iptables -I INPUT -p tcp -s 0/0 --sport 1024:65535 --dport 2000 -m recent --rsource --name SSHKNOCK --rcheck -j ACCEPT
# ao se conectar na porta 2100 adiciona o ip na lista SSHKNOCK iptables -I INPUT -p tcp -s 0/0 --sport 1024:65535 --dport 2100 -m recent --rsource --set --name SSHKNOCK -j DROP
# ao se conectar na porta 2200 retira o ip da lista SSHKNOCK iptables -I INPUT -p tcp -s 0/0 --sport 1024:65535 --dport 2200 -m recent --rsource --name SSHKNOCK --remove -j DROP
salve o arquivo.
Agora para aplicar as regras ao iptables sempre que iniciar, no ubuntu edite o arquivo /etc/rc.local como root
# pico /etc/rc.local
antes da linha "exit 0"
adicione bash /home/user/pknock.sh
troque isso pela localização exata no teu pc.
salve o arquivo rc.local
Agora de permissão de execução para ele:
# chmod +x /etc/rc.local
Agora sempre que inicar seu pc as regras já estarão no iptables.
Dúvidas? comentem
4 comentários:
Pô, legal esse port knocking.
Da uma visitadinha no meu, talvez até o fds, sai post grande sobre com contribs com o Debian.
[]s
Gostei. É bastante interessante. Mas o OpenSSH permite que utilizemos os arquivos do TCPWrappers para esse tipo de gerênciamento. Podemos colocar no /etc/hosts.allow algo como:
sshd: 200.200.200.1, 200.200.200.2
Concordo com o q vc disse, porém se vc vai para algum lugar que vc não possui o ip previamente adicionado, vc não conseguiria acessar, vc precisaria adicionar o ip ao arquivo. A pratica do Port Knocking possibilitaria o acesso de qualquer lugar. Porém com a utilização dos arquivos /etc/hosts.allow e /etc/hosts.deny a segurança é muito maior.
Pô, no Debian Squeeze não tem o tal módulo!
Como faço para colocá-lo lá???
Eu não manjo nada sobre compilar kernel...
Postar um comentário