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