CISCO AAA

CISCO AAA — настройка оборудования CISCO для работы с AAA. Общие сведения, концепция AAA, необходимые команды CLI.

Тема AAA хоть и является важной, но как-то она находится не в центре внимания. Во-первых, это вспомогательный механизм (такой же, к примеру, как SNMP, NTP, DHCP..). Во-вторых, требуется настройка сервера AAA, что обычно не входит в обязанности сетевого инженера.

Отсюда бОльшая часть статей, которые встречал в интернете на тему ААА, ну.. мне они не понравились. Просто кусок (булыжник/кирпич) команд без всякого объяснения. Да и команды.. это рабочее всё конечно, но команды не самые оптимальные. Кроме этого, ни слова про локальный AAA.


Концепция AAA

Кратко суть понятия AAA (аутентификация, авторизация и аккаунтинг):

  • Authentication — Пользователь должен подтвердить, что он тот, за кого себя выдаёт;
  • Authorization — На основании учётной записи определяется к каким ресурсам пользователю может быть предоставлен доступ и какие действия может выполнять, затем этот доступ предоставляется;
  • Accounting — Учёт и аудит, осуществляет сбор информации по использованию пользователем сетевого устройства и формирует отчеты.

Модели организации удалённого доступа

Доступ к плоскости менеджмента может быть настроен по разному:

  • Настройкой пароля командой password на линии консоли и линиях VTY. При подключении к устройству нужно ввести только пароль. Такой метод считается уязвимым к подбору пароля, не рекомендуется к использованию;
  • С помощью локальной базы, вводится логин и пароль. Термин "локальная база" не подразумевает какую-то реальную базу данных, а только то, что реквизиты доступа хранятся на самом устройстве. Основная модель при небольшом числе устройств;
  • Локальный вариант AAA (является альтернативой модели локальной базы). Использует локальную базу для своей работы. Основное достоинство — предоставление резервных способов входа на устройство по сравнению с локальной базой;
  • Серверный AAA. Основная модель при большом числе устройств. Локальная база используется при этом как резервный способ входа на устройство. Этот вариант наиболее интересен, поэтому настраивать "на железе" и траблшутить буду только его (во 2 части).

Тестовая среда

Как всегда используем EVE-NG и возьмем 2 роутера с разными версиями IOS, так как команды отличаются:

  • Version 12.4(15)T14;
  • Version 15.6(2)T

CISCO AAA

Ну и собственно на этих роутерах будем проверять всякие мульки из теории.

Включение AAA на устройстве

На устройстве CISCO по-умолчанию поддержка AAA выключена и в конфигурации можно увидеть:

!
no aaa new-model
!

Чтобы включить поддержку AAA нужно выполнить команду:

R1(config)# aaa new-model
  • До ввода этой команды никакие другие команды AAA недоступны и при попытке их ввода IOS будет вести себя так, как будто ничего про эти команды не знает;

CISCO AAA

Это может сбить с толку, поэтому если какая-то команда ААА не вводится, то первым делом нужно проверить наличие aaa new-model в конфигурации.

  • Сразу после ввода этой команды аутентификация по умолчанию автоматически переводится на использование локальной базы для всех линий, кроме консоли
Пример 1

Проверим на примере. Настроим на одном из роутеров (IOS15) вход только по паролю, как не рекомендуется делать 🙂

IOS15(config)# service password-encryption - чтобы пароль в явном виде не отсвечивал в конфигурации
IOS15(config)# line vty 0 15
IOS15(config-line)# password 123Cisco
IOS15(config-line)# transport input telnet - SSH не настроен
IOS15(config-line)# login - требует предварительного ввода команды password, иначе ошибка

И подсоединяемся с компьютера через Telnet:

CISCO AAA

Специально сделал акцент что будет, если не задан пароль на enable. Это важный момент номер один, поэтому:

IOS15(config)# enable secret Cisco123

Проверяем подключение ещё раз:

CISCO AAA

Успешный вход, включаем ААА:

IOS15# config t
IOS15(config)# aaa new-model

И снова пробуем подсоединиться:

CISCO AAA

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

Пример 1.1

Возвращаемся в прошлый пример и посмотрим в конфигурации на линии VTY до включения ААА:

!
line con 0
line aux 0
line vty 0 4
password 7 133416085A5E577E7E72
login
transport input telnet
line vty 5 15
password 7 142613115D56797F717E
login
transport input telnet
!

Теперь после включения ААА:

!
line con 0
line aux 0
line vty 0 4
password 7 133416085A5E577E7E72
transport input telnet
line vty 5 15
password 7 142613115D56797F717E
transport input telnet
!

Команда login, разрешающая вход по паролю на линиях VTY, волшебным образом исчезла. Попробуем её ввести:

IOS15(config)# line vty 0 15
IOS15(config-line)# login
% Incomplete command.

Просто login уже не вводится. Почему так происходит? Потому что после включения ААА работают команды только ААА:

IOS15(config-line)# login ?
authentication  Authentication parameters.
ctrlc-disable   Disable CONTROL-C during login.

Ожидается команда login authentication. Отключим ААА:

IOS15(config)# no aaa new-model
Changing configuration back to no aaa new-model is not supported.
Continue?[confirm]
IOS15(config)#

Смотрим на линии VTY:

!
line con 0
line aux 0
line vty 0 4
password 7 133416085A5E577E7E72
login
transport input telnet
line vty 5 15
password 7 142613115D56797F717E
login
transport input telnet
!

Хотя IOS и обругалась, но login снова на своём месте. Обратное правило тоже действует: если были настроены команды ААА, потом ААА отключен — все настроенные команды ААА исчезнут из конфигурации, заново включаем ААА — все команды опять появятся в конфигурации.

Пример 1.2

Теперь восстановим дефолтную конфигурацию, а затем настроим пользователя в локальной базе и вход через SSH (если кто-то затрудняется, то подробно шаги расписаны тут). Попробуем подсоединиться, вход успешный:

Сразу закидывает на 15 уровень, так как добавили при настройке пользователя  параметр privelege 15. Проверяем линии VTY:

!
line con 0
line aux 0
line vty 0 4
login local
transport input ssh
line vty 5 15
login local
transport input ssh
!

Включаем ААА, пробуем подсоединиться, вход опять успешный:

Но подключение происходит уже на уровень 1 и требуется ввод команды enable, так как в рамках ААА нет никакой информации об уровне прав (авторизации). Пишем команду enable, вводим пароль от enable, попадаем на 15 уровень. Если пароль на enable не был настроен, то ошибка:

Опять проверяем линии VTY:

!
line con 0
line aux 0
line vty 0 4
transport input ssh
line vty 5 15
transport input ssh
!

Выключаем ААА, пробуем подсоединиться, вход успешный, сразу попадаем на 15 уровень, login local, разрешающий вход  с помощью локальной базы, на месте.

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


Аутентификация

Пользователь вводит логин, который принадлежит некоторой учётной записи, а потом пароль. Правильный ввод пароля и является подтверждением того, что логин принадлежит именно этому пользователю.

Настройка AAA аутентификации

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

Default и List-Name

Посмотрим опции команды:

CISCO AAA

Первым делом интересует опция login, она потребуется обязательно:

R1(config)# aaa authentication login { default | list-name } method1.. [method4]
  • Основная часть команды aaa authentication login;
  • Либо default, либо list-name;
  • Далее идут от 1 до 4 различных метода аутентификации

Команд aaa authentication login в конфигурации может быть несколько:

!
aaa authentication login default..
aaa authentication login list1..
aaa authentication login list2..
...

Таким образом можно использовать команду aaa authentication login default и/или команду aaa authentication login list-name. В чём разница?

  • При использовании оции default набор методов автоматически применяется ко всем линиям, включая консоль сразу после ввода команды;
  • При использовании именованного списка list-name набор методов не применяется ни к одной линии после ввода команды. Необходимо вручную указывать list-name для требуемых линий, при этом он заменяет собой default, если тот настроен:
R1(config)# line vty 0 4
R1(config-line)# login authentication list-name

Зачем нужен list-name? Чтобы для разных линий задать разные методы аутентификации.

Пример 2

Допустим, была настроена команда aaa authentication login с опцией default, команда автоматически применилась ко всем линиям, затем вводится команда aaa authentication login с именованным списком list1 и затем уже list1 вручную применяется только к линии консоли.

Получается при логине удалённо через SSH применяется набор методов от команды с default, при логине с консоли набор методов от команды с list1.

Рекомендация:

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

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

Когда default в явном виде заменяется именованным списком на линиях, как его вернуть назад?

Пример 2.1

Соответственно получаем следующее:

IOS15(config)# line vty 0 4 
IOS15(config-line)# no authentication login

Эта команда работает только в 12 версии IOS, в 15.6 такой команды нет.

 Команда успешно отрабатывает и в 12, и в 15 IOS:

IOS15(config)# line vty 0 4 
IOS15(config-line)# login authentication default

AAA: Warning authentication list "default" is not defined for LOGIN. 

Такое предупреждающее сообщение появится, если метод default не задан в конфигурации, но list-name всё равно уберётся.

Методы

Теперь подробнее про методы:

  • Методов может быть от 1 до 4;
  • Методы используются в том порядке, в котором они указаны слева направо;
  • Если проверка первым методом даёт ошибку (например первым методом стоит аутентификация с помощью AAA-сервера, а он в текущий момент выключен), то используется следующий метод и так далее;
  • Если проверка первым методом возвращает отказ (например при неверном вводе пароля, пароль проверяется на AAA-сервере и сервер присылает отказ), то следующие методы не используются и происходит выход из режима аутентификации.

Основные методы (на самом деле методов больше):

  • enable — использует пароль для enable для аутентификации;
  • local — использует локальную базу для аутентификации;
  • local-case — использует локальную базу для аутентификации, при этом имя пользователя чувствительно к регистру;
  • none — без аутентификации, при этом методе вход разрешён для всех;
  • group radius — использует список всех серверов RADIUS для аутентификации;
  • group tacacs+ — использует список всех серверов TACACS+ для аутентификации;
  • group group-name — использует сервера RADIUS или TACACS+, которые указаны в группе group-name для аутентификации.
Выводы и замечания
  • Если в локальной базе создана запись для пользователя Admin1, то при использовании метода local его можно вводить как admin1, ADMIN1, ADmin1 и так далее, то для метода local-case только как Admin1, иначе ошибка. Другими словами метод local-case даёт дополнительную защиту;
  • Если все предыдущие методы выдали ошибку и последним методом стоит none, то аутентификация будет успешной. Поэтому данный метод применяется только для тестирования и никогда в продакшене;
  • Самый распространённый набор методов это group radius local. Сначала идёт обращение к серверу RADIUS, при сбое сервера используется логин/пароль из конфигурации сетевого устройства (локальной базы)
Пример 3

Методы аутентификации практически никогда не настраиваются по одному. Допустим введена команда:

Router(config)# aaa authentication login default group radius

И RADIUS-сервер не отвечает на запросы (выключен, сломан), тогда аутентификация закончится ошибкой и инженер не сможет попасть на сетевое устройство.

Обычно понять что ААА-сервер недоступен можно по долгому подвисанию консоли после ввода пароля. В этот момент IOS пытается достучаться до ААА-сервера, затем по тайм-ауту переключается на следующий метод аутентификации (если он настроен).

Настройка AAA аутентификации для enable
R1(config)# aaa authentication enable default methods

Всё всё таже самая команда, отличие: вместо login здесь идёт enable, нет опции list-name и  список возможных методов меньше:

IOS15(config)# aaa authentication enable ?
default The default authentication list.

Редко применяется при серверном ААА, так как уровень привилегий задаётся в политике на ААА-сервере и сразу применяется при входе пользователя (после авторизации), команда enable при этом просто не нужна. Может использоваться при локальном ААА.

Для того чтобы отрабатывал серверный вариант команды:

IOS15(config)# aaa authentication enable default group radius local

На сервере необходимо добавить пользователя $enab15$ и поместить его в группу на сервере, для которой настроена сетевая политика полного доступа (почему так — во второй части). Соответственно при воде команды enable запрашивается только пароль и нужно вводить пароль этого пользователя.

Пример 3.1

Настроим команды:

IOS15(config)# aaa authentication login default none
IOS15(config)# aaa authentication enable default none

И попробуем подсоединиться:

Залетает мухой без вопросов о паролях.


Авторизация

В общем случае авторизация производится автоматически и не требует от пользователей дополнительных действий. Выполняется сразу же после успешной аутентификации пользователя (RADIUS). Обычно применяется в случае серверной реализации AAA. 

Об особенностях авторизации для протокола TACACS поговорим во 2 части.

Ещё раз отметим:

  • Без ААА авторизация выполняется либо через параметр privelege в команде username, либо непосредственно через команду enable;
  • С ААА и использованием ААА аутентификации, но без ААА авторизации, процесс входа на устройство не знает уровень привилегий пользователя и помещает его на уровень 1
Настройка ААА авторизации

Используется команда aaa authorization. Опять посмотрим опции команды:

CISCO AAA

Интересует только опция exec, которая отвечает за доступ к  режиму выполнения команд (EXEC). Остальное уже разбиралось выше.

R1(config)# aaa authorization exec { default | list-name } method1.. [method4]

Ещё важные опции:

  • network — используется для авторизации через сетевые протоколы (типа PPP);
R1(config)# aaa authentication ppp default group radius
R1(config)# aaa authorization network group radius
  • commands level (0-15) — для авторизации исполнения команд заданного уровня. Применяется вместе с протоколом TACACS (подробнее во 2 части)

Эта команда позволяет ассоциировать пользователя, выполняющего вход, с определённым  уровнем привилегий оболочки EXEC.

Выводы и замечания
  • При использовании команды aaa authorization в случае серверного варианта AAA, пользователь получает права в соответствии с политикой на сервере. И в своём сеансе действует в рамках этих прав. Возможно увидит только часть конфигурации и будет доступна только часть команд. Чтобы получить бОльшие/полные права, пользователь должен перелогиниться с другой учётной записью
Пример 4

В прошлом примере мы аутентификацию ААА настроили, а до настройки авторизации ещё не доехали, поэтому продолжая прошлый пример просто смотрим:

Любой пользователь попадает на уровень 1 и для получения прав должен использовать команду enable. Таким образом нет разделения пользователей по правам, поэтому команда aaa authorization обязательна для использования.

Аккаунтинг

Если аутентификация/авторизация неразрывно связаны и в любом случае происходят при подключении (авторизация возможна ещё и при вводе отдельных команд в случае ACS Server), то аккаунтинг как бы находится в стороне и может применяться опционально.

Аккаунтинг является расширенной альтернативой простой системе логирования на устройстве CISCO. Реализуется аккаунтинг только при серверном варианте AAA. Центровым протоколом для сбора информации аккаунтинга является RADIUS, поэтому разговор тут про него.

Когда пользователь входит на устройство, где используется AAA, сеансу этого пользователя присваивается уникальный session identifier (session ID).

Механизм аккаунтинга
  • После аутентификации пользователя процесс учёта AAA на сетевом устройстве формирует начальное сообщение start для начала учёта, который содержит следующую информацию: user’s ID, точку входа в сеть, IP адрес и session ID. И отсылает его на RADIUS-сервер.Такое событие называется Accounting Start;
  • В течение времени сеанса связанные с ним атрибуты собираются и сохраняются в базе данных AAA на устройстве: ресурсы, к которым получен доступ, длительность доступа к конкретному ресурсу, внесенные изменения;
  • Аналогично при выходе пользователя из системы формируется сообщения stop, завершающее процесс учёта. Такое событие называется Accounting Stop. В этом сообщении находятся все сохранённые за сеанс данные по сессии, включая общее время сессии, количество отправленной информации и количество пакетов, команды EXEC, причину отключения и так далее;
  • Далее сервер подтверждает окончание сессии сообщением Accounting Response acknowledgement

Какие же точно данные собираются? Собирается 7 типов данных (подробнее тут), из них интересны 5:

  • Сетевые операции — собирается информация о сеансах PPP, включая количество пакетов и байт;
  • Соединения — собирается информация о выполненных исходящих соединениях (SSH, Telnet);
  • EXEC — собирается информация о сеансе работы, имя пользователя, дата, время начала и завершения сеанса, IP адрес;
  • Системные операции — собираются события уровня системы, например перезагрузка устройства;
  • Команды — собирается информация о выполненных командах в привилегированном режиме и режиме глобальной конфигурации, включая имя пользователя, дату и время

В последствии можно отфильтровать эти данные и сформировать отчёты. Делается это всё на сервере. Если брать само устройство,  то там можно посмотреть session ID:

R1# show aaa sessions

Или же текущие атрибуты пользователя:

R1# show aaa user
Настройка ААА аккаунтинга

Для настройки аккаунтинга используется команда aaa accounting. Снова смотрим опции команды:

CISCO AAA

R1(config)# aaa accounting exec { default | list-name }  { star-stop | stop-only | none } [broadcast] method1.. [method4]

Интересует только опция exec. Ещё важные опции:

  • network — выполняет учет всех запросов сетевых услуг (PPP);
  • connection — запускает учет для всех исходящих соединений (SSH, Telnet)

Также обязательно настраиваются триггеры:

  • start-stop — отправляет уведомление start о начале процесса аккаунтинга и уведомление stop по окончании процесса;
  • stop-only — отправляет только уведомление stop, но для всех случаев, включая ошибки аутентификации;
  • none — отключает аккаунтинг на линии или интерфейсе

Опциональное ключевое слово broadcast означает будет ли использоваться отправка аккаунтинга на несколько серверов одновременно (если, разумеется, в конфигурации настроено несколько серверов для ААА).

Это может, например, использовать ISP, чтобы отправлять информацию на свой ААА сервер и ещё сразу же на сервер клиента. Или в случае подсчёта биллинга, когда такую информацию нельзя потерять, тогда данные аккаунтинга отсылаются сразу на 2 ААА сервера ISP для надёжности.


Указание AAA-серверов

Указание ААА сервера на сетевом устройстве зависит от версии IOS.

  • Для IOS 12:
R1(config)# radius-server host IP key key [ auth-port { 0 - 65536 } acct-port { 0 - 65536 } ] 
  • Для IOS 15:
R1(config)# radius server name
R1(config-radius-server)# address { ipv4 | ipv6 } { IP | hostname } [ auth-port { 0 - 65536 } acct-port { 0 - 65536 } ]  
R1(config-radius-server)# key password
  • Пароль нужен для инициализации сессии между сетевым устройством и сервером, сетевое устройство посредством пароля подтверждает серверу свою подлинность;
  • Порт для аутентификации на сервере auth-port, порт для аккаунтинга acct-port;
  • Если используется параметр hostname, то он должен быть ранее задан в конфигурации как:
R1(config)# ip host hostname IP

Или же должен быть разрешим  в IP адрес через DNS.

  • Если порты для сервера не заданы вручную, то по умолчанию используются 1645/1646.

Группа серверов задаётся командой для IOS 12:

R1(config)# aaa group server radius group-name
R1(config-sg-radius)# server { IP1 | hostname1 } 
R1(config-sg-radius)# server { IP1 | hostname1 }

Для IOS 15:

R1(config)# aaa group server radius group-name R1(config-sg-radius)# server { IP1 | hostname1 | name1 }
R1(config-sg-radius)# server { IP1 | hostname1 | name2 }
...

Везде вместо параметра radius/radius-server может использоваться параметр tacacs/tacacs-server.

Опять про оптимальный код. Если в конфигурации задан 1 AAA-сервер, то не надо использовать group-name. Это упрощает читаемость конфигурации и логику работы устройства.

Есть ещё 2 важных дополнительных параметра с помощью которых можно управлять процессом обращения к ААА-серверу:

  • timeout — time interval (in seconds) that the router waits for the RADIUS server to reply before retransmitting (defautl 1 sec);
  • retransmit — number of times a RADIUS request is re-sent to a server, if that server is not responding or responding slowly (default 3).

Чем эти команды могут помочь? При плохой или медленной линии связи между сетевым устройством и ААА-сервером увеличение данных параметров сделает процесс входа на сетевое устройство более устойчивым. Данные команды вводятся непосредственно при настройке ААА-сервера для IOS 12; непосредственно при настройке ААА-сервера либо глобально для IOS 15.

Пример 5

Сотрудники 1 линии жалуются что вход на сетевое устройство срабатывает через раз. Пропинговав ААА-сервер с сетевого устройства, инженер замечает 10% потерю пакетов пинга. Далее он изучает конфигурацию сетевого устройства и обнаруживает:

!
radius server RAD1
 retransmit 1
..

Инженер вносит изменения:

Router(config)# radius server RAD1
IOS15(config-radius-server)# retransmit ?
<0-100> Number of retries to this server

Router(config-radius-server)# retransmit 5

После чего процесс входа работает немного дольше чем обычно, но стабильно.


Локальный AAA

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

Пример 6
IOS15(config)# enable algorithm-type scrypt secret Cisco123
IOS15(config)# username Admin1 privilege 15 algorithm-type scrypt secret Cisco123
IOS15(config)# aaa authentication login default local-case enable

Методы автоматически применятся ко всем линиям. В обычном режиме для входа пользователя всегда сначала применяется метод local-case, то есть вводится логин Admin1 и соответствующий пароль: удачно — доступ предоставлен, неудачно — доступ отклонён, до пароля enable дело не доходит.

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

Также можно добавить:

IOS15(config)# aaa authentication enable default enable line

Дополнительная безопасность

Обеспечивается для AAA и локальных учётных записей на сетевом устройстве с помощью команды глобальной конфигурации (для IOS 12 и 15):

Router(config)# aaa local authentication attempts max-fail ?
<1-65535> Specify the value for max failed attempts

Тут важное замечание: действует только на пользователей с уровнем привилегий ниже 15, то есть на всех кроме админов.

Feature Name Releases Feature Information
Login Password Retry Lockout 12.3(14)T 12.2(33)SRE The Login Password Retry Lockout feature allows system administrators to lock out a local AAA user account after a configured number of unsuccessful attempts by the user to log in.

Проблема в том, что при достижении указанного числа неудачных попыток учётная запись блокируется и остаётся заблокированной до на сетевом устройстве ввода команды привилегированного режима:

R1# clear aaa local user lockout

Для просмотра заблокированных пользователей:

R1# show aaa local user lockout
Пример 7

Настроим максимальное количество попыток входа:

IOS15(config)# aaa local authentication attempts max-fail 2

Заведём пользователя:

IOS15(config)# username user secret User4567

И при удалённом соединении введем 2 раза неправильно пароль для пользователя User:

*Jun 7 03:30:34.565: %AAA-5-USER_LOCKED: User user locked out on authentication failure

IOS15# show aaa local user lockout

       Local-user         Lock time

       user               03:30:34 UTC Sun Jun 7 2020

Некоторая информация по AAA от CISCO.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *