Introducción
El punto de atención del mercado de Gearroom ofrece una página principal de acceso y otra móvil. Ambas abren el préstamo del mismo miembro. La política ya cuenta por cuenta, pero las dos páginas mantienen contadores separados. Un miembro limitado en una página todavía puede autenticarse en la otra.
Usa intentos acotados de Hydra para demostrar ese fallo y después reúne ambas entradas bajo un límite compartido por cuenta. Demuestra las dos direcciones, conserva el acceso normal de otro miembro y confirma la recuperación tras la caducidad natural. Entregarás una política efectiva en ejecución con un historial real de solicitudes y registros intactos, no un informe.
Este laboratorio se apoya en Limit Attempts by Account: debes reconocer su argumento de formulario de Hydra, el marcador positivo conocido, la política JSON, los diagnósticos curl y los comandos deskctl. Esos mecanismos no cambian. Este entorno se inicializa de nuevo con otros miembros y registros; no se transfieren archivos, sesiones ni procesos anteriores. Workstation es el terminal preparado y Equipment Desk es el sitio. Ambas interfaces pertenecen al mismo contenedor aislado. Todas las cuentas y datos son recursos sintéticos locales.
Reserva unos 50 minutos, incluyendo lectura y errores habituales; es una estimación del autor, no un tiempo medido con principiantes. Solo el miembro de prueba declarado puede recibir contraseñas incorrectas repetidas. El miembro de referencia debe usar su contraseña correcta conocida. Conserva el servicio original, las cuentas, los registros y los valores de formación.
Confirmar dos puntos de entrada para una cuenta
En este paso, establece que ambas páginas autentican realmente al mismo miembro y abren el mismo préstamo. Unas etiquetas similares no demuestran por sí solas una identidad compartida.
Abre Equipment Desk y después Review brief. El miembro de prueba autorizado es samplemember, con contraseña Sample24. El miembro de referencia normal es deskteam, con contraseña Desk24.
Selecciona Member sign-in, envía las credenciales de prueba y selecciona Open your record. Comprueba samplemember, el préstamo LN-318, Jules Chen, Workshop camera kit, recogida Friday 09:30, devolución Monday 16:00 y la nota de la bolsa etiquetada para ambas baterías. Selecciona Sign out.

Compara Member y Record, ambas horas y la nota de embalaje después de cada acceso real. Las dos páginas deben abrir este mismo registro.
Selecciona Mobile sign-in, usa las mismas credenciales y abre el registro. Comprueba la misma identidad, préstamo y todos los detalles; después cierra la sesión. Son dos entradas al mismo directorio de miembros, no cuentas ni hosts distintos.
Selecciona Member sign-in, usa deskteam / Desk24 y abre su registro. Es LN-087, Ari Lane, Folding projection screen, con la nota de mantener seca la pantalla antes de embalarla. Cierra la sesión otra vez.
Cambia a Workstation. La interfaz empieza en /home/labex/project/login-limits; pwd muestra la ubicación:
pwd
Si estás en otro lugar, usa el mismo comando de cambio de directorio que antes:
cd /home/labex/project/login-limits
Lee la política preparada y la política activa real:
cat policy.json
deskctl status
La clave key ya es account. En entry_groups, /signin pertenece a desktop, mientras que /mobile/signin pertenece a mobile. Un grupo identifica las entradas que comparten un contador para esa cuenta. Actualmente, etiquetas distintas dan contadores separados al mismo miembro. Conserva tres fallos, la ventana de 30 segundos y el bloqueo de 12 segundos.
Observar el fallo en la entrada alternativa
En este paso, limita la entrada principal y demuestra un acceso auténtico por la entrada móvil durante ese mismo bloqueo.
Permanece en Workstation. El archivo preparado sigue conteniendo solo cinco candidatos deliberadamente incorrectos para el miembro autorizado:
cat wrong-passwords.txt
Las rutas POST reales aparecen debajo de ambos formularios visibles. Usan los mismos campos username y password. La dirección local 127.0.0.1 y el puerto 8080 llegan a este servicio de formación. La opción -l de Hydra selecciona ahora samplemember; -P, -s, -t 1, -I, el argumento POST entre comillas y S=Signed in as tienen el mismo significado que en el primer laboratorio. Todos los candidatos son incorrectos, así que una ejecución completa debe informar de 0 valid password found; esa salida sola no demuestra que la entrada alternativa esté protegida.
Deja caducar naturalmente los intentos anteriores:
deskctl wait
Ejecuta los siguientes cuatro comandos juntos, sin detenerte a leer entre ellos. Las solicitudes curl usan contraseñas correctas conocidas; -o guarda cada cuerpo de respuesta y -w muestra su estado HTTP:
hydra -I -l samplemember -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 main-probe.html -w 'Main HTTP %{http_code}\n' --data 'username=samplemember&password=Sample24' http://127.0.0.1:8080/signin
curl -s -o mobile-probe.html -w 'Mobile HTTP %{http_code}\n' --data 'username=samplemember&password=Sample24' http://127.0.0.1:8080/mobile/signin
curl -s -o reference-probe.html -w 'Reference HTTP %{http_code}\n' --data 'username=deskteam&password=Desk24' http://127.0.0.1:8080/mobile/signin
Espera Main HTTP 429, Mobile HTTP 200 y Reference HTTP 200. El mismo miembro está limitado en la entrada principal, pero puede autenticarse en la móvil. Confirma la identidad móvil en lugar de confiar solo en 200:
grep -o 'Signed in as samplemember' mobile-probe.html
Lee las decisiones auténticas del servidor:
deskctl events
Busca un umbral de samplemember en /signin, un acceso principal limitado y otro autenticado en /mobile/signin, bajo la misma revisión. Un evento limitado de una sola entrada no demuestra un límite entre entradas. El miembro de referencia sigue siendo otra cuenta; su éxito no repara este fallo.
El historial continúa disponible después del bloqueo. Si perdiste la ventana de observación, deja terminar deskctl wait y repite el mismo bloque acotado. Ante un error de conexión o sintaxis de Hydra, corrige primero el argumento completo, la dirección, el puerto y la ruta declarada. HTTP 400 significa que los nombres de campo o la estructura enviados son incorrectos; 404 indica una ruta incorrecta. Un error habitual de escritura no requiere restablecer la VM.
Agrupar ambas páginas para una misma cuenta
En este paso, haz que ambas rutas POST usen un contador para el mismo miembro. Las cuentas deben seguir separadas entre sí.
Permanece en Workstation. Reemplaza tu archivo de política por el objeto completo de abajo. El here-document entre comillas conserva el JSON literalmente; su cierre EOF debe ir solo en una línea, sin espacios iniciales. Como antes, > sobrescribe este archivo local:
cat > policy.json <<'EOF'
{
"key": "account",
"entry_groups": {
"/signin": "members",
"/mobile/signin": "members"
},
"failed_attempts": 3,
"window_seconds": 30,
"cooldown_seconds": 12
}
EOF
Ambas rutas tienen ahora la misma etiqueta de grupo. La etiqueta es un nombre corto no vacío, no una palabra clave especial: se permite otro nombre compartido equivalente. Puede contener hasta 48 caracteres. Conserva la clave por cuenta, las dos claves de ruta reales y los números acordados. Quitar una ruta, desactivar un formulario o volver al contador global no cumpliría la tarea.
Aplica explícitamente el archivo:
deskctl apply policy.json --wait
Los cambios de política esperan a que el estado de intentos existente caduque naturalmente. No se borra ningún contador activo, historial ni registro de miembro, y el proceso no se reinicia. Reaplicar la misma política sigue sin producir cambios. Una coma JSON ausente o un campo incorrecto deja activa la política anterior; corrige el archivo antes de reintentar.
deskctl status
Confirma la clave activa account y las etiquetas coincidentes bajo una nueva revisión. Un archivo local correcto no basta hasta que el servicio lo use. Ahora necesitas pruebas de esta revisión y no los eventos anteriores de grupos separados.
Probar ambas direcciones y conservar el acceso
En este paso, demuestra que los fallos de cualquiera de las páginas limitan la otra, mientras que el miembro de referencia puede trabajar y el de prueba se recupera naturalmente.
Permanece en Workstation. Prueba primero de la entrada principal a la móvil:
deskctl wait
Ejecuta junto este bloque completo:
hydra -I -l samplemember -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 mobile-probe.html -w 'Mobile HTTP %{http_code}\n' --data 'username=samplemember&password=Sample24' http://127.0.0.1:8080/mobile/signin
curl -s -o reference-probe.html -w 'Reference HTTP %{http_code}\n' --data 'username=deskteam&password=Desk24' http://127.0.0.1:8080/mobile/signin
Espera cero hallazgos de Hydra, Mobile HTTP 429 y Reference HTTP 200. Los dos cuerpos guardados deben concordar:
grep -o 'Too many attempts' mobile-probe.html
grep -o 'Signed in as deskteam' reference-probe.html
deskctl events
La revisión actual debe mostrar el umbral principal, el rechazo móvil y la autenticación normal de referencia. Espera la recuperación natural:
deskctl wait
Cambia a Equipment Desk, selecciona Mobile sign-in, usa samplemember / Sample24 y selecciona Open your record. Comprueba el préstamo de cámara LN-318 intacto y la nota de la bolsa para baterías; después pulsa Sign out. Este nuevo acceso móvil confirma la recuperación del límite de la entrada principal.
Vuelve a Workstation. Invierte ahora la dirección:
deskctl wait
Ejecuta junto este bloque completo:
hydra -I -l samplemember -P wrong-passwords.txt -s 8080 -t 1 127.0.0.1 http-post-form '/mobile/signin:username=^USER^&password=^PASS^:S=Signed in as'
curl -s -o main-probe.html -w 'Main HTTP %{http_code}\n' --data 'username=samplemember&password=Sample24' http://127.0.0.1:8080/signin
curl -s -o reference-probe.html -w 'Reference HTTP %{http_code}\n' --data 'username=deskteam&password=Desk24' http://127.0.0.1:8080/signin
Espera cero hallazgos, Main HTTP 429 y Reference HTTP 200:
grep -o 'Too many attempts' main-probe.html
grep -o 'Signed in as deskteam' reference-probe.html
deskctl events
Esta vez, el umbral móvil debe ir seguido del rechazo principal. Es otra dirección, no una copia renombrada del primer resultado. Si el diagnóstico llegó tarde, deja estabilizar naturalmente el estado y repite esa dirección acotada; no amplíes los candidatos ni restablezcas los contadores.
deskctl wait
Cambia a Equipment Desk, selecciona Member sign-in, usa samplemember / Sample24 y abre el préstamo original LN-318. Ese acceso principal demuestra la recuperación del límite móvil. Cierra la sesión y usa Member sign-in con deskteam / Desk24 para abrir LN-087, comprobando la pantalla y la nota sobre embalarla seca. Cierra la sesión otra vez y abre Visitor guide.
El navegador crea su propia sesión después de cada acceso real; las respuestas de diagnóstico curl no lo autentican. Si un registro devuelve 403, corrige el acceso real del navegador y usa Open your record. Corrige los errores habituales de contraseña o ruta sin reiniciar el escenario.
Ambas entradas reales siguen ahora un límite por cuenta, con pruebas de la política actual en las dos direcciones, acceso de referencia conservado, recuperación natural y registros intactos. La evaluación lee estos hechos existentes y las páginas públicas; no realiza pruebas ni recuperaciones que falten. Esto demuestra el comportamiento local declarado de un único proceso, no un límite distribuido de producción ni una defensa contra todas las formas de acceso automatizado.
Resumen
Confirmaste que dos páginas reales comparten una identidad, reprodujiste un fallo debido a grupos de entrada separados y aplicaste un contador compartido por cuenta. Las pruebas acotadas de Hydra demostraron ambas direcciones, el acceso normal de referencia y la recuperación natural a registros intactos. Ni el rechazo de una sola página ni el historial de la política anterior establecen el resultado completo.



