Divulgación de afiliados — Este artículo contiene enlaces de afiliación Contabo. Si contratas un VPS a través de nuestros enlaces, recibimos una comisión sin coste adicional para ti. Todos los comandos se prueban en nuestros propios VPS de producción.
Tienes un WireGuard auto-alojado en Contabo. Todo funciona. Salvo que tu puerto UDP 51820 lleva 3 días en Shodan, tu VPS recibe miles de paquetes de escaneo por hora, y ves en journalctl handshakes WireGuard rechazados desde botnets. Si tu WireGuard está bien configurado (clave pública fuerte, sin PSK compartida), no tienes nada que temer criptográficamente — pero el ruido contamina tus logs, malgasta CPU, y un día alguien podría encontrar una vulnerabilidad.
Port knocking es una técnica antigua pero eficaz para resolver esto: tu endpoint WireGuard queda cerrado por defecto (UFW drop), y se abre únicamente tras una "secuencia de knock" (serie de intentos de conexión TCP en puertos precisos en un orden preciso). El cliente teclea la secuencia, el firewall abre temporalmente el puerto WireGuard, la sesión se establece, el puerto se cierra. Para Shodan, tu VPS no expone ningún puerto UDP/51820 — eres invisible.
Esta guía cubre la instalación de knockd en VPS Contabo, la secuencia segura, la integración con fail2ban y un script de despliegue automatizado para reproducir el setup en varios VPS.
El principio: tres puertas, una combinación
Port knocking funciona como un timbre codificado. Defines una secuencia de puertos (por ejemplo 7001 → 8002 → 9003) y un orden. El cliente envía un simple intento TCP/SYN a cada puerto en orden. Ningún servicio escucha en esos puertos — el firewall LOG los paquetes y pasa.
Cuando el demonio knockd ve la secuencia válida desde una misma IP en < 30 segundos, ejecuta un comando: típicamente iptables -A INPUT -s <ip> -p udp --dport 51820 -j ACCEPT. La IP del cliente queda autorizada temporalmente. Algunos segundos después, knockd cierra: iptables -D INPUT ....
Ventaja: para un escáner externo (Shodan, Censys, masscan), tu puerto 51820 NUNCA responde. No está listado. Límite: no es criptografía. Alguien que sniff tu tráfico puede ver los knocks y replicarlos. Por eso combinamos con WireGuard (que sigue siendo la auth criptográfica fuerte).
Instalación en VPS Contabo
VPS Contabo VPS S (4,99 €/mes, ver oferta) bajo Ubuntu 24.04 LTS, WireGuard ya instalado y funcionando (si no aún: ver nuestra guía self-host WireGuard).
Paso 1 — Instalar knockd
apt update && apt install -y knockd
Paso 2 — Cerrar WireGuard por defecto
Primero, verifica tu firewall actual:
ufw status verbose
Si UFW permite 51820/udp abierto, vamos a reemplazarlo por "cerrado por defecto + abierto por knockd". Edita /etc/default/ufw o directamente iptables:
ufw delete allow 51820/udp
# WireGuard ahora es DROP por defecto
Verifica: desde fuera, nmap -sU -p 51820 tu-ip debe devolver filtered o closed.
Paso 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 clave:
sequence: tus puertos knock. No secuenciales (no 1234,1235,1236), elígelos aleatorios entre 1024 y 65000.seq_timeout: 15 segundos para completar la secuencia desde la misma IP. Demasiado corto, problemas de latencia cliente móvil. Demasiado largo, ventana de ataque por brute force ampliada.command: lo que se ejecuta cuando la secuencia es válida.%IP%se reemplaza por la IP origen del knock.tcpflags:synpara coincidir solo con el paquete inicial de conexión (evita falsos positivos).
Para auto-cierre tras 60 segundos en lugar de un knock manual, usa 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
Es más limpio: no hace falta que el cliente envíe un "close knock", knockd cierra solo tras 60s. WireGuard ha establecido su sesión UDP mientras tanto, queda activa.
Paso 4 — Activar knockd
/etc/default/knockd:
START_KNOCKD=1
KNOCKD_OPTS="-i eth0"
systemctl enable --now knockd
journalctl -u knockd -f
Knocker del lado cliente
Linux / macOS: instala el paquete knockd (también provee el cliente knock):
apt install knockd # Ubuntu/Debian
brew install knock # macOS via Homebrew
Uso:
knock tu-ip-vps 7203 4581 6217
Espera 1-2 segundos, después monta WireGuard normalmente:
wg-quick up wg0
Tienes 60 segundos para que WireGuard complete su handshake UDP. Una vez la sesión activa, knockd puede cerrar el firewall: la conexión existente no se ve afectada por las nuevas reglas INPUT.
Windows: sin port oficial knock.exe mantenido. Solución pragmática: un script PowerShell que hace 3 Test-NetConnection rápidos:
$ip = "tu-ip-vps"
$ports = 7203, 4581, 6217
foreach ($p in $ports) {
Test-NetConnection -ComputerName $ip -Port $p -InformationLevel Quiet
Start-Sleep -Milliseconds 200
}
Start-Sleep -Seconds 1
# Lanza la app WireGuard aquí
Android: app KnockOnD en Play Store (gratis). Configuras IP + secuencia, pulsas el botón, envía los knocks. Combina con WireGuard Android: tras el knock, monta el túnel manualmente.
iOS: PortKnock en AppStore (gratis). Mismo principio.
Endurecimiento: evitar el knock-replay
El knock simple tiene una debilidad: si alguien sniff tu tráfico (Wi-Fi público, ISP hostil, etc.), puede replicar la secuencia desde su IP y conseguir la apertura del firewall. Tres mitigaciones:
1. fail2ban sobre los knocks inválidos
Banea las IPs que hacen 5+ knocks inválidos (sin completar la secuencia). Crea /etc/fail2ban/filter.d/knockd.conf:
[Definition]
failregex = ^.*knockd.*<HOST>:.*: Stage \d failed.*$
ignoreregex =
Y /etc/fail2ban/jail.d/knockd.conf:
[knockd]
enabled = true
filter = knockd
logpath = /var/log/syslog
maxretry = 5
findtime = 60
bantime = 3600
Reload: systemctl reload fail2ban.
2. secuencias one-time (knockd 0.8+)
Usa secuencias 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
El archivo /etc/knockd/sequences.list contiene una secuencia por línea. Una vez usada, se elimina. Pregeneras 100 secuencias, las distribuyes al cliente (archivo cifrado) y cada conexión consume una.
Es notablemente más seguro contra el replay, a costa de una gestión más compleja.
3. Combinar con una VPN de arranque
Enfoque elegante: tu VPS expone únicamente un Shadowsocks o un V2Ray en 443 (modo camuflaje). Los knocks WireGuard se envían a través de este primer túnel SS/V2Ray. El sniff externo solo ve TLS hacia tu dominio, no los knocks.
Es el setup "cinturón+tirantes" para viajes ultra-sensibles.
Script de despliegue automatizado
Para reproducir este setup en varios VPS Contabo, aquí un script que usamos. Colócalo en /usr/local/bin/setup-knock-wg.sh:
#!/bin/bash
set -euo pipefail
if [[ $EUID -ne 0 ]]; then
echo "Ejecuta este script como root"
exit 1
fi
# Genera 3 puertos aleatorios entre 5000 y 60000
PORT1=$(( ( RANDOM % 55000 ) + 5000 ))
PORT2=$(( ( RANDOM % 55000 ) + 5000 ))
PORT3=$(( ( RANDOM % 55000 ) + 5000 ))
echo "Secuencia generada: $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
# Cierra WireGuard por defecto
ufw delete allow 51820/udp 2>/dev/null || true
# Configura 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 "Setup completo!"
echo "Cliente: knock $(curl -s ifconfig.me) ${PORT1} ${PORT2} ${PORT3}"
echo "Guarda esta secuencia con seguridad — gestor de contraseñas recomendado."
Vuelve ejecutable y lanza:
chmod +x /usr/local/bin/setup-knock-wg.sh
/usr/local/bin/setup-knock-wg.sh
Obtienes en salida la secuencia para usar del lado cliente. Guárdala en Bitwarden / 1Password / KeePass — es un secreto igual que tu clave SSH.
Validación: probar que funciona
1. Desde fuera (tu laptop, no el VPS) — verificar que 51820 está cerrado:
nmap -sU -p 51820 tu-ip-vps
# PORT STATE SERVICE
# 51820/udp filtered (o closed) — sin respuesta
2. Aún desde fuera — knock + intento WireGuard:
knock tu-ip-vps 7203 4581 6217
sleep 2
wg-quick up wg0
wg show wg0 # debe mostrar un handshake
3. Lado servidor — verificar el log:
journalctl -u knockd | tail -20
# Debe mostrar: openWireGuard: Stage 3 OK
# openWireGuard: OPEN SESAME
# openWireGuard: running command
4. Verificar que tras el cmd_timeout, el firewall se cierra:
# En el servidor, esperar 60s después:
iptables -L INPUT -n | grep 51820
# Sin regla para tu IP. Sesión WireGuard sigue activa gracias al conntrack.
Casos de uso típicos
1. Self-host para uno mismo, harto del ruido Shodan. Setup perfecto: 5 minutos de config, ya no estás en Shodan, tus logs son limpios. Ningún cambio del lado cliente WireGuard móvil (solo un knock antes de cada conexión).
2. Self-host para algunos usuarios avanzados. Distribuye a cada user una secuencia one-time. Cada uno tiene su secuencia individual. Si hay fuga, revocas esa secuencia sin impacto en las demás.
3. Setup multi-VPS resilientes. Cada VPS Contabo tiene su propia secuencia aleatoria. El cliente tiene una lista de fallback: si VPS1 no responde (knock fallido o IP down), hace knock al VPS2, etc.
4. Honeypot invertido. Acoplado con psad o crowdsec, las IPs que escanean tus puertos knock inválidamente terminan en una lista negra comunitaria. Te conviertes en un sensor de threat intel.
Límites y alternativas
Port knocking no es mágico:
- Si alguien tiene acceso pasivo a tu tráfico LAN (proxy de empresa que MITM TLS), puede ver los knocks y replicarlos.
- Si tu cliente móvil está en una red cell donde el operador logea todo, idem.
- Si tu VPS es un poco lento, el
seq_timeout = 15spuede ser demasiado corto en 3G en borde de cobertura.
Alternativas a considerar:
| Necesidad | Solución |
|---|---|
| Ocultar endpoint VPN de los escaneos | Port knocking (esta guía) |
| Ocultar Y resistir al sniffing | Cloak (ver nuestra guía) |
| Bypass DPI nacional (GFW, etc.) | V2Ray + REALITY (ver nuestra guía) |
| Autenticación criptográfica fuerte únicamente | WireGuard puro, peering OK |
| Setup pro multi-usuarios | Xray-core + dashboards x-ui |
Port knocking es complementario, no sustituto. Puedes apilar: port knocking + Cloak + WireGuard, y tienes un setup casi invisible. A costa de una complejidad operativa aumentada.
Cuándo una VPN comercial es más simple
Si no quieres gestionar knockd + fail2ban + UFW + WireGuard, una VPN comercial te ahorra eso. NordVPN no te da el control de bajo nivel, pero sus servidores son compartidos (dilución natural de los escaneos). No eres el objetivo identificable.
Muchos de nuestros lectores combinan: self-host con port knocking para uso diario (rendimiento máx, IP fija), VPN comercial como backup de viaje (sin mantenimiento).
Para profundizar
- Self-host VPN en Contabo: guía WireGuard completa 2026
- Cloak: ofuscación TLS para VPN self-host
- V2Ray VMess/VLess: configuración completa 2026
- Killswitch VPN Linux: iptables + systemd
Fuentes técnicas:
- knockd documentación oficial
- Original Port Knocking paper — M. Krzywinski, 2003
- fail2ban GitHub
- WireGuard whitepaper — Jason A. Donenfeld
Artículo publicado el 2026-06-03. Setup probado sobre VPS Contabo VPS S Núremberg + clientes residenciales Europa, marzo-abril 2026. Port knocking es una capa defensiva complementaria, no una bala de plata — combina siempre con auth WireGuard fuerte y fail2ban.
Recordatorio legal: port knocking y WireGuard self-host son perfectamente legales en la UE, EE.UU., Canadá. Verificar las regulaciones locales antes de desplegar en jurisdicciones sensibles. VPNSmith publica esta guía con fines educativos.
★ Datacenter Nuremberg GDPR · ✓ IPv4 dédiée incluse · 200+ Mbps garantis
Probar Contabo30 jours satisfait ou remboursé→