TACACS+ на Linux с аутентификацие через Active Directory

от автора

В сети присутствует множество различных гайдов на эту тему, но поднять сервис на Linux и связать его с Active Directory в течении 30-60 минут не удалось. Предлагаю свой путь решения задачи, с подробными комментариями.

Приступим к установке сервиса. В качестве ОСи используется CentOS.

Устанавливаем необходимые служебные пакеты

# yum install gcc # yum install perl-LDAP # yum install bind-utils 

Все операции производим под «root»
(соответственно домашняя директория /root)

Установка Tac Plus

# yum install wget # wget http://www.pro-bono-publico.de/projects/src/DEVEL.tar.bz2 # tar xvfj ./DEVEL.tar.bz2 # cd ./PROJECTS # ./configure # make # make install 

Добавляем директории для файлов аккаунтинга

# mkdir /var/log/tac_plus # mkdir /var/log/tac_plus/access # mkdir /var/log/tac_plus/acct # chmod 760 -R /var/log/tac_plus/ 

Добавляем Tac Plus в автозагрузку

# cp /root/PROJECTS/tac_plus/extra/etc_init.d_tac_plus /etc/init.d/tac_plus # chmod 755 /etc/init.d/tac_plus # chkconfig --add tac_plus # chkconfig --level 2345 tac_plus on 

Проверка включения в автозагрузку

# chkconfig --list | grep tac_plus 

Правим конфигурационный файл

# cp /root/PROJECTS/tac_plus/extra/tac_plus.cfg-ads /usr/local/etc/tac_plus.cfg # chmod 660 /usr/local/etc/tac_plus.cfg 

!!! После каждого изменения конфига сервис должен быть перезапущен (service tac_plus restart)
Пример рабочего конфигурационного файла (нужно заменить содержимое tac_plus.cfg, предварительно внеся коррективы в прокомментированные поля)

#!/usr/local/sbin/tac_plus id = spawnd {         listen = { port = 49 } #порт, используемый сервисом TACACS         spawn = {                 instances min = 1                 instances max = 10         }         background = yes }  id = tac_plus { 		# лог файлы         access log = ">/var/log/tac_plus/access/%Y%m%d.log"         accounting log = ">/var/log/tac_plus/acct/%Y%m%d.log" 		 		# блок настройки подключения к Active Directory         mavis module = external {                 setenv LDAP_SERVER_TYPE = "microsoft"                 setenv LDAP_HOSTS = "ldaps://domain.name:636" # имя домена должно разрешаться DNS-сервером (проверить с помощью nslookup). Вместо имени можно использовать IP адрес                 setenv LDAP_SCOPE = sub                 setenv LDAP_BASE = "dc=domain,dc=name" # где искать пользователей                 setenv LDAP_FILTER = "(&(objectclass=user)(sAMAccountName=%s))"                 setenv LDAP_USER = "aduser@domain.name" # служебный юзер для интеграции с AD                 setenv LDAP_PASSWD = "passw0rd" # пароль юзера                 #setenv AD_GROUP_PREFIX = tacacs                 #setenv REQUIRE_TACACS_GROUP_PREFIX = 1                 #setenv USE_TLS = 0                 setenv FLAG_USE_MEMBEROF = 1                 exec = /usr/local/lib/mavis/mavis_tacplus_ldap.pl         }          login backend = mavis         user backend = mavis         #pap backend = mavis          host = world {                 address = ::/0                 welcome banner = ""                 #Crypt password generate by "openssl passwd -1 clear_text_password"                 enable 15 = crypt $1$eqIkg6p0$jzhK5.                 key = "TACACSPASSWORD" #пароль для связки с TACACS-клиентом         } 		# группу администрирования наделяем правами суперадмина         group = ADMIN {             message = "[Admin privileges]"             default service = permit             service = shell {                 default command = permit                 default attribute = permit                 set priv-lvl = 15             }         } 		# группе голосовых админов даем полный набор привелегий и запрещаем конкретные команды         group = VOIP {             message = "[VoIP-admin privileges]"             default service = permit             service = shell {                 default command = permit                 default attribute = permit                 set priv-lvl = 15                 cmd = interface {                     permit "Lo*"                     permit "Se*"                     deny .*                 }                 cmd = aaa { deny .* }                 cmd = username { deny .* }                 cmd = line { deny .* }                 cmd = delete { deny .* }                 #cmd = reload { deny .* }                 cmd = boot { deny .* }                 cmd = enable { deny .* }                 cmd = archive { deny .* }                 cmd = router { deny .* }                 cmd = ip {                     permit "address *"                     deny .*                 }                 cmd = tacacs-server { deny .* }                 cmd = radius-server { deny .* }                 cmd = privilege { deny .* }                 cmd = erase { deny .* }                 cmd = write {                     permit "memory"                     deny .*                 }                 cmd = format { deny .* }             }         } }

Проверяем правильность конфига (если все ОК, то ничего не выведет)

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

Создаем группы в AD
В Active Directory необходимо создать 2 группы (исходя из нашего конфига): tacacsadmin и tacacsvoip.
Tac Plus отрезает префикс «tacacs» при соотношении группы, указанной в AD, группе в конфиге и переводит оставшиеся символы в верхний регистр.
Таким образом tacacsadmin соответвствует ADMIN, а tacacsvoip соответствует VOIP (изменить данное поведение можно поигравшись атрибутами: AD_GROUP_PREFIX и REQUIRE_TACACS_GROUP_PREFIX в конфиге).
Группы указаны в конфиге большими буквами не случайно!
Добавляем пользователей в созданные группы.

Запуск и остановка сервиса TACACS

# service tac_plus start # service tac_plus stop # service tac_plus restart 

Конфигурация сервиса AAA на оборудовании Cisco

tacacs server TACSRV1 	!IP-адрес tacacs-сервера 	address ipv4 172.16.2.2 	!ключ должен совпадать с тем, что указан в конфиге на сервере 	key TACACSPASSWORD 	timeout 2 ! aaa new-model aaa group server tacacs+ TACSERVICE 	server name TACSRV1 aaa authentication login default group TACSERVICE local aaa authentication login CONSOLE local aaa authentication enable default group TACSERVICE enable aaa authorization config-commands aaa authorization exec default group TACSERVICE local aaa authorization exec CONSOLE local aaa authorization commands 15 default group TACSERVICE local aaa accounting commands 15 default start-stop group TACSERVICE ! line con 0 	login authentication CONSOLE line vty 0 15 

Методика дебага
1. Проверка работы модулей LDAP (должно вернуть пустую строку без ошибок). Ошибки в случае не установленного пакета perl-LDAP.

# env LDAP_HOSTS="172.16.1.1" LDAP_SERVER_TYPE="microsoft" /usr/local/lib/mavis/mavis_tacplus_ldap.pl 2. Проверка связки TACACS - LDAP. Должно вернуть в поле RESULT - ACK. В случае ошибки проверить блок конфига, ответственный за интеграцию с AD. <source lang="bash"> # /usr/local/bin/mavistest /usr/local/etc/tac_plus.cfg tac_plus TACPLUS <login> <password> 

3. Проверка, что сервис запущен и слушает порт tcp 49

# netstat -nlp | grep tac_plus 

4. Для того, чтобы увидеть обращения к сервису

# tcpdump -nn port 49 

5. Дебаг запросов обрабатываемых сервисом

# /usr/local/sbin/tac_plus -d 4088 -fp /var/run/tac_plus.pid /usr/local/etc/tac_plus.cfg 

Благодарю за внимание!

Источники информации и вспомогательные ссылки:
http://packetroute.wordpress.com/2012/12/12/tacacs-ad-centos-free/
http://www.pro-bono-publico.de/projects/howto-tac_plus-ads.html
http://habrahabr.ru/post/194750/

ссылка на оригинал статьи http://habrahabr.ru/post/217669/


Комментарии

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

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