Наличие локальной аварийной учётной записи не делает её второй попыткой для каждого отклонённого входа. В модели AAA Cisco IOS и IOS XE к этой базе обращаются только тогда, когда предыдущий метод завершается неудачей определённым образом, а сервер RADIUS, отвечающий отказом, не потерпел неудачу таким образом. Локальная учётная запись покрывает недоступный метод, а не отклонённый. Вера в обратное превращает решение политики в поиск несуществующей неисправности сервера.

Почему список методов выглядит как лестница

Строка вида aaa authentication login default group radius local читается слева направо, и большинство людей читают её как попробуй RADIUS, затем попробуй локальную базу. Синтаксис приглашает к такому чтению, потому что список — это последовательность. Смысл уже: список называет методы аутентификации, а правило перехода от одного к следующему зависит от результата предыдущего метода, а не от предоставления пользователю ещё одной попытки.

Метод, возвращающий ошибку, и метод, возвращающий неудачу, приводят здесь к разным результатам. Отказ — это ответ, потому что сервер обработал учётные данные и сказал нет, и список на этом останавливается. Недоступный сервер, истёкший запрос или ответ, который невозможно проверить, — это случай, позволяющий выполняться следующему методу, и только там, где обработка сбоев платформы настроена так. Поэтому классический совет добавить local работает при сбоях и ничего не делает при неверных паролях. Читайте список вместо этого как два вопроса: какой метод отвечает и что платформа считает ответом.

Отделите список методов от группы серверов

Список методов — один слой, а группа серверов — другой. Ключевое слово group radius называет группу, чей внутренний порядок, повторные попытки, тайм-ауты и обнаружение мёртвого сервера принадлежат группе, тогда как локальный метод — слой над ней. Поэтому настройка чего-либо внутри группы не может превратить отказ в резервный путь. Прежде чем менять любой из двух слоёв, подтвердите, на какой список служба действительно ссылается.

Выведите конфигурацию AAA и прочитайте список, на который указывает служба, а не значение по умолчанию, которое вы помните, что записали. Сделайте это с устройства, на котором служба действительно завершается.

show running-config | section aaa
show radius server-group RAD-GRP
show aaa servers

Таблица серверов сообщает состояние и счётчики каждой записи, что говорит вам, достиг ли шлюз сервера во время попытки. Сервер, отмеченный как работающий с растущим счётчиком запросов, отвечал, так что неудачный вход — это решение, а не проблема связности.

Прочитайте ответ прежде журнала

Код ответа называет результат и подразумевает собственный следующий шаг. Access-Reject означает, что серверная часть приняла решение, поэтому полезное доказательство — совпавшая политика и состояние учётной записи за ней. Access-Challenge означает, что обмен требует ещё одного поддерживаемого шага, например второго фактора, а локальный резервный путь молча пропустил бы то, что требует политика.

Воспроизведите одну попытку с назначенной тестовой учётной записью, чтобы ответ и запись серверной части можно было сравнить в одной отметке времени. Используйте учётные данные, сбой которых вам разрешён.

test aaa group RAD-GRP svc-ops 'LabPass!24' legacy
debug radius authentication

Отсутствующая или нераспознанная запись клиента RADIUS — частая причина тихого тайм-аута, потому что сервер получает запрос, не находит подходящего определения клиента и отбрасывает его без ответа. Несовпадение общего секрета тоже обычно выглядит как тайм-аут, потому что ответ не проходит проверку и отбрасывается. Ни то, ни другое не выглядит как Access-Reject, и ни то, ни другое не исправляется добавлением локальной учётной записи. Проверьте определение клиента и секрет с обеих сторон, прежде чем трогать список методов.

Почему локальная учётная запись ничего не доказала

Учётная запись, стоящая после группы в списке, доказывает лишь то, что кто-то запланировал сбой. Она ничего не говорит о том, работает ли план, потому что случай, который его проверяет, — это случай, который никто не репетирует: сервер перестал отвечать. Локальный вход, до которого в нормальной работе никогда не доходят, может месяцами нести просроченный пароль или заблокированное состояние, и никто этого не замечает.

Аварийный доступ — это проектное решение, а не побочный эффект конфигурации. Дайте ему собственную ограниченную учётную запись, собственного ответственного и письменную процедуру восстановления, и включите ротацию общего секрета в эту процедуру. Хранение локального пароля с одним и тем же именем для каждого центрального пользователя — это шаблон, который тихо возвращает доступ, который вы считали удалённым.

Тест, который имеет значение, намеренный, и он прервёт входы, пока выполняется. Именно поэтому он относится к запланированному окну с шагом отката, написанным первым.

Проверьте резервный путь в окне обслуживания

Упорядочьте тест так, чтобы никогда не удалить последний путь входа. Сначала подтвердите независимый путь управления, затем обычный разрешённый доступ, затем намеренный отказ, затем утверждённое поведение при сбое. У этих четырёх случаев разные ожидаемые результаты, и сведение их в один тест — это способ, которым люди запирают себя снаружи устройства, которое им всё ещё нужно.

Выполняйте каждую проверку из консольной сессии или из внешнего пути, чтобы ошибка не могла закрыть сессию, в которой вы работаете. Консоль — единственный путь, не зависящий от тестируемого компонента.

show aaa servers
show running-config | include aaa authentication
test aaa group RAD-GRP svc-ops 'LabPass!24' legacy

Затем восстановите предыдущую конфигурацию и подтвердите, что счётчики снова двигаются при следующем реальном входе. Если намеренный отказ даёт локальный вход вместо отказа, значит список или обработка сбоев не та, что вы считали, и эта находка важнее сбоя, с которого вы начали. Запишите результат в журнал изменений рядом с именами учётных записей и датой теста.

Похожие статьи