Tacacs server linux установка настройка

Tacacs + LDAP + huawei

Настроим TACACS+, добавим аутентификацию через ldap, подготовим профили авторизации и аккаунтинг, изучим возможности сервера. Развернем всё это на Ubuntu 19.04, а в качестве сетевого будет Huawei: S, NE, Eudemon (USG).

Почему tacacs+, а не, например, radius? Radius — это udp, tacacs+ — это tcp, который за счет флагов и механизма окна, будет надежнее и обеспечит реакцию на изменения в сети, что важно для ААА. Radius шифрует только пароль, tacacs+ шифрует весь заголовок. Radius позволяет управлять авторизацией только с помощью атрибутов, кол-во которых зависит от производителя. Атрибутом может быть, например, уровень привилегий, директория ftp-сервера (на huawei можно посмотреть командой display radius-attribute). Tacacs+ позволяет управлять авторизацией более гибко, разрешая или запрещая конкретные команды для пользователя или группы.

Смотрим примеры radius-пакетов:

radius-access-request

1) Radius-access-request (UDP, шифруется только пароль, NAS — само устройства, NAC — хост, с которого подключаемся к NAS)

radius-access-accept

2) Radius-access-accept (по аналогии с request):

Смотрим примеры tacacs+ пакетов:

tacacs-all

1) Общий перечень, включая установку TCP-соединения, а также его сброс флагом RST после того, как соединение становится неактивным. Все AAA-пакеты зашифрованы, поэтому интересного здесь немного(и это отлично):

tacacs-auth

tacacs-authorization

Общее

В ААА последняя буква — это accounting. Лучше заранее подумать, куда будем складывать информацию о том, кто, когда и куда получил доступ и какие действия на оборудовании были выполнены. Если разворачиваете новый сервер, то лучше использовать LVM для распределения места на диске, сможете быстро менять размер томов при нехватке места. Вообще, для серверов, которые постоянно создают какие-то данные, лучше держать LVM и предусмотреть ротацию этих данных.

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

  • Выделим место (например, в вашей vmware)
  • Проверим на сервере (далее все команды будем выполнять из по root):

смотрим на строчку, где видим общее кол-во Gb на диске:

Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors

(я выделил 16Gb для / и 34Gb для остального)

  • Создадим из этих 34GB новый primary-раздел и отфоматируем в журналируемую ext4: fdisk /dev/sda (можно использовать более простой cfdisk /dev/sda)

m — вызвать справку по командам fdisk

n — создать новый раздел (создаем sda3 на все 34Gb) Раздел создали, теперь форматируем в ext4:

Отформатировали, теперь примонтируем: создаем директорию для аккаунтинга:

cd /var/log mkdir tac_plus nano /etc/fstab 

/dev/sda3 /var/log/tac_plus ext4 defaults 1 2

Теперь настроим ротацию с помощью logrotate:

apt update && apt install logrotate

2) создадем новый конфигурационный файл для ротации в /etc/logrotate.d/. Этот файл уже будет выполняться ежедневно по cron:

/var/log/tac_plus/access/*.txt* < daily missingok rotate 365 >/var/log/tac_plus/accounting/*.txt* < daily missingok rotate 365 >/var/log/tac_plus/authentication/*.txt*

daily — выполнять ротацию ежедневно.

missingok — не выдавать ошибки, если отсутствуют файлы для ротации

rotate — кол-во логов, которые оставляем после каждой ротации

Т.е. будем ежедневно проверять содержимое директорий, оставлять последние 365 файлов, остальные удалять. У Logrotate много параметров, и утилиту можно использовать не только для логов:

Обычный tacacs

Развернем tacacs из стандартных репозиториев. Здесь не будет аутентификации через LDAP (если нужен LDAP, то пропускаем этот раздел и переходим к следующему. Для работы с LDAP потребуется установить другой пакет). Обновляем индекс и устанавливаем пакет:

apt update && apt install tacacs+

Читайте также:  Настроить yandex disk linux

Демон должен запуститься, проверим любой из команд:

systemctl status tac_plus

Прежде чем открыть конфиг, пара основных терминов:

NAS (network access server) — сетевое устройство, к которому мы будем подключаться через tacacs

NAC (network access client) — хосты, с которых мы будем подключаться к сетевому оборудованию

AV (attribute-value) — пара аттрибут — значение, которые передаются между клиентом и сервером tacacs. Например, privilege level или default ftp-directory.

Сейчас пара полезных ссылок с примерами конфигураций:

И, конечно же, если какие-то вопросы решить не получается, всегда читайте man:

accounting file = /var/log/tac_plus.acct # файл, где будут храниться все действия, выполняемые пользователем на оборудовании key = SoMe_KeY_1234 # ключ, который будет использовать NAS для подключения к серверу user = admin < member = admin login = des v4FH4KSkwkqy # зашифрованный пароль, о том, как создать - ниже >user = test < member = guest login = des CAjOONkQeROwy ># по умолчанию, для группы guest запретим всё, кроме отдельно взятых команд group = guest < default service = deny service = exec < priv-lvl = 15 >cmd = system-view < permit .* >cmd = display < permit .* >cmd = stelnet < permit .* >cmd = telnet < permit .* >cmd = quit < permit .* >cmd = ping < permit ,* ># по умолчанию, разрешим всё для группы admin group = admin < default service = permit service = exec < priv-lvl = 15 >> 

Здесь стоит обратить внимание на создание юзеров. Поскольку этот вариант без LDAP, то все юзеры должны быть созданы локально, на сервере. Создадим юзера и зашифруем пароль:

adduser test # можно создать через useradd, но так проще

Теперь переключимся на этого юзера:

Сформируем пароль и внесем хеш в файл конфигурации:

tac_pwd Password to be encrypted: 1234567890 kM4fS7ZB9Djzk 

После этого описание юзера в файле конфигурации будет выглядеть как-то так:

Здесь есть очень важный момент — утилита tac_pwd не считается надежной, если используете пароли > 8 символов, иначе, даже если вы будете использовать пароль > 8 символов, для того, чтобы залогиниться на устройство, достаточно будет ввести первые 8. Еще эта утилита идет в комплекте с тем tacacs+, который из репозиториев. Если вы удалите этот tacacs+, то утилитой tac_pwd воспользоваться не получится. Да и, честно говоря, не нужно. Более надежной считается утилита openssl:

Обе комманды нужно вводить из под пользователя, которому нужно установить пароль.

Tacacs+ с аутентификацией через LDAP

А есть, значит, другой tacacs, тот что поддерживает аутентификацию через PAM, LDAP, Radius, списки доступа для NAC, NAS, гибкое управление группами, большое кол-во регулярок и возможность управлять авторизацией с помощью скриптов. Если ранее был установлен обычный tacacs+, то теперь его можно смело удалить:

Установим сперва библиотеку для работы с LDAP:

apt update && apt install libnet-ldap-perl

Заранее создадим дерево каталогов для логирования:

Теперь скачиваем пакет, вот этот — DEVEL.201908261951.tar.bz2

Теперь пара ссылок на официальную документацию.

Продолжим, распакуем архив и установим необходимые пакеты:

cd ~ bzip2 -dc DEVEL.tar.bz2 | tar xvfp - cd PROJECTS apt install libpcre3-dev libpcre3-dev libpcre2-dev gcc make make 

Если возникнут какие-либо ошибки, либо вы хотите использовать PCRE-регулярки (а их можно использовать), то соберите пакет так:

Готово. Теперь немного поправим права на файл конфигурации (разрешим редактирование только из под root, остальным дадим права на выполнение):

chmod 755 /usr/local/etc/tac_plus.cfg

Перед тем, как начнем править конфиг, пара очень полезных ссылок по теме:

официальная документация. Здесь есть примеры простых конфигураций. Самая полезная ссылка.

habr — статья на хабре с примером конфигурации и комментариями.

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

#!/usr/local/sbin/tac_plus id = spawnd < # общее "тело" конфигурации listen = < # глобальный список nas и порт, который слушает tacacs (любые nas, 49 tcp port, можно выбрать любой другой) address = 0.0.0.0 port = 49 >spawn = < # число инстансов для spawnd instances min = 1 instances max = 10 >background = yes > # здесь настроим backend для работы с LDAP id = tac_plus < # укажем, куда логировать. Любые логи нужно ротировать, позже настроим для этого logrotate access log = /var/log/tac_plus/access/access-%d-%m-%Y.txt accounting log = /var/log/tac_plus/accounting/accounting-%d-%m-%Y.txt authentication log = /var/log/tac_plus/authentication/authentication-%d-%m-%Y.txt # mavis - backend для работы с LDAP # все параметры хорошо описаны здесь - http://www.pro-bono-publico.de/projects/tac_plus.html#AEN2318 mavis module = external < setenv LDAP_SERVER_TYPE = "microsoft" # LDAP-сервер принимает запросы на порт 389, инкапсулированные в SSL - на порт 636. X.X.X.X - ip-адрес LDAP-сервера setenv LDAP_HOSTS = "X.X.X.X:389 X.X.X.X:636" # указываем имя домена. Например, если ваш домен your.domain, то будет так setenv LDAP_BASE = "DC=your,DC=domain" setenv LDAP_SCOPE = sub # парсим по всем пользователям в AD setenv LDAP_FILTER = "(&(objectClass=user)(objectClass=person)(sAMAccountName=%s))" # техонологическая учетка в AD, которую будет использовать mavis. Саму учетку создадим чуть позже. setenv LDAP_USER = "tacacsplus@your.domain" # пароль от технологической учетки setenv LDAP_PASSWD = "tacacsplus_password" # снимаем ограничение с групп в AD setenv UNLIMIT_AD_GROUP_MEMBERSHIP = 1 setenv EXPAND_AD_GROUP_MEMBERSHIP = 0 # важный параметр, благодаря которому можно будет опустить имя домена при аутентификации на устройстве setenv AD_GROUP_PREFIX = "" setenv REQUIRE_TACACS_GROUP_PREFIX = 0 # подключаем сам perl-модуль exec = /usr/local/lib/mavis/mavis_tacplus_ldap.pl ># указываем модуль для работы с LDAP. К слову, есть и другие модули login backend = mavis user backend = mavis pap backend = mavis # формируем список NAS-хостов host = world < # разрешим NAS с любыми ip address = ::/0 # различные баннеры при аутентификации на устройстве. Работают не в каждом клиенте. Например, работают в securecrt welcome banner = "Welcome. Today is %A. \n" prompt = "Your actions are recording. \n" # ключ, который будем использовать при настройке tacacs на NAS-устройствах key = "your_key" # не используем наследование конфигурации от стоящих выше списков inherit = no # настроим дефалтную группу. Пользователи, которые не относятся ни к одной из существующих групп, будут попадать сюда. Для этой группы настрим acl и запретим аутентификацию default group = no_login # если будут проблемы при подключении с одного и того же nac, то можно использовать (сейчас закомментировано): # single-connection = yes ># сформируем еще один список NAS-хостов, для которых будут уникальные права авторизации host = backbone < # указываем список NAS ip вашего backbone. Пример: address = Y.Y.Y.Y/24,Z.Z.Z.Z # можно указать в виде файла # address file = ~/addresses.cidr # дальше по аналогии со списком world welcome banner = "Welcome. Today is %A. \n" prompt = "Your actions are recording. \n" key = "your_key" inherit = no default group = no_login # single-connection = yes ># очень полезный acl, которым можно разом закрыть доступ для всех NAC, за пределами этого списка acl = nacacl < nac = X.X.X.X/24 nac = Y.Y.Y.Y ># acl для default_group. Запрещаем аутентифицровать пользователей, которые не принадлежат никакой группе acl script = no_login < deny ># применяем acl no_login для группы пользователей no_login group = no_login < acl = no_login ># настроим права для групп, а затем добавим в них пользователей group = TACACS_BACKBONE < # сообщение при аутентификации на оборудовании message = "your text" # запрещаем все типы сервисов по умолчанию default service = deny # разрешаем аутентифицироваться на оборудовании только NAC из nacacl acl = nacacl # настраиваем разрешения для доступа к определенным командам на NAS-устройствах service = shell < # по умолчанию разрешим все команды default command = permit # запретим передачу аттрибутов default attribute = deny # установим уровень привелегий, по умолчанию set priv-lvl = 15 # допустим вам необходимо запретить определенные команды при нахождении в режиме интерфейса. Это делается так (только вот у меня, к сожалению, не заработало, поэтому скрипт закомментирован): # script = < # if (cmd == "") permit # # if (cmd =~ "^interface ") < # message = "Context has been set. All commands doesn't work for this interface." # context = GE # permit # ># else if (cmd =~ "^interface") < # message = "Context has been reset." # context = "" # permit # ># if (context == GE) < # if (cmd =~ "^shut") deny # if (cmd =~ "^undo shut") permit # deny # ># > # команд на NAS много, поэтому запрещать их по отдельности не очень удобно, например, так: cmd = undo < permit "^debbuging" permit "^packet-capture" deny .* ># можно использовать скрипты, например, так: # запретим все команды, которые начинаются с символов в квадртаных скобках script = < if (cmd =~ "^[a,e,f,i,g,h,k,l,m]") < deny >> # разрешим команды, начинающиеся на ba или br, запретим все остальные, начинающиеся на b: script = < if (cmd =~ "^b[a,r]") < permit >else if (cmd =~ "^b") < deny >> # разрешим команды, начинающиеся на deb, dir, всё, что входит в display, запретим остальные, начинающиеся на d script = < if (cmd =~ "^deb" || cmd =~ "^dir" || cmd =~ "^display") < permit >else if (cmd =~ "^d") < deny >> > > group = TACACS_HELPDESK < # можно прикрутить права другой группы, просто в качестве примера: # member = TACACS_ADMIN message = "your text" default service = deny acl = nacacl service = shell < default command = permit default attribute = deny set priv-lvl = 15 # для этой группы разрешим все команды на NAS-устройствах, но запретим bgp, ospf, isis script = < if (cmd =~ "^bgp" || cmd =~ "^ospf" || cmd =~ "^isis") < deny >else permit > > > # настроим группу администраторов, где разрешим всё group = TACACS_ADMIN < message = "your text" default service = permit acl = nacacl service = shell < default command = permit default attribute = permit set priv-lvl = 15 >> # добавим пользователей, которые будут аутентифицироваться через LDAP. В AD заведем этих пользователей чуть позже user = user1 < member = TACACS_ADMIN >user = user2 < # для хостов из списка backbone применяем права группы tacacs_backbone member = TACACS_BACKBONE@backbone # для всех остальных хостов применяем права группы tacacs_helpdesk member = TACACS_HELPDESK ># не обязательно использовать LDAP для аутентификации. Можно использовать локальных пользователей user = local_user < member = TACACS_ADMIN # пароль, который дает утилита openssl passwd -crypt. Применение описано выше, в основном тексте login = crypt s8FHJQOEIWkqlzx ># manual - http://www.pro-bono-publico.de/projects/tac_plus.html#AEN1299 

Теперь добавим учетки на LDAP-сервере. Средства администрирования — Пользователи и компьютеры.

Для начала создадим технологическую учетную запись для mavis: действие — создать — пользователь. На вкладке “Учетная запись” ставим галочки “Запретить смену пароля пользователем”, “Срок действия пароля не ограничен”

ldap-user

В Active Directory создаем группы, которые указали в файле конфигурации: tacacs_admin, tacacs_backbone, tacacs_helpdesk. Tac Plus отрезает префикс «tacacs» при соотношении группы, указанной в AD, группе в конфиге и переводит оставшиеся символы в верхний регистр. Таким образом, например, группе в AD, tacacsadmin, будет соответвствовать группа в tac_plus.cfg — ADMIN, а группе в AD, tacacsbackbone, группа в tac_plus.cfg — BACKBONE (мы же изменили данное поведение, указав атрибуты: AD_GROUP_PREFIX и REQUIRE_TACACS_GROUP_PREFIX в конфиге. Теперь можно создавать группы по с названиями аналогичными файлу конфигурации). По этой же причине стоит использовать большие буквы в названиях групп, в файле конфигурации tac_plus.cfg.

Читайте также:  Kde based linux distributions

Теперь проверим конфиг на ошибки:

/usr/local/sbin/tac_plus -P /usr/local/etc/tac_plus.cfg

Проверим mavis, должен вернуться ACK (проверяем от любого заведенного в AD юзера):

/usr/local/bin/mavistest -d -1 /usr/local/etc/tac_plus.cfg tac_plus TACPLUS

Поскольку скрипт инициализации написано для sysv, скопируем его, куда положено:

cp ./PROJECTS/tac_plus/extra/etc_init.d_tac_plus /etc/init.d/tac_plus

chmod 755 /etc/init.d/tac_plus chown root:root /etc/init.d/tac_plus 

Источник

Оцените статью
Adblock
detector