Introducción
Gearroom presta equipos a creadores locales. Los miembros acceden para consultar sus datos de recogida, devolución y embalaje. El límite de acceso debería detener las conjeturas repetidas de contraseñas, pero su contador actual se comparte entre todos. Los fallos de un miembro pueden impedir que otro empiece a trabajar.
Usa Hydra para producir una prueba pequeña y repetible, cambia el contador para que siga a la cuenta y demuestra tanto la protección como el acceso normal. El resultado será una política efectiva en ejecución con autenticación real y registros de préstamo intactos, no un informe. Solo puedes limitar al miembro sintético de prueba declarado. Usa al miembro de referencia únicamente con su contraseña correcta conocida y no cambies el servidor, las cuentas ni los registros originales.
Necesitas saber introducir comandos básicos, reconocer rutas y cambiar de pestaña. Aquí se explican las opciones necesarias de Hydra, los campos del formulario, las comillas del shell y la estructura JSON de la política. El terminal Workstation y el sitio Equipment Desk preparados son dos interfaces del mismo contenedor de formación aislado. Esta unidad comienza independientemente de otros laboratorios. Todas las personas, contraseñas y registros son datos sintéticos locales de formación.
Reserva unos 55 minutos, incluyendo lectura y errores habituales. Es una estimación del autor, no un tiempo medido con principiantes. El límite pequeño de tres fallos en 30 segundos seguido de un bloqueo de 12 segundos es un contrato de formación, no una recomendación de seguridad para producción.
Confirmar dos accesos de miembros que funcionan
En este paso, abre los dos registros conocidos antes de probar el límite. Una autenticación correcta significa que el servidor ha aceptado una identidad concreta; esa identidad determina qué registro puedes ver.
Abre Equipment Desk. Selecciona Review brief en la navegación superior. El miembro de prueba autorizado es member, con la contraseña Member24. El miembro de referencia normal es reference, con la contraseña Reference24. Son credenciales conocidas, no contraseñas que debas descubrir.

Usa los dos campos etiquetados y el botón Sign in. La línea bajo el formulario identifica la ruta POST real y los nombres enviados de los campos.
Selecciona Member sign-in, introduce las credenciales del miembro de prueba y pulsa Sign in. Debe aparecer Signed in as member. Selecciona Open your record. Comprueba el préstamo LN-204, Mina Park, Compact projector kit, recogida Thursday 14:00, devolución Monday 10:00 y la nota sobre el cable HDMI en el bolsillo lateral. Selecciona Sign out.

Compara los campos Member y Record con el equipo, la recogida, la devolución y la nota de embalaje. Un acceso correcto no demuestra por sí solo que el registro original siga intacto.
Vuelve a seleccionar Member sign-in, usa las credenciales de referencia y selecciona Open your record. Comprueba LN-119, Theo Bell, Portable audio recorder y la nota sobre el protector de viento. Selecciona Sign out otra vez. Son registros distintos; conservar ambos forma parte de tu tarea. Normalmente, el navegador almacena automáticamente la cookie, un identificador de sesión emitido por el servidor, tras un acceso correcto. Cerrar la sesión la termina.
Cambia a Workstation. Su directorio inicial configurado es /home/labex/project/login-limits. pwd muestra el directorio actual:
pwd
Debe aparecer /home/labex/project/login-limits. Si te has desplazado a otro sitio, cd cambia de directorio:
cd /home/labex/project/login-limits
cat muestra un archivo. Lee la política preparada:
cat policy.json
Esto es JSON, un formato de texto estructurado con campos nombrados entre comillas dobles. Los dos puntos conectan nombres y valores, las comas separan campos y las llaves encierran un objeto. La clave key es actualmente global, por lo que el mismo contador puede incluir distintas cuentas. failed_attempts, window_seconds y cooldown_seconds son los valores acordados: tres fallos, una ventana de 30 segundos y un bloqueo de 12 segundos. entry_groups enumera las rutas de acceso preparadas; conserva este mapa en esta unidad. Investigarás los grupos de entrada en el siguiente laboratorio independiente.
deskctl es el comando preparado de mantenimiento limitado. Su acción status lee la política activa real; no inicia sesión, no borra contadores ni cambia el servicio:
deskctl status
La política activa debe coincidir con el archivo. Una revisión identifica la política que está en uso. Editar el archivo más adelante no cambiará esa política activa hasta que la apliques.
Observar el problema del contador compartido
En este paso, envía solo las contraseñas incorrectas proporcionadas para el miembro de prueba autorizado y observa cómo el contador global también rechaza al miembro de referencia.
Permanece en Workstation. Lee el archivo completo de candidatos permitidos:
cat wrong-passwords.txt
NotThis11
NotThis22
NotThis33
NotThis44
NotThis55
Los cinco son deliberadamente incorrectos para la cuenta de prueba. No añadas credenciales reales ni pruebes repetidamente otra cuenta. Hydra generará intentos acotados; esto no es una competición de velocidad ni una tarea para descubrir contraseñas.
127.0.0.1 es la dirección de bucle local de este contenedor; el puerto 8080 llega a su servicio local preparado, no a un sitio externo. El formulario principal envía una solicitud POST a /signin. POST lleva campos con nombre en su cuerpo. Aquí son username y password, separados por &. El argumento http-post-form de Hydra tiene tres partes separadas por dos puntos: ruta, campos y condición de respuesta. ^USER^ y ^PASS^ son marcadores de Hydra. S=Signed in as exige el texto de una respuesta realmente autenticada; una página limitada o rechazada no debe contar como un acceso válido.
Las opciones de Hydra son -I para ignorar un aviso anterior de restauración en este espacio, -l member para fijar un usuario, -P para su archivo de contraseñas proporcionado, -s para el puerto y -t 1 para un único trabajador. Un trabajador facilita observar esta secuencia pequeña. No crea un límite en el servidor. El argumento final entre comillas simples sigue siendo uno solo aunque contenga espacios y &.
El siguiente bloque también usa curl, un cliente HTTP de terminal. Es independiente del navegador y no reutiliza automáticamente su sesión. --data proporciona campos POST; -s oculta el indicador de progreso, -o guarda el cuerpo y -w muestra el estado HTTP. El \n entre comillas añade una nueva línea al estado mostrado. Las comillas simples reservan &, los espacios y %{http_code} para curl, en lugar de dejar que el shell los interprete. Estos dos accesos de diagnóstico usan contraseñas correctas conocidas.
Primero espera a que los intentos anteriores caduquen naturalmente. deskctl wait observa la disponibilidad; no reinicia contadores ni añade intentos:
deskctl wait
Ejecuta los siguientes tres comandos juntos, como un solo bloque. Capturan ambas respuestas durante el bloqueo de 12 segundos, de modo que no necesitas detenerte a leer entre comandos:
hydra -I -l member -P wrong-passwords.txt -s 8080 -t 1 127.0.0.1 http-post-form '/signin:username=^USER^&password=^PASS^:S=Signed in as'
curl -s -o test-login.html -w 'Test member HTTP %{http_code}\n' --data 'username=member&password=Member24' http://127.0.0.1:8080/signin
curl -s -o reference-login.html -w 'Reference member HTTP %{http_code}\n' --data 'username=reference&password=Reference24' http://127.0.0.1:8080/signin
Hydra debe informar de 0 valid password found, porque todos los candidatos son incorrectos. Ambas líneas de diagnóstico deben mostrar HTTP 429. Un 429 significa que el servicio limita los intentos; no dice que la contraseña sea incorrecta. Curl puede terminar normalmente al recibir un rechazo HTTP: lee el estado mostrado y el cuerpo guardado en vez de interpretar su estado de salida como autenticación. En este escenario, el tercer intento rechazado inicia el bloqueo, y los siguientes se limitan antes de comprobar sus contraseñas.
grep busca texto. Su opción -o muestra solo las palabras coincidentes y no la página HTML que las rodea:
grep -o 'Too many attempts' reference-login.html
La contraseña correcta de referencia también fue rechazada. Ese es el problema del servicio: el contador global pausa el nuevo acceso de otro miembro.
Lee los eventos existentes del servidor:
deskctl events
Busca member en /signin con resultados rejected, threshold y luego limited, seguido del acceso de reference marcado como limited. Son decisiones reales del servidor, no interpretaciones de la salida de Hydra. El historial sigue disponible después del bloqueo; no tienes que capturar una página fugaz.
Si alguno de los diagnósticos llegó demasiado tarde, deja que termine deskctl wait y repite el mismo bloque pequeño de tres comandos. Si Hydra informa de un error de sintaxis o conexión, corrige su argumento entre comillas, la dirección 127.0.0.1, el puerto 8080 o la ruta declarada antes de interpretar los resultados. Un fallo de conexión no es una prueba de protección correcta. HTTP 400 indica campos incorrectos; 404 indica una ruta incorrecta. Corrige esos errores habituales sin reiniciar el entorno.
Aplicar una política por cuenta
En este paso, cambia únicamente la clave del contador para que cada miembro tenga un límite independiente. Conserva los valores de formación y el mapa de entradas.
Permanece en Workstation. El siguiente comando reemplaza tu policy.json local. cat > policy.json escribe texto en el archivo; > sobrescribe un archivo existente. Un here-document proporciona las líneas hasta el cierre EOF. Las comillas de 'EOF' mantienen literal el contenido. Coloca el cierre solo en su línea, sin espacios iniciales:
cat > policy.json <<'EOF'
{
"key": "account",
"entry_groups": {
"/signin": "loans",
"/mobile/signin": "loans"
},
"failed_attempts": 3,
"window_seconds": 30,
"cooldown_seconds": 12
}
EOF
El único valor cambiado es key: account agrupa los intentos por el identificador de miembro enviado en lugar de combinar todas las cuentas. Reducir el umbral a cero, eliminar una cuenta o rechazar a todos no conservaría el servicio normal.
Aplica el archivo mediante el comando de control preparado:
deskctl apply policy.json --wait
apply valida el archivo y cambia explícitamente la política activa. --wait espera a que caduque naturalmente cualquier bloqueo o ventana parcial de fallos antes de aplicar una política distinta. Una ventana parcial puede tardar hasta 30 segundos en estabilizarse. La política anterior sigue activa durante esa espera. El comando no reinicia el servicio, descarta el historial ni borra contadores activos. Reaplicar exactamente la misma política no produce cambios y no puede desbloquear una cuenta.
La primera modificación debe mostrar ok: true, changed: true y una nueva revisión con key igual a account. Si ya aplicaste el mismo archivo válido, changed: false es normal.
deskctl status
Lee la política activa, no solo el archivo. Un error JSON suele indicar que falta una coma, comilla o llave: compara el archivo con el bloque completo, corrígelo y aplica de nuevo. Una política inválida deja intacta la política activa. No reinicies el servidor ni edites su implementación para superar la comprobación.
Demostrar la protección y la recuperación normal
En este paso, prueba la política efectiva, conserva el acceso del miembro de referencia y confirma que el miembro limitado se recupera naturalmente.
Permanece en Workstation. Empieza con contadores estabilizados naturalmente:
deskctl wait
Ejecuta de nuevo este bloque completo. Las rutas, las contraseñas de diagnóstico conocidas y los candidatos incorrectos no cambian; la clave activa del contador sí:
hydra -I -l member -P wrong-passwords.txt -s 8080 -t 1 127.0.0.1 http-post-form '/signin:username=^USER^&password=^PASS^:S=Signed in as'
curl -s -o test-login.html -w 'Test member HTTP %{http_code}\n' --data 'username=member&password=Member24' http://127.0.0.1:8080/signin
curl -s -o reference-login.html -w 'Reference member HTTP %{http_code}\n' --data 'username=reference&password=Reference24' http://127.0.0.1:8080/signin
Espera cero hallazgos de Hydra, Test member HTTP 429 y Reference member HTTP 200. La cuenta protegida sigue limitada, mientras que la cuenta de referencia ajena puede autenticarse. HTTP 200 no basta; comprueba la identidad en el cuerpo guardado:
grep -o 'Signed in as reference' reference-login.html
grep -o 'Too many attempts' test-login.html
Lee las decisiones registradas bajo la nueva revisión:
deskctl events
Debes ver un umbral y un acceso limitado de member junto a un acceso autenticado de reference. Solo los eventos de la política actual demuestran esa reparación. Las pruebas de la política global antigua se conservan, pero no demuestran la nueva. Si hiciste una pausa entre comandos y perdiste el bloqueo, espera naturalmente y repite el mismo bloque acotado; no amplíes los candidatos ni borres contadores.
Ahora deja terminar el bloqueo del miembro de prueba:
deskctl wait
Cambia a Equipment Desk. Selecciona Member sign-in, usa member / Member24, pulsa Sign in y después Open your record. Debe seguir siendo LN-204, Mina Park, Compact projector kit, con todos sus datos originales. Este nuevo acceso demuestra la recuperación tras la caducidad natural. Selecciona Sign out, usa Member sign-in con reference / Reference24 y abre LN-119 otra vez. Confirma la grabadora y la nota del protector de viento, y cierra la sesión.
Finalmente, selecciona Visitor guide. La información pública de recogida sigue disponible. Los accesos curl del terminal y este navegador usan sesiones separadas; la respuesta anterior de curl no autentica automáticamente al navegador. Si un registro devuelve 403, accede mediante el formulario real y usa Open your record. Corrige un error habitual de contraseña o ruta en vez de reiniciar la VM.
Tu policy.json coincide ahora con la política real por cuenta. El servidor tiene pruebas auténticas de la revisión actual: fallos repetidos, un intento con contraseña correcta limitado, una autenticación normal de referencia durante ese límite y un nuevo acceso de prueba recuperado naturalmente, con ambos registros originales intactos. La evaluación lee esos hechos existentes y las páginas públicas; no envía accesos que falten, restablece límites ni completa la recuperación por ti. Esta formación controlada en un único proceso demuestra el comportamiento local declarado, no una defensa completa de producción frente a todos los ataques de autenticación.
Resumen
Usaste una secuencia acotada de Hydra para exponer un contador global, aplicaste una política por cuenta sin reiniciar ni restablecer el servicio y verificaste tanto el rechazo como la disponibilidad. El miembro de prueba siguió limitado incluso con una contraseña correcta, otro miembro pudo autenticarse y la caducidad natural restauró el acceso a registros intactos. La política actual y las decisiones reales del servidor establecen el resultado, no una salida vacía de Hydra ni un estado verde por sí solos.



