Введение
Gearroom выдаёт оборудование местным мастерам. Участники входят, чтобы прочитать свои сведения о получении, возврате и упаковке. Ограничение входа должно приостанавливать повторный подбор паролей, но текущий счётчик общий для всех. Ошибки одного участника могут помешать другому начать работу.
Создайте небольшой повторяемый тест с Hydra, привяжите счётчик к учётной записи и продемонстрируйте защиту вместе с обычным доступом. Результат — действующая политика, настоящая аутентификация и неизменённые записи о выдаче, а не отчёт. Блокировать разрешено только указанного синтетического тестового участника. Для контрольного участника используйте только известный правильный пароль; не меняйте сервер, учётные записи и исходные записи.
Нужны базовый ввод в терминале, распознавание путей и переключение вкладок. Необходимые параметры Hydra, поля формы, кавычки оболочки и структура политики JSON объясняются здесь. Подготовленный терминал Workstation и сайт Equipment Desk — два интерфейса одного изолированного учебного контейнера. Этот модуль запускается независимо от других работ. Все люди, пароли и записи — локальные синтетические учебные данные.
Отведите около 55 минут с учётом чтения и обычных ошибок. Это авторская оценка, не результат замеров среди начинающих. Небольшое ограничение — три ошибки за 30 секунд и затем блокировка на 12 секунд — учебное условие, а не рекомендация для рабочей среды.
Подтвердите вход двух участников
На этом шаге откройте записи двух известных участников до проверки ограничения. Успешная аутентификация означает, что сервер принял конкретную личность; она определяет, какую запись вы можете видеть.
Откройте Equipment Desk. Выберите Review brief в верхней навигации. Разрешённый тестовый участник — member, пароль Member24. Обычный контрольный участник — reference, пароль Reference24. Это известные данные, искать пароли не требуется.

Используйте два подписанных поля и кнопку Sign in. Строка под формой показывает настоящий путь POST и передаваемые имена полей.
Выберите Member sign-in, введите тестовые данные и нажмите Sign in. Ожидайте Signed in as member. Выберите Open your record. Проверьте выдачу LN-204, Mina Park, Compact projector kit, получение Thursday 14:00, возврат Monday 10:00 и примечание о кабеле HDMI в боковом кармане. Выберите Sign out.

Сопоставьте Member и Record с оборудованием, получением, возвратом и примечанием. Успешный вход сам по себе не доказывает целостность исходной записи.
Снова выберите Member sign-in, используйте контрольные данные и откройте Open your record. Проверьте LN-119, Theo Bell, Portable audio recorder и примечание о ветрозащите. Снова выберите Sign out. Это разные записи, и сохранить обе — часть задачи. После успешного входа браузер обычно автоматически сохраняет cookie — выданный сервером идентификатор сеанса. Выход завершает этот сеанс.
Переключитесь на Workstation. Настроенный начальный каталог — /home/labex/project/login-limits. Команда pwd показывает текущий каталог:
pwd
Ожидается /home/labex/project/login-limits. Если вы перешли в другое место, cd меняет каталог:
cd /home/labex/project/login-limits
cat показывает файл. Прочитайте подготовленную политику:
cat policy.json
Это JSON — структурированный текст с именами полей в двойных кавычках. Двоеточия связывают имена со значениями, запятые разделяют поля, фигурные скобки окружают объект. Сейчас key равен global, поэтому один счётчик может включать разные учётные записи. failed_attempts, window_seconds и cooldown_seconds задают согласованные три ошибки, окно 30 секунд и блокировку на 12 секунд. entry_groups перечисляет подготовленные пути входа; в этом модуле сохраняйте это сопоставление. Группы входов вы исследуете в следующей независимой работе.
deskctl — подготовленная команда ограниченного обслуживания. Действие status читает настоящую активную политику, не выполняя вход, не очищая счётчики и не меняя сервис:
deskctl status
Активная политика должна совпадать с файлом. Редакция обозначает используемую сейчас политику. Последующее изменение файла не изменит активную политику, пока вы её не примените.
Наблюдайте проблему общего счётчика
На этом шаге отправляйте только предоставленные неверные пароли для разрешённого тестового участника, затем наблюдайте, как глобальный счётчик отклоняет и контрольного участника.
Оставайтесь в Workstation. Прочитайте полный файл разрешённых кандидатов:
cat wrong-passwords.txt
NotThis11
NotThis22
NotThis33
NotThis44
NotThis55
Все пять намеренно неверны для тестовой учётной записи. Не добавляйте настоящие данные и не проверяйте многократно другую запись. Hydra создаст ограниченное число попыток; это не соревнование скорости и не поиск пароля.
127.0.0.1 — адрес обратной петли учебного контейнера; порт 8080 ведёт к подготовленному локальному сервису, а не внешнему сайту. Основная форма отправляет запрос POST на /signin. POST передаёт именованные поля в теле. Здесь это username и password, разделённые &. Аргумент Hydra http-post-form состоит из трёх частей через двоеточие: путь, поля и условие ответа. ^USER^ и ^PASS^ — подстановки Hydra. S=Signed in as требует текст настоящего успешного ответа; ограниченная или отклонённая страница не должна считаться рабочим входом.
Параметры Hydra: -I игнорирует старое приглашение восстановления в рабочем каталоге, -l member фиксирует одного пользователя, -P указывает предоставленный файл паролей, -s — порт, -t 1 — одного исполнителя. Один исполнитель упрощает наблюдение небольшой последовательности, но не создаёт ограничение на сервере. Последний аргумент в одинарных кавычках остаётся одним аргументом даже с пробелами и &.
Следующий блок также использует curl, HTTP-клиент терминала. Он отделён от браузера и не переиспользует его сеанс автоматически. --data задаёт поля POST; -s скрывает индикатор, -o сохраняет тело, -w выводит статус HTTP. \n в кавычках добавляет перевод строки после статуса. Одинарные кавычки сохраняют &, пробелы и %{http_code} для curl, не позволяя оболочке их интерпретировать. Эти два диагностических входа используют известные правильные пароли.
Сначала дождитесь естественного истечения прежних попыток. deskctl wait наблюдает готовность, не сбрасывает счётчики и не добавляет попыток:
deskctl wait
Выполните следующие три команды вместе одним блоком. Они получают оба диагностических ответа во время 12-секундной блокировки, поэтому читать между командами не нужно:
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 должна сообщить 0 valid password found, поскольку все кандидаты неверны. Обе диагностические строки должны показать HTTP 429. Код 429 означает ограничение попыток, а не неверный пароль. Curl может нормально завершиться при отказе HTTP, поэтому читайте статус и сохранённое тело, а не принимайте код выхода за аутентификацию. В этом сценарии третья отклонённая попытка запускает блокировку; последующие ограничиваются до проверки пароля.
grep ищет текст. Параметр -o показывает только совпавшие слова, без окружающей страницы HTML:
grep -o 'Too many attempts' reference-login.html
Правильный контрольный пароль тоже отклонён. В этом и состоит проблема сервиса: глобальный счётчик останавливает новый вход другого участника.
Прочитайте существующие события сервера:
deskctl events
Найдите member на /signin с результатами rejected, threshold, затем limited, после которых вход reference отмечен limited. Это реальные решения сервера, а не интерпретация вывода Hydra. История остаётся доступной после блокировки; ловить кратковременную страницу не требуется.
Если диагностика запоздала, дождитесь окончания deskctl wait и повторите тот же небольшой блок из трёх команд. При ошибке синтаксиса или подключения Hydra сначала исправьте аргумент в кавычках, адрес 127.0.0.1, порт 8080 или указанный путь, затем оценивайте результат. Ошибка подключения не доказывает успешную защиту. HTTP 400 указывает неверные поля формы, 404 — неверный путь. Исправляйте обычные ошибки без сброса среды.
Примените политику по учётным записям
На этом шаге измените только ключ счётчика, чтобы каждому участнику соответствовало независимое ограничение. Сохраните учебные значения и сопоставление входов.
Оставайтесь в Workstation. Следующая команда заменяет локальный policy.json. cat > policy.json записывает текст в файл; > перезаписывает существующий файл. Here-document передаёт строки до завершающего маркера EOF. Кавычки в 'EOF' сохраняют содержимое буквально. Маркер должен находиться отдельно на строке без начальных пробелов:
cat > policy.json <<'EOF'
{
"key": "account",
"entry_groups": {
"/signin": "loans",
"/mobile/signin": "loans"
},
"failed_attempts": 3,
"window_seconds": 30,
"cooldown_seconds": 12
}
EOF
Меняется только key: account группирует попытки по переданному идентификатору участника, а не объединяет все записи. Уменьшение порога до нуля, удаление учётной записи или отказ всем не сохранят нормальную работу.
Примените файл подготовленной управляющей командой:
deskctl apply policy.json --wait
apply проверяет файл и явно меняет действующую политику. --wait перед применением изменённой политики ждёт естественного конца текущей блокировки или частичного окна ошибок. Частичное окно может завершаться до 30 секунд. Во время ожидания старая политика остаётся активной. Команда не перезапускает сервис, не удаляет историю и не очищает активные счётчики. Повторное применение той же политики ничего не меняет и не разблокирует учётную запись.
При первом изменении ожидайте ok: true, changed: true и новую редакцию с key, равным account. Если этот же правильный файл уже применён, changed: false — нормальный результат.
deskctl status
Читайте действующую политику, а не только файл. Ошибка JSON обычно означает пропущенную запятую, кавычку или скобку: сравните файл с полным блоком, исправьте и примените снова. Неверная политика не меняет действующую. Не перезапускайте сервер и не редактируйте его реализацию ради прохождения проверки.
Докажите защиту и нормальное восстановление
На этом шаге проверьте действующую политику, сохраните доступ контрольного участника и подтвердите естественное восстановление ограниченного тестового участника.
Оставайтесь в Workstation. Начните с естественно завершившихся состояний счётчиков:
deskctl wait
Повторите весь блок. Пути, известные диагностические пароли и набор неверных кандидатов прежние; изменился активный ключ счётчика:
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, Test member HTTP 429 и Reference member HTTP 200. Защищаемая запись всё ещё ограничена, а независимая контрольная может аутентифицироваться. Одного HTTP 200 недостаточно: проверьте личность в сохранённом теле:
grep -o 'Signed in as reference' reference-login.html
grep -o 'Too many attempts' test-login.html
Прочитайте решения новой редакции:
deskctl events
Должны быть порог и ограниченный вход member вместе с аутентифицированным входом reference. Только события текущей политики подтверждают исправление. История старой глобальной политики сохраняется, но не доказывает новую. Если вы остановились между командами и пропустили блокировку, дождитесь естественного конца и повторите тот же ограниченный блок; не расширяйте кандидатов и не очищайте счётчики.
Теперь дождитесь окончания блокировки тестового участника:
deskctl wait
Переключитесь на Equipment Desk. Выберите Member sign-in, используйте member / Member24, затем Sign in и Open your record. Должны сохраниться LN-204, Mina Park, Compact projector kit и все исходные сведения. Этот новый вход показывает восстановление после естественного окончания. Выберите Sign out, затем Member sign-in с reference / Reference24 и снова откройте LN-119. Подтвердите рекордер и примечание о ветрозащите, затем выйдите.
Наконец выберите Visitor guide. Публичная информация о получении остаётся доступной. Ваши входы curl в терминале и этот браузер используют отдельные сеансы; прежний ответ curl автоматически не авторизует браузер. Если запись возвращает 403, войдите через настоящую форму и используйте Open your record. Исправьте обычную опечатку в пароле или пути вместо перезапуска VM.
Ваш policy.json теперь соответствует реальной политике по учётным записям. У сервера есть настоящие доказательства текущей редакции: повторные ошибки, ограниченная попытка с правильным паролем, обычная контрольная аутентификация в тот же период и естественно восстановленный тестовый вход, при сохранении обеих исходных записей. Оценка читает существующие факты и публичные страницы; она не добавляет недостающие входы, не сбрасывает ограничения и не завершает восстановление за вас. Это контролируемое обучение с одним процессом доказывает заявленное локальное поведение, а не полноценную промышленную защиту от всех атак на аутентификацию.
Резюме
Ограниченной последовательностью Hydra вы обнаружили глобальный счётчик, применили политику по учётным записям без перезапуска или сброса сервиса и проверили отказ вместе с доступностью. Тестовый участник оставался ограниченным даже с правильным паролем, другой смог аутентифицироваться, а естественное окончание блокировки восстановило доступ к неизменённым записям. Результат подтверждают текущая политика и реальные решения сервера, а не пустой результат Hydra или один зелёный статус.



