Двухфакторная аутентификация (далее 2FA) (также часто называется двухфакторной авторизацией) — это метод защиты доступа, при котором пользователю для входа в систему необходимо подтвердить свою личность с помощью двух различных типов (факторов) данных, например пароль от учетной записи и TOTP- код или SMS/Push уведомление. Данный подход существенно снижает риск несанкционированного доступа, так как одной компрометации пароля злоумышленнику недостаточно для получения доступа.
В системе WNAM 2 для использования 2FA при использовании протокола TACACS+ для доступа администраторов к сетевому оборудованию имеется несколько способов проверки второго фактора авторизации:
Двухфакторная авторизация может использоваться как с локальными учетными записями администраторов оборудования, настроенных в WNAM 2 ("Device admin" → "Администраторы оборудования"), так и для доменных учетных записей ("Объекты" → "Службы каталогов")
Ниже приведена таблица совместимости методов 2FA для разных типов учетных записей:
| 2FA | Локальная учетная запись | Доменная учетная запись |
|---|---|---|
RADIUS через одноразовый код | Поддерживается | Поддерживается |
RADIUS через Push | Поддерживается | Поддерживается |
TOTP код портала самообслуживания | Не поддерживается | Поддерживается |
Для всех вариантов проверки второго фактора и типов учетных записей в правилах TACACS+ ("Device admin" → "Правила TACACS+") в разделе "Проверка администратора" должно быть включено требование двухфакторной авторизации.
Пример правил TACACS+ для локальных и доменных учетных записей:
Локальные УЗ:

Доменные УЗ:

В данном руководстве в качестве тестового будет использоваться коммутатор Cisco vIOS
Switch>sh version Cisco IOS Software, vios_l2 Software (vios_l2-ADVENTERPRISEK9-M), Experimental Version 15.2(20200924:215240) [sweickge-sep24-2020-l2iol-release 135] |
Для проверки авторизации через локальные учетные записи будет использоваться УЗ test_admin, через доменные учетные записи - vpupkin. Одноразовый код для проверки через RADIUS - 111111
В качестве внешнего RADIUS серврера будет использоваться отдельная инсталляция WNAM 2, на которой также будут заведены вышеуказанные учетные записи где, в зависимости от способа прверки второго фактора, в качестве пароля будет указан либо пароль от учетной записи либо правильный одноразовый код. В реальной эксплуатации логика проверки учетных данных и принятия решения об авторизации может быть любой.
Адрес сервера WNAM 2 - 172.16.133.51, внешнего RADIUS сервера - 172.16.133.35
| Перед настройкой двухфакторной авторизациии через TACACS+ необходимо настроить и убедится в работоспособности авторизации через TACACS без использования 2FA, причем именно с тем типом учетных записей (либо со всеми типами учетных записей) с которым будет работать 2FA и только после этого приступать к настройке двухфакторной авторизации |
После успешной проверки учетных данных администратора сетевое устройство запрашивает у авторизующегося администратора OTP код, после чего по протоколу RADIUS отправляет имя пользователя и введенный код на внешний RADIUS сервер, указанный в настройках WNAM 2 ("Настройки" → "Двухфакторная авторизация"). Если внешний RADIUS сервер возвращает Access-Accept, то происходит успешная авторизация администратора на устройстве. В случае если ответ Access-Reject, код запрашивается повторно (количество повторов настраивается в настройках 2FA) и если ответ также Access-Reject, то авторизации не происходит.
Данный способ поддерживает работу как с локальными учетными записями, так и с учетными записями из служб каталогов настроенных в WNAM 2 (доменные учетные записи)
Для настройки необходимо настроить 2FA глобально (и также, как указано выше, необходимо включить требование использования двухфакторной авторизации в правиле TACACS+)
В меню "Настройки" → "Двухфакторная авторизация" необходимо включить способ "RADIUS", указать адрес (или адреса, если серверов несколько), секретный ключ, и указать в поле "Предпочтительный способ авторизации" - "Одноразовый код"

| Отличий в настройке данного способа авторизации для локальных и доменных учетных записей нет, кроме стандарных различий в правилах TACACS+ (см. соответствующий раздел документации) |
При попытке авторизации на тестовом коммутаторе по протоколу TACACS+ сначала проверяется правильность введенных учетных данных администратора. Вводим логин test_admin и пароль (admin)
Далее если учетные данные верные коммутатор запрашивает OTP код, вводим код 1111111 и после ввода на внешний RADIUS сервер отправляется запрос Access-Request содержащий имя пользователя в атрибуте User-Name и введенный код в атрибуте User-Password
Далее в ответ приходит Access-Accept и коммутатор разрешает нам доступ в консоль
username: test_admin password: Enter OTP code: Switch> |
Обмен со сторонним RADIUS сервером:
RADIUS Protocol Code: Access-Request (1) Packet identifier: 0x22 (34) Length: 50 Authenticator: 13a9aecde9c34543ccbb93ad324a4ad9 [The response to this request is in frame 2] Attribute Value Pairs AVP: t=User-Name(1) l=12 val=test_admin Type: 1 Length: 12 [Length: 10] User-Name: test_admin AVP: t=User-Password(2) l=18 val=Decrypted: 111111 Type: 2 Length: 18 [Length: 16] User-Password: 111111 RADIUS Protocol Code: Access-Accept (2) Packet identifier: 0x22 (34) Length: 38 Authenticator: 11cb94c82ed7d389b23153f2d17568aa [This is a response to a request in frame 1] [Time from request: 15.288000 milliseconds] Attribute Value Pairs AVP: t=Message-Authenticator(80) l=18 val=2d4442772d98aef90220025f2d4f4e14 Type: 80 Length: 18 [Length: 16] Message-Authenticator: 2d4442772d98aef90220025f2d4f4e14 |
Соответственно в случае если OTP код введен неверный в ответ приходит Acces-Reject запрос повторяется (снова в сторону внешнего RADIUS сервера отправляется пакет Access-Request) и в случае повторного ввода неправильно кода RADIUS сервер снова отвечает Acces-Reject и следует отказ в авторизации:
username: test_admin password: Enter OTP code: Enter OTP code: Password confirmation failure username: |

Лог TACACS сессии в WNAM 2:
+0 ms: authentication ASCII request username +2621 ms:authentication ASCII continue, request password +1555 ms:authentication local user found, name: test_admin +0 ms:profile matching profiles to check: 2 +119 ms:adctool domain login check domain: lab.wnam.ru success +0 ms:membership check test_admin user is not found or password incorrect in the domain lab.wnam.ru +0 ms:password check in AD test_2fa_domain: failed +1 ms:check profile test_2fa_domain: user from directory doesn't match +0 ms:check profile test_2fa_local_admin: matching found +0 ms:profile matching test_2fa_local_admin +0 ms:authorization add 0 command set commands, 0 profile commands, 0 user commands +0 ms:authorization 0 profile attributes +1 ms:policy getAuthentication user 'test_admin' succeeded, privilege level: 15 +0 ms:authentication ASCII success +0 ms:two-factor auth code requested +1678 ms:two-factor auth the code verification was successful |
После успешной проверки учетных данных администратора, после чего по протоколу RADIUS отправляется имя пользователя и пароль на внешний RADIUS сервер, указанный в настройках WNAM 2 ("Настройки" → "Двухфакторная авторизация"). Если внешний RADIUS сервер возвращает Access-Accept, то происходит успешная авторизация администратора на устройстве. В случае если ответ Access-Reject, код запрашивается повторно (количество повторов настраивается в настройках 2FA) и если ответ также Access-Reject, то авторизации не происходит. В данном способе при авторизации дополнительно никакой код не запрашивается, вся проверка проводится на внешнем сервере на основании введенных учетных данных.
Данный способ поддерживает работу как с локальными учетными записями, так и с учетными записями из служб каталогов настроенных в WNAM 2 (доменные учетные записи)
Для настройки необходимо настроить 2FA глобально (и также, как указано выше, необходимо включить требование использования двухфакторной авторизации в правиле TACACS+)
В меню "Настройки" → "Двухфакторная авторизация" необходимо включить способ "RADIUS", указать адрес (или адреса, если серверов несколько), секретный ключ, и указать в поле "Предпочтительный способ авторизации" - "Пуш в приложение"

При попытке авторизации на тестовом коммутаторе по протоколу TACACS+ сначала проверяется правильность введенных учетных данных администратора. Вводим логин vpupkin и пароль (vpupkin)
Далее если учетные данные верные WNAM 2 отправляет на внешний RADIUS сервер запрос Access-Request содержащий имя пользователя в атрибуте User-Name и пароль в атрибуте User-Password
Далее в ответ приходит Access-Accept и коммутатор разрешает нам доступ в консоль
username: vpupkin password: Switch> |
Обмен со сторонним RADIUS сервером:
![]()
RADIUS Protocol
Code: Access-Request (1)
Packet identifier: 0x2e (46)
Length: 47
Authenticator: b0275fc67943e9be93aa45e73358cf85
[The response to this request is in frame 41]
Attribute Value Pairs
AVP: t=User-Name(1) l=9 val=vpupkin
Type: 1
Length: 9
[Length: 7]
User-Name: vpupkin
AVP: t=User-Password(2) l=18 val=Decrypted: vpupkin
Type: 2
Length: 18
[Length: 16]
User-Password: vpupkin
RADIUS Protocol
Code: Access-Accept (2)
Packet identifier: 0x2e (46)
Length: 38
Authenticator: b3cfb19e654bf41cd15538be799c1a17
[This is a response to a request in frame 40]
[Time from request: 90.439000 milliseconds]
Attribute Value Pairs
AVP: t=Message-Authenticator(80) l=18 val=e7b3aaf9c2e51a0d204a4369343756d2
Type: 80
Length: 18
[Length: 16]
Message-Authenticator: e7b3aaf9c2e51a0d204a4369343756d2 |
Лог TACACS сессии в WNAM 2:
+0 ms:authentication ASCII request username +2449 ms:authentication ASCII continue, request password +2677 ms:profile matching profiles to check: 2, method=ACTIVE_DIRECTORY +183 ms:adctool domain login check domain: lab.wnam.ru success +1 ms:group membership check test_2fa_domain: matched user 'vpupkin' in group 'Пользователи домена' +0 ms:password check in AD test_2fa_domain: success +0 ms:check profile test_2fa_domain: matching found +0 ms:profile matching test_2fa_domain +0 ms:local user vpupkin requesting active directory over LDAP +0 ms:authorization add 0 command set commands, 0 profile commands, 0 user commands +0 ms:authorization 0 profile attributes +7 ms:policy getAuthentication user 'vpupkin' succeeded, privilege level: 1 +1 ms:authentication ASCII success +86 ms:two-factor auth the verification was successful |
| Данный способ проверки второго фактора работает только с доменными учетными записями. В случае использования локальной учетной записи будет применен настроный глобально RADIUS-способ проверки. В случае если глобально не настроен ни один способ 2FA локальный пользователь будет получать отказ в авторизации вне зависимости от правильности ввода учетных данных! |
| Данный способ проверки второго фактора для доменных учетных записей имеет приоритет над остальными способами. Т.е. если для доменного пользователя инициализирован TOTP код на портале самообслуживания, то остальные способы проверки для данной учетной записи использоваться не будут, независимо от глобальных настроек. |
После успешной проверки учетных данных администратора сетевое устройство запрашивает у авторизующегося администратора OTP код, который администратор должен получить в одном из приложений для генерации кодов (например Яндекс Ключ, FreeOTP, Google Authenticator или любое другое работающее с использованием алгоритма TOTP) зарегистрировавшись на портале самообслуживания WNAM 2. После успешной проверки кода происходит авторизация администратора на устройстве.
В первую очередь необходимо включить в настройках портала самообслуживания самостоятельную регистрацию одноразовых (TOTP) кодов ("NAC" → "Самообслуживание"):

Далее необходимо инициализировать OTP код на портале самообслуживания WNAM 2.
Портал самообслуживания находится по адресу https://<Адрес сервера WNAM 2>/selfservice (В данном примере https://172.16.133.51/selfservice/)
Администратор оборудования должен войти под своей доменной учетной записью на портал самообслуживания WNAM 2.

В разделе "Одноразовые ТОТР-коды" нужно нажать кнопку "Сформировать QR-код"

Появится окно с QR кодом для приложения для генерации TOTP кодов.

Далее при помощи такого приложения (в данном примере это FreeOTP, но можно использовать и любое другое приложение с таким функционалом) необходимо добавить данный код в приложение. Как только данный код добавлен нужно нажать на кнопку "Ввести код" и ввести код из приложения в портале самообслуживания.
Также в правилах TACACS необходимо включить требование двухфакторной авторизации в разделе "Проверка администратора"
При попытке авторизации на тестовом коммутаторе по протоколу TACACS+ сначала проверяется правильность введенных учетных данных администратора. Вводим логин vpupkin и пароль (vpupkin)
Далее если учетные данные верные происходит проверка OTP кода - появляется запрос на ввод OTP кода. Администратор вводит код из приложения для генерации кодов и если код верный - происходит авторизация администратора на оборудовании.
username: vpupkin password: Enter OTP code: Switch> |
+0 ms: authentication ASCII request username +5251 ms:authentication ASCII continue, request password +4088 ms:profile matching profiles to check: 2, method=ACTIVE_DIRECTORY +133 ms:adctool domain login check domain: lab.wnam.ru success +1 ms:group membership check test_2fa_domain: matched user 'vpupkin' in group 'Пользователи домена' +0 ms:password check in AD test_2fa_domain: success +1 ms:check profile test_2fa_domain: matching found +0 ms:profile matching test_2fa_domain +0 ms:local user vpupkin requesting active directory over LDAP +0 ms:authorization add 0 command set commands, 0 profile commands, 0 user commands +0 ms:authorization 0 profile attributes +8 ms:policy getAuthentication user 'vpupkin' succeeded, privilege level: 1 +0 ms:authentication ASCII success +0 ms:two-factor auth code requested +4348 ms:two-factor auth the verification was successful |