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:
apt update
apt install knockd iptables-persistent
Em distribuições derivadas de RedHat (Alma, Rocky, RHEL, etc.):
yum install epel-release
yum install knock knock-server iptables-services
Configurar o knockd
Editar o ficheiro de configuração do knockd
:
vi /etc/knockd.conf
Colar esta configuração:
[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:
iptables -F
Adicionar regra para bloquear SSH (porta 22) por omissão:
iptables -A INPUT -p tcp --dport 22 -j DROP
Permitir o tráfego necessário (ajustar conforme as necessidades do servidor):
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:
netfilter-persistent save
No RedHat-derived:
service iptables save # CentOS / RHEL
Activar e iniciar o knockd
No Debian/Ubuntu editar /etc/default/knockd
e activar:
START_KNOCKD=1
Depois, em qualquer distro:
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:
apt install knock
No macOS (via Homebrew):
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:
knock seu-vps-ip 55025 # ou usar knock.exe no Windows
Em seguida:
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:
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