Установка TACACS+ на CentOS

Установка TACACS+ на CentOS

Roman Bogachev VMware Specialist | Drone Pilot | Traveler

Централизованный доступ на Cisco оборудование используя Linux сервер с TACACS+

TACACS Plus является протоколом последнего поколения из серии протоколов TACACS.

TACACS — это простой сеансовый протокол управления доступом.
Использовался на серверах доступа ARPANET.

TACACS+ пользуется транспортным протоколом TCP. «Демон» сервера «слушает» порт 49, который является портом протокола TCP, выделенным для протокола TACACS. Этот порт зарезервирован для выделенных номеров RFC в протоколах UDP и TCP. Все текущие версии TACACS и расширенные варианты этого протокола используют порт 49.

Фундаментальным структурным компонентом протокола TACACS+ является разделение аутентификации, авторизации и учёта (AAAAuthentication, Authorization, Accounting).

Транзакции между клиентом TACACS+ и сервером TACACS+ идентифицируются с помощью общего «секрета», который никогда не передается по каналам связи. Обычно этот секрет вручную устанавливается на сервере и на клиенте. TACACS+ можно настроить на шифрование всего трафика, который передается между клиентом TACACS+ и демоном сервера TACACS+.

В примере будет настроен сервер, который принимает решение, разрешить или не разрешить определённому пользователю подключиться к оборудованию.
К сожалению под RHEL/CentOS 7 не нашел нормального рабочего пакета, а собирать с сорсов не хочется.

(Если уж и собирать с сорсов, то на BSD, пакет tac_plus4, но об этом в следующий раз).

Установка Tacacs+

Добавим новый репозиторий /etc/yum.repos.d/nux-misc.repo

1
2
3
4
5
6
[nux-misc]
name=Nux Misc
baseurl=http://li.nux.ro/download/nux/misc/el6/x86_64/
enabled=0
gpgcheck=1
gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro

Сохраним файл и установим пакет tac_plus:

1
yum --enablerepo=nux-misc install tac_plus

На этом установка завершена.

Конфигурация

Вся конфигурация TACACS+ хранится в одном файле /etc/tac_plus.conf

Первый и главный параметр в данном конфигурационном файле это ключ, раскомментируем его и сгенерируем, также необходимо будет внести данный ключ на каждом сетевом устройстве, которое собираемся контролировать с помощью сервера TACACS+.

1
key = "сгенерированный_ключ"

Далее настраиваем список контроля доступа (ACL).
Используются регулярные выражения для того, чтобы настроить адреса и сети, которым разрешено использовать TACACS+ сервер. Изменим данный параметр на нужную нам сеть.

1
2
3
4
acl = default	{
#permit = 192\.168\.0\.
permit = 192\.168\.2\.1
}

Затем мы можем настроить IP-адрес устройства, которым хотим управлять, а также подсказку, которая показывает пользователя, который пытается авторизоваться на устройство.

1
2
3
4
5
6
# Example of host-specific configuration:
host = 192.168.2.1 {
prompt = "Enter your Unix username and password, Username: "
# Enable password for the router, generate a new one with tac_pwd
#enable = des 4P8MBRmulyloo
}

Следом идут групповые параметры.
По умолчанию имеется группа admin со включенной PAM-авторизацией, что означает, что мы будем использовать пользовательскую базу нашего Linux сервера. По умолчанию группа администраторов также подвержена ACL.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# Group that is allowed to do most configuration on all interfaces etc.
group = admin {
# group members who don't have their own login password will be
# looked up in /etc/passwd
#login = file /etc/passwd
login = PAM

# group members who have no expiry date set will use this one
#expires = "Jan 1 1997"

# only allow access to specific routers
acl = default


# Needed for the router to make commands available to user (subject
# to authorization if so configured on the router
service = exec {
priv-lvl = 15
#default service = permit
}

cmd = username {
permit .*
}
cmd = enable {
permit .*
}
cmd = show {
permit .*
}
cmd = exit {
permit .*
}
cmd = configure {
permit .*
}
cmd = interface {
permit .*
}
cmd = switchport {
permit .*
}
cmd = description {
permit .*
}
cmd = no {
permit shutdown
}


}

Обратим внимание на следующую группу.
Группа sysadmins аналогична группе admin, а также обратим внимание, что им разрешено использовать некоторые команды.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# A group that can change some limited configuration on switchports
# related to host-side network configuration
group = sysadmin {
# group members who don't have their own login password will be
# looked up in /etc/passwd:
#login = file /etc/passwd
# or authenticated via PAM:
login = PAM
acl = default

# Needed for the router to make commands available to user (subject
# to authorization if so configured on the router
service = exec {
priv-lvl = 15
}
cmd = enable {
permit .*
}
cmd = show {
permit .*
}
cmd = exit {
permit .*
}
cmd = configure {
permit .*
}
cmd = interface {
permit FastEthernet.*
permit GigabitEthernet.*
}
cmd = switchport {
permit "access vlan.*"
permit "trunk encapsulation.*"
permit "mode.*"
permit "trunk allowed vlan.*"
}
cmd = description {
permit .*
}

cmd = no {
permit shutdown
}

}

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# User account configured for use with "rancid"
user = rancid {
# Generate a new password with tac_pwd
#login = des LXUxLCkFhGpwA

service = exec {
priv-lvl = 15
}

cmd = show { permit .* }
cmd = exit { permit .* }
cmd = dir { permit .* }
cmd = write { permit term }
}

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

1
2
3
4
# Global enable level 15 password, generate a new one with tac_pwd
user = $enab15$ {
#login = des 97cZOIgSXU/4I
}

У нас сформировалось небольшое представление о конфигурации TACACS+.
Попробуем создать нового пользователя и проверить работу авторизации.

Создаем нового пользователя и проверяем авторизацию

1
2
3
4
5
6
[root@tacacs /]# adduser roman
[root@tacacs /]# passwd roman
Смена пароля для пользователя roman.
Новый пароль :
Повторите ввод нового пароля :
passwd: все токены проверки подлинности успешно обновлены.
1
2
[root@tacacs /]# service tac_plus start
Starting tacacs+: [ OK ]

Не забываем добавить сервис TACACS+ в автозагрузку.

1
2
[root@tacacs /]# chkconfig --add tac_plus
[root@tacacs /]# chkconfig tac_plus on

Разрешаем порт 49/tcp на нашем файрволе.

Подключаемся на Cisco оборудование и настроим его для работы с TACACS+ сервером.

Нам нужно использовать команду aaa new-model, в противном случае команды будут недоступны. Сообщим коммутатору использовать TACACS+ для аутентификации, но если сервер недоступен, коммутатор будет использовать локальную авторизация. Я настраиваю тот же ключ, который был использован в файле конфигурации tac_plus.

1
2
3
4
5
6
7
8
9
c2960#conf t
Enter configuration commands, one per line. End with CNTL/Z.
c2960-(config)#
c2960-(config)#aaa new-model
c2960-(config)#aaa authentication login default group tacacs+ local
c2960-(config)#tacacs-server host 192.168.2.1
c2960-(config)#tacacs-server key 0 сгенерированный_ключ
c2960-(config)#end
c2960#wr

Теперь попробуем подключиться на коммутатор с использованием нового пользователя.

1
2
3
4
5
6
7
8
9
10
11
12
[root@tacacs /]# telnet 129.168.2.10
Trying 129.168.2.10...
Connected to 129.168.2.10.
Escape character is '^]'.


User Access Verification

Username: roman
Password:

c2960>

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

Переход в привилегированный режим (enable) с использованием внешнего сервера AAA

Чтобы перейти в режим enable, введите команды аутентификации (привилегии уровня 15).

Вводим следующее:

1
aaa authentication enable default group tacacs+ enable

Будет запрашиваться только пароль, имя пользователя — $enab15$. Следовательно, имя пользователя $enab15$ должно быть определено на сервере AAA.

Если сервер TACACS+ не отвечает, нужно ввести разрешающий пароль, локально настроенный на маршрутизаторе.

Авторизация выполнения

Команда aaa authorization exec определяет, обладает ли пользователь правами на запуск оболочки выполнения. Это средство должно вернуть информацию о профиле пользователя, такую как данные автокоманд, время ожидания простоя, таймаут сеанса, список доступа, привилегии и другие факторы, индивидуальные для каждого пользователя.

Авторизация выполнения выполняется только по линиям VTY и TTY.
В следующем примере используется TACACS+.

Пример 1. Одинаковые методы аутентификации выполнения для всех пользователей

Сначала используется команда аутентификации:

1
aaa authentication login default group tacacs+ local

Все пользователи, которые хотят войти на сервер доступа, должны авторизоваться, используя TACACS+ (первый метод) или локальную базу данных (второй метод).

Вводим следующее:

1
aaa authorization exec default group tacacs+ local

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

Примечание. В приведенных ниже примерах добавлять какие-либо команды на маршрутизаторе не требуется, а нужно только настроить профиль на сервере доступа.

Назначение уровней привилегий выполнения с сервера AAA

Если пользователю, выполняющему вход на сервер доступа, разрешено непосредственно входить в привилегированный режим enable, настройте следующую AV-пару Cisco на сервере ААА:

1
priv-lvl=15

Это означает, что пользователь перейдет непосредственно в режим enable.

Примечание. Если для первого метода ответ не получен, то используется локальная база данных. Однако пользователь не войдет непосредственно в режим enable, ему придется ввести команду enable и указать разрешающий пароль (enable).

Доступ с правами выполнения с использованием протокола TACACS+, затем локального метода

1
aaa authentication login default group tacacs+ local

В приведенной выше команде:

  • именованный список — это список по умолчанию (default);
  • существуют два метода аутентификации (групповой TACACS+ и локальный).

Все пользователи проходят аутентификацию на сервере TACACS+ (первый метод). Если сервер TACACS+ не отвечает, то используется
локальная база данных маршрутизатора (второй метод).
Для локальной аутентификации определите имя пользователя и пароль:

1
username xxx password yyy

Так как используется список по умолчанию в команде aaa authentication login, аутентификация при входе в систему будет автоматически выполнена для всех соединений при входе в систему (таких как TTY, VTY, консоль и AUX).

Примечание. Сервер (TACACS+) не отвечает на запрос aaa authentication, отправленный сервером доступа, если отсутствует IP-соединение, если сервер доступа неправильно определен на сервере ААА, либо если сервер ААА неправильно определен на сервере доступа.

Примечание. Если использовать пример, приведенный выше, не включая ключевое слово local, то получится следующее:

1
aaa authentication login default group tacacs+

Примечание. Если сервер AAA не отвечает на запрос проверки подлинности, аутентификация закончится неудачно (поскольку маршрутизатор не имеет альтернативного способа).

Примечание. Ключевое слово group позволяет группировать имеющиеся серверные хосты. Данная возможность позволяет выбирать подмножество настроенных серверных хостов и использовать их для той или иной службы.

Доступ к консоли с использованием пароля линии

Расширим конфигурацию, так чтобы при входе на консоль выполнялась только аутентификация по паролю, заданному для линейной консоли 0.

Список CONSOLE определен и применяется к линейной консоли 0.

Вводим следующее:

1
aaa authentication login CONSOLE line

В приведенной выше команде:

  • именованный список – это CONSOLE;
  • существует только один способ аутентификации (линейный)(консольный порт).

После того, как создан именованный список (в данном случае CONSOLE), чтобы он вступил в силу, его необходимо применить к линии или интерфейсу. Для этого используется команда login authentication имя_списка:

1
2
3
4
line con 0
exec-timeout 0 0
password cisco
login authentication CONSOLE

Список CONSOLE переопределяет список методов по умолчанию для линии консоли 0. Чтобы получить доступ к консоли, введите пароль cisco (настроен для линии консоли 0). Список по умолчанию по-прежнему используется для соединений TTY, VTY и AUX.

Примечание. Для аутентификации доступа к консоли по локальному имени пользователя и паролю используйте следующую команду:

1
aaa authentication login CONSOLE local

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

Примечание. Чтобы аутентификация отсутствовала, используйте команду:

1
aaa authentication login CONSOLE none

Примечание. В данном случае аутентификация при доступе к консоли отсутствует. Список необходимо также применить к линии или интерфейсу.

Методы

Методы аутентификации в aaa. Перечислю наиболее распространенные:

  • Local — база данных логинов и паролей храниться на самом сетевом устройстве. Требует username {password | secret}.
  • Local-case — тот же самый метод, что и local, но чувствительный к регистру при вводе логина.
  • Enable — для аутентификации требуется enable{password | secret}.
  • Line — для аутентификации требуется пароль line
  • None — аутентификация не требуется, доступ к устройству предоставляется без ввода логина и пароля.
  • Group {tacacs+ | radius} — подключение серверов с установленным Tacacs+ или Radius для расширения возможностей конфигурации aaa.
    Group {group-name} — позволяет настроить группу серверов с установленным Tacacs+ или Radius или настроить частный сервер группы.