Knock, Knock: Como Blindar um VPS Contra Port Scans com Port Knocking — A Defesa Secreta que Silencia Bots

Expor a porta 22 à Internet é um convite aberto para robots e ataques de força bruta. Muitos administradores optam por mudar a porta SSH — solução simples, mas limitada: a alteração não fortalece realmente a segurança porque quem varre uma máquina específica continua a encontrar a porta. Para scanners que vasculham blocos inteiros à procura de respostas na porta 22, mudar a porta pode torná-la invisível aos olhos dos atacantes em massa, mas não elimina a superfície de ataque para quem foca o IP.

Mudar a porta nem sempre é aceitável: scripts, automações ou políticas internas podem exigir explicitamente o uso da porta 22, e há quem recuse a chamada “segurança por obscuridade”. Por isso, além de ferramentas como Fail2Ban — que bane clientes após múltiplas tentativas de login falhadas para mitigar brute force — existe uma solução menos óbvia e altamente eficaz: port knocking.

Port knocking adiciona uma camada de defesa por obscuridade controlada: a porta permanece fechada até que uma sequência secreta de “batidas” (knocks) seja enviada, momento em que o firewall desbloqueia temporariamente o acesso SSH para o IP que executou o gesto. Existem várias maneiras de acionar esse desbloqueio; exemplos práticos incluem:

• Enviar um email que um script do servidor processa e que abre temporariamente a porta SSH para o IP;
• Alterar uma página web que o servidor verifica periodicamente;
• Publicar numa conversa privada (ex.: Telegram) que o servidor lê;
• Enviar um SMS para um número gerido por Twilio que depois aciona o servidor;
• Ou a solução mais simples e clássica: uma sequência de knocks em portas secretas que o daemon knockd observa.

A seguir apresenta-se um guia prático, passo a passo, para implementar port knocking numa VPS — mantendo a compatibilidade com scripts e automatismos que ainda dependem da porta 22, mas tornando-a praticamente invisível a varrimentos automáticos.

Instalação do software

Exemplo usado: Debian 12. IP cliente fictício: 1.2.3.4. Porta de knock escolhida: 55025 (qualquer porta serve).

No Debian/Ubuntu:

Bash
apt update
apt install knockd iptables-persistent

Em distribuições derivadas de RedHat (Alma, Rocky, RHEL, etc.):

Bash
yum install epel-release
yum install knock knock-server iptables-services

Configurar o knockd

Editar o ficheiro de configuração do knockd:

Bash
vi /etc/knockd.conf

Colar esta configuração:

Bash
[options]
        UseSyslog

[openSSH]
        sequence = 55025
        seq_timeout = 5
        command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags = syn

[closeSSH]
        sequence = 55025,55025
        seq_timeout = 5
        command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags = syn

Explicação técnica: um único knock na porta 55025 adiciona uma regra iptables que abre a porta 22 apenas para o IP que bateu; um double-knock na mesma porta remove a regra. O firewall passa a adicionar e remover regras dinamicamente — uma camada de controlo que transforma a SSH numa porta praticamente oculta até que o utilizador legítimo revele a sua presença.

Bloquear o SSH por defeito (lockdown)

Assume-se ausência de regras de firewall prévias; se existirem, ajustar conforme necessário.

Flush às regras correntes:

Bash
iptables -F

Adicionar regra para bloquear SSH (porta 22) por omissão:

Bash
iptables -A INPUT -p tcp --dport 22 -j DROP

Permitir o tráfego necessário (ajustar conforme as necessidades do servidor):

Bash
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

Guardar regras iptables. No Debian:

Bash
netfilter-persistent save

No RedHat-derived:

Bash
service iptables save           # CentOS / RHEL

Activar e iniciar o knockd

No Debian/Ubuntu editar /etc/default/knockd e activar:

Bash
START_KNOCKD=1

Depois, em qualquer distro:

Bash
systemctl enable --now knockd

Isto garante que o daemon de port knocking está activo e ouvirá as batidas secretas.

Configurar a máquina cliente

Instalar o cliente knock:

No Debian/Ubuntu:

Bash
apt install knock

No macOS (via Homebrew):

Bash
brew install knock

No Windows: instalar o binário pré-compilado do projecto knock (ex.: repositório GitHub do projecto grongor/knock).

Como “bater” (Knockin’)

Enviar a batida:

Bash
knock seu-vps-ip 55025    # ou usar knock.exe no Windows

Em seguida:

Bash
ssh seu-usuario@seu-vps-ip

Se tudo estiver correcto, o SSH estará temporariamente acessível para o IP que executou o knock. Após terminar a sessão, fechar o acesso com uma sequência de fechamento:

Bash
knock seu-vps-ip 55025 55025    # ou knock.exe no Windows

Esse comando executa o bloco closeSSH do knockd.conf e remove a entrada do iptables, restaurando o estado de invisibilidade da porta 22.

Boas práticas e considerações finais (técnicas)

Não remover medidas adicionais de segurança: combinar port knocking com Fail2Ban, autenticação por chaves públicas, e políticas de acesso estritas aumenta significativamente a resiliência.
Registar eventos: activar syslog/rsyslog para registar knocks inválidos pode ajudar a detectar varrimentos e padrões anómalos.
Sequências mais complexas: usar sequências de múltiplas portas ou variações temporizadas reduz a probabilidade de descobrimento por força bruta.
Automação e integração: se scripts dependem na porta 22, documentar claramente os procedimentos de knock e incluir mecanismos automatizados para knock em pipelines CI/CD ou workflows administrativos.
Testes: ensaiar o processo a partir de redes diferentes (ISP, mobile) para garantir que NATs e firewalls intermédios não bloqueiam as UDP/TCP knocks.

Port knocking converte uma porta exposta numa porta “invisível até prova em contrário”: não remove a necessidade de boas práticas, mas esconde eficazmente a interface SSH do ruído massivo dos scanners, tornando a VPS muito menos apetecível para scripts de ataque automáticos e adicionando uma camada extra de controlo sobre quem consegue estabelecer ligação.


Hashtags para redes sociais: #PortKnocking #VPS #Segurança #SSH #Firewall #iptables #knockd #Fail2Ban #Debian #SegurançaInformática

Artigos Relacionados