Divulgação de afiliados — Este artigo contém links de afiliados da Contabo. Se encomendar um VPS através dos nossos links, ganhamos uma comissão sem custo adicional para si. Todos os comandos foram testados no nosso próprio VPS de produção.
Você hospeda o WireGuard na Contabo. Tudo funciona. Exceto que a sua porta UDP 51820 está no Shodan há 3 dias, o seu VPS recebe milhares de pacotes de varredura por hora, e vê rejeições de handshake do WireGuard de botnets no journalctl. Se o seu WireGuard estiver devidamente configurado (chave pública forte, sem PSK partilhado), não tem nada a temer criptograficamente — mas o ruído polui os logs, desperdiça CPU, e um dia alguém pode encontrar uma vulnerabilidade.
Port knocking é uma técnica antiga mas eficaz para resolver isto: o seu endpoint WireGuard permanece fechado por padrão (UFW drop), e só abre após uma "sequência de knock" (uma série de tentativas de conexão TCP em portas específicas numa ordem específica). O cliente executa a sequência, o firewall abre temporariamente a porta do WireGuard, a sessão é estabelecida, a porta fecha. Para o Shodan, o seu VPS não expõe nenhuma porta UDP/51820 — está invisível.
Este guia cobre a instalação do knockd num VPS da Contabo, a sequência segura, integração com fail2ban, e um script de implementação automatizada para reproduzir a configuração em múltiplos VPS.
O princípio: três portas, uma combinação
Port knocking funciona como uma campainha codificada. Define uma sequência de portas (ex.: 7001 → 8002 → 9003) e uma ordem. O cliente envia uma simples tentativa TCP/SYN a cada porta na ordem. Nenhum serviço escuta nessas portas — o firewall LOGa os pacotes e segue em frente.
Quando o daemon knockd vê a sequência válida de um único IP em menos de 30 segundos, executa um comando: tipicamente iptables -A INPUT -s <ip> -p udp --dport 51820 -j ACCEPT. O IP do cliente é temporariamente permitido. Alguns segundos depois, o knockd fecha: iptables -D INPUT ....
Vantagem: para um scanner externo (Shodan, Censys, masscan), a sua porta 51820 NUNCA responde. Não está listada. Limite: isto não é criptografia. Alguém a espiar o seu tráfego pode ver os knocks e reproduzi-los. É por isso que combinamos com o WireGuard (que fornece a autenticação criptográfica forte).
Instalação num VPS da Contabo
Contabo VPS S (€4,99/mês, ver oferta) no Ubuntu 24.04 LTS, WireGuard já instalado e a funcionar (se ainda não: veja o nosso guia de auto-hospedagem do WireGuard).
Passo 1 — Instalar knockd
apt update && apt install -y knockd
Passo 2 — Fechar o WireGuard por padrão
Primeiro, verifique o seu firewall atual:
ufw status verbose
Se o UFW permitir 51820/udp amplamente aberto, vamos substituí-lo por "fechado por padrão + aberto pelo knockd". Edite /etc/default/ufw ou diretamente iptables:
ufw delete allow 51820/udp
# WireGuard agora está DROP por padrão
Verifique: de fora, nmap -sU -p 51820 seu-ip deve retornar filtered ou closed.
Passo 3 — Configurar knockd
/etc/knockd.conf:
[options]
UseSyslog
Interface = eth0
[openWireGuard]
sequence = 7203,4581,6217
seq_timeout = 15
command = /usr/sbin/iptables -I INPUT -s %IP% -p udp --dport 51820 -j ACCEPT
tcpflags = syn
[closeWireGuard]
sequence = 6217,4581,7203
seq_timeout = 15
command = /usr/sbin/iptables -D INPUT -s %IP% -p udp --dport 51820 -j ACCEPT
tcpflags = syn
Campos chave:
sequence: as suas portas de knock. Não sequencial (não 1234,1235,1236), escolha-as aleatoriamente entre 1024 e 65000.seq_timeout: 15 segundos para completar a sequência do mesmo IP. Muito curto, problemas de latência móvel. Muito longo, janela de ataque de força bruta alarga-se.command: o que é executado quando a sequência é válida.%IP%é substituído pelo IP de origem do knock.tcpflags:synpara corresponder apenas ao pacote de conexão inicial (evita falsos positivos).
Para fechar automaticamente após 60 segundos em vez de um knock manual, use cmd_timeout:
[openWireGuard]
sequence = 7203,4581,6217
seq_timeout = 15
command = /usr/sbin/iptables -I INPUT -s %IP% -p udp --dport 51820 -j ACCEPT
tcpflags = syn
cmd_timeout = 60
stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p udp --dport 51820 -j ACCEPT
Isto é mais limpo: não há necessidade de o cliente enviar um "knock de fecho", o knockd fecha por si mesmo após 60s. O WireGuard já estabeleceu a sua sessão UDP entretanto, que permanece ativa.
Passo 4 — Ativar knockd
/etc/default/knockd:
START_KNOCKD=1
KNOCKD_OPTS="-i eth0"
systemctl enable --now knockd
journalctl -u knockd -f
Cliente knocker
Linux / macOS: instale o pacote knockd (também inclui o cliente knock):
apt install knockd # Ubuntu/Debian
brew install knock # macOS via Homebrew
Uso:
knock seu-vps-ip 7203 4581 6217
Espere 1–2 segundos, depois ative o WireGuard normalmente:
wg-quick up wg0
Tem 60 segundos para o WireGuard completar o seu handshake UDP. Uma vez que a sessão está ativa, o knockd pode fechar o firewall: a conexão existente não é afetada por novas regras INPUT.
Windows: não há uma versão oficialmente mantida do knock.exe. Solução pragmática: um script PowerShell que faz 3 Test-NetConnections rápidos:
$ip = "seu-vps-ip"
$ports = 7203, 4581, 6217
foreach ($p in $ports) {
Test-NetConnection -ComputerName $ip -Port $p -InformationLevel Quiet
Start-Sleep -Milliseconds 200
}
Start-Sleep -Seconds 1
# Inicie a aplicação WireGuard aqui
Android: app KnockOnD na Play Store (gratuito). Configure IP + sequência, toque no botão, os knocks são enviados. Combine com WireGuard Android: após o knock, ative o túnel manualmente.
iOS: PortKnock na AppStore (gratuito). Mesmo princípio.
Reforço: evitando replay de knock
Um knock simples tem uma fraqueza: se alguém interceptar o seu tráfego (Wi-Fi público, ISP hostil, etc.), pode reproduzir a sequência a partir do seu IP e abrir o firewall. Três mitigações:
1. fail2ban em knocks inválidos
Banir IPs que realizam 5+ knocks inválidos (não completando a sequência). Crie /etc/fail2ban/filter.d/knockd.conf:
[Definition]
failregex = ^.*knockd.*<HOST>:.*: Stage \d failed.*$
ignoreregex =
E /etc/fail2ban/jail.d/knockd.conf:
[knockd]
enabled = true
filter = knockd
logpath = /var/log/syslog
maxretry = 5
findtime = 60
bantime = 3600
Recarregue: systemctl reload fail2ban.
2. sequências de knock de uso único (knockd 0.8+)
Use sequências de uso único via one_time_sequences:
[openWireGuard]
one_time_sequences = /etc/knockd/sequences.list
seq_timeout = 15
command = /usr/sbin/iptables -I INPUT -s %IP% -p udp --dport 51820 -j ACCEPT
tcpflags = syn
cmd_timeout = 60
stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p udp --dport 51820 -j ACCEPT
O ficheiro /etc/knockd/sequences.list contém uma sequência por linha. Uma vez usada, é removida. Pré-gerar 100 sequências, distribuí-las para o cliente (ficheiro encriptado), e cada conexão queima uma.
Isto é significativamente mais seguro contra replay, ao custo de uma gestão mais complicada.
3. Combine com uma VPN de bootstrap
Abordagem elegante: o seu VPS expõe apenas um Shadowsocks ou V2Ray na porta 443 (modo camuflagem). Os knocks do WireGuard são enviados através deste primeiro túnel SS/V2Ray. A interceptação externa só vê TLS em direção ao seu domínio, não os knocks.
Esta é a configuração "cinto e suspensórios" para viagens ultra-sensíveis.
Script de implementação automatizada
Para reproduzir esta configuração em múltiplos VPS da Contabo, aqui está um script que usamos. Coloque-o em /usr/local/bin/setup-knock-wg.sh:
#!/bin/bash
set -euo pipefail
if [[ $EUID -ne 0 ]]; then
echo "Execute este script como root"
exit 1
fi
# Gerar 3 portas aleatórias entre 5000 e 60000
PORT1=$(( ( RANDOM % 55000 ) + 5000 ))
PORT2=$(( ( RANDOM % 55000 ) + 5000 ))
PORT3=$(( ( RANDOM % 55000 ) + 5000 ))
echo "Sequência gerada: $PORT1 -> $PORT2 -> $PORT3"
apt update && apt install -y knockd fail2ban
cat > /etc/knockd.conf <<EOF
[options]
UseSyslog
Interface = eth0
[openWireGuard]
sequence = ${PORT1},${PORT2},${PORT3}
seq_timeout = 15
command = /usr/sbin/iptables -I INPUT -s %IP% -p udp --dport 51820 -j ACCEPT
tcpflags = syn
cmd_timeout = 60
stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p udp --dport 51820 -j ACCEPT
EOF
sed -i 's/START_KNOCKD=0/START_KNOCKD=1/' /etc/default/knockd
# Fechar o WireGuard por padrão
ufw delete allow 51820/udp 2>/dev/null || true
# Configuração do fail2ban
cat > /etc/fail2ban/filter.d/knockd.conf <<EOF
[Definition]
failregex = ^.*knockd.*<HOST>:.*: Stage \d failed.*\$
ignoreregex =
EOF
cat > /etc/fail2ban/jail.d/knockd.conf <<EOF
[knockd]
enabled = true
filter = knockd
logpath = /var/log/syslog
maxretry = 5
findtime = 60
bantime = 3600
EOF
systemctl enable --now knockd
systemctl reload fail2ban
echo ""
echo "Configuração completa!"
echo "Cliente: knock $(curl -s ifconfig.me) ${PORT1} ${PORT2} ${PORT3}"
echo "Mantenha esta sequência segura — recomenda-se um gestor de senhas."
Torne executável e execute:
chmod +x /usr/local/bin/setup-knock-wg.sh
/usr/local/bin/setup-knock-wg.sh
Receberá a sequência do lado do cliente como saída. Guarde-a no Bitwarden / 1Password / KeePass — é um segredo tal como a sua chave SSH.
Validação: teste se funciona
1. De fora (o seu portátil, não o VPS) — confirme que 51820 está fechada:
nmap -sU -p 51820 seu-vps-ip
# PORTA ESTADO SERVIÇO
# 51820/udp filtrada (ou fechada) — sem resposta
2. Ainda de fora — knock + tentativa de WireGuard:
knock seu-vps-ip 7203 4581 6217
sleep 2
wg-quick up wg0
wg show wg0 # deve mostrar um handshake
3. Lado do servidor — verifique o log:
journalctl -u knockd | tail -20
# Deve mostrar: openWireGuard: Stage 3 OK
# openWireGuard: OPEN SESAME
# openWireGuard: running command
4. Confirme que o firewall fecha após cmd_timeout:
# No servidor, espere 60s e depois:
iptables -L INPUT -n | grep 51820
# Nenhuma regra para o seu IP. A sessão WireGuard permanece ativa graças ao conntrack.
Casos de uso típicos
1. Auto-hospedagem para si mesmo, incomodado pelo ruído do Shodan. Configuração perfeita: 5 minutos de configuração, já não está no Shodan, os seus logs estão limpos. Nenhuma alteração do lado do cliente para o WireGuard móvel (apenas um knock antes de cada conexão).
2. Auto-hospedagem para alguns utilizadores avançados. Distribua uma sequência de uso único por utilizador. Cada utilizador tem a sua sequência individual. Se uma vazar, revoga-se essa sequência sem afetar as outras.
3. Configuração resiliente multi-VPS. Cada VPS da Contabo tem a sua sequência aleatória. O cliente tem uma lista de fallback: se o VPS1 não responder (knock falhado ou IP inativo), faz knock no VPS2, etc.
4. Honeypot invertido. Combinado com psad ou crowdsec, IPs que escaneiam as suas portas de knock de forma inválida acabam numa lista negra comunitária. Torna-se um sensor de inteligência de ameaças.
Limites e alternativas
Port knocking não é mágico:
- Se alguém tiver acesso passivo ao seu tráfego LAN (proxy empresarial a MITMing TLS), pode ver os knocks e reproduzi-los.
- Se o seu cliente móvel estiver numa rede celular onde o operador regista tudo, o mesmo.
- Se o seu VPS for um pouco lento,
seq_timeout = 15spode ser muito curto em 3G na borda da cobertura.
Alternativas a considerar:
| Necessidade | Solução |
|---|---|
| Ocultar endpoint VPN de varreduras | Port knocking (este guia) |
| Ocultar E resistir à espionagem | Cloak (veja nosso guia) |
| Contornar DPI nacional (GFW, etc.) | V2Ray + REALITY (veja nosso guia) |
| Autenticação criptográfica forte apenas | WireGuard simples, peering OK |
| Configuração pro multi-utilizador | Xray-core + dashboards x-ui |
Port knocking é complementar, não um substituto. Pode empilhar: port knocking + Cloak + WireGuard, dando-lhe uma configuração quase invisível. Ao custo de uma complexidade operacional aumentada.
Quando um VPN comercial é mais simples
Se não quiser gerir knockd + fail2ban + UFW + WireGuard, um VPN comercial poupa-lhe tudo isso. NordVPN não lhe dá controlo de baixo nível, mas os seus servidores são partilhados (então há uma diluição natural de varreduras). Não é o alvo identificável.
Muitos dos nossos leitores combinam: auto-hospedagem com port knocking para uso diário (performance máxima, IP fixo), VPN comercial como backup de viagem (sem manutenção).
Leitura adicional
- Auto-hospedagem de VPN na Contabo: guia completo do WireGuard 2026
- Cloak: ofuscação TLS para VPN auto-hospedada
- V2Ray VMess/VLess: configuração completa 2026
- Killswitch de VPN Linux: iptables + systemd
Fontes técnicas:
- Documentação oficial do knockd
- Artigo original sobre port knocking — M. Krzywinski, 2003
- GitHub do fail2ban
- Whitepaper do WireGuard — Jason A. Donenfeld
Publicado em 2026-06-03. Configuração testada num VPS Contabo S Nuremberg + clientes residenciais na Europa, março–abril de 2026. Port knocking é uma camada de defesa complementar, não uma bala de prata — combine sempre com autenticação forte do WireGuard e fail2ban.
Lembrete legal: port knocking e auto-hospedagem do WireGuard são perfeitamente legais na UE, EUA, Canadá. Verifique as regulamentações locais antes de implementar em jurisdições sensíveis. A VPNSmith publica este guia para fins educativos.
★ Datacenter GDPR em Nuremberg · ✓ IPv4 dedicado incluído · 200+ Mbps garantidos
Self-host your VPN on your own VPS → ContaboFull root access · public IPv4 · pick your region→