Authentication Using LDAP and TACACS+ (tac_plus)

จากเรื่องก่อนหน้านี้ ที่ผมได้เขียนเรื่องการ Authentication โดยใช้ RADIUS ซึ่งเมื่อทดสอบดูแล้ว มันขาดบาง Feature ที่ผมต้องการ ซึ่งในส่วนที่ผมต้องการมันใช้งานได้เฉพาะ TACACS+ ผมเลยศึกษาหาวิธีการ และได้ลองทดสอบระบบ (ซึ่งจริงๆ แล้วผมก็มี ACS 4.2 ของ Cisco อยู่แล้วแต่มันเป็น Windows Server 2003 ซึ่งผมทดสอบกับ VMware มันใช้ Resource เยอะมาก เลยอยากหา Version ที่ใช้งานบน Linux Platform) โดยผมขอแบ่งเนื้อหาออกเป็นส่วนดังนี้

Part1 > TACACS+ คืออะไร
Part2 > การติดตั้ง Package ldap และ tac_plus
Part3 > การ Configure
Part4 > การทดสอบ

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Software Requirement

>Server TACACS+
-Debian 5
-Openldap
-tac_plus_v9a

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Part I >> TACACS+ คืออะไร <<
TACACS+ (Terminal Access Controller Access-Control System Plus) เป็น protocol ของ cisco ซึ่งให้บริการในการ Access control ของอุปกรณ์ Network ที่ได้มีการปรับปรุงและพัฒนามาจาก RADIUS ซึ่งเป็น Standard Protocol (RFC 2865,RFC 2138) โดยมีการเพิ่มความสามารถในส่วนของ AAA (authentication, authorization and accounting) ให้มีเหมาะสมมากขึ้น ซึ่งถ้าเปรียบเทียบระหว่าง TACACS+ กับ RADIUS จะเห็นถึงความแตกต่างกันดังนี้

-Transport Protocol
RADIUS จะใช้ UDP Protocol Port Port Number 1812
TACACS+ จะใช้ TCP Protocol Port Port Number 49
ซึ่ง TCP จะได้เปรียบกว่า UDP เพราะเป็น TCP เป็น connection-oriented transport จึงทำให้มีความน่าเชื่อถือสูงกว่าในการส่งข้อมูล เพราะคุณสมบัติที่ต้องการคือความถูกต้องและสมบูรณ์ที่สุดของข้อมูล

-Security Packet
RADIUS จะ encrypts เฉพาะ password ใน access-request packets
TACACS+ จะ encrypts ข้อมูลใน packet (Body Packet) ยกเว้น Header Packet ซึ่งใน Header จะมี Field แสดงถึงการ encrypts Body Packet
ซึ่ง TACACS+ จะมีความปลอดภัยของข้อมูลที่ดีกว่า RADIUS

-Authentication and Authorization
RADIUS จะส่งข้อมูลของการ Authentication และ Authorization ทั้งสองส่วนนี้ จาก Server ไปยัง Client พร้อมกันใน access-accept packets
TACACS+ จะมีการแยกส่วนตามโครงสร้างของ AAA ในการให้บริการ
ซึ่งทำให้ TACACS+ มีความสะดวกและยืดหยุ่นกว่าในการให้บริการ

-Protocol Support
RADIUS ไม่ Support
-AppleTalk Remote Access (ARA) protocol
-NetBIOS Frame Protocol Control protocol
-Novell Asynchronous Services Interface (NASI)
-X.25 PAD connection
TACACS+ Support Protocol มากกว่า RADIUS

-Router Management
RADIUS ไม่มีความยืดหยุ่นในการควบคุม -authorization of router commands ของ user
TACACS+ สามารถควบคุมการใช้งาน Command ของ User ได้ 2 แบบ
-Assign privilege levels
-Explicitly specify

Interoperability
RADIUS เป็น Standard
TACACS+ เป็น Proprietary ของ cisco

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Part II >> การติดตั้ง Package ldap และ tac_plus <<

Install Openldap on TACACS+
tacacs-plus:~#apt-get install slapd ldap-utils libldap2-dev

Install tac_plus on TACACS+
Download tac_plus and patch
tacacs-plus:~#wget http://www.gazi.edu.tr/tacacs/get.php?src=tac_plus_v9a.tar.gz
tacacs-plus:~#wget http://www.gazi.edu.tr/tacacs/patches/edmar_borges_ldap.c

Extract tac_plus package
tacacs-plus:~#tar -zxvf tac_plus_v9a.tar.gz
tacacs-plus:~#cd /root/tac_plus_v9a
tacacs-plus:~#cp ../edmar_borges_ldap.c ldap.c

Install compiler
tacacs-plus:~#apt-get install g++

Configure and compile tac_plus
tacacs-plus:~#./configure --with-ldap
tacacs-plus:~#make tac_plus

ถ้า Compile แล้วมี Error ให้ทำการแก้ไข file config.c
tacacs-plus:~#vi +112 config.c

static char *authen_default = NULL; /* top level authentication default */
static int authen_default_method = 0; /*For method check */
char *nopasswd_str = “nopasswd” ; << ลบ static ออก

เมื่อแก้ไข file config.c แล้วทำการ Compile ใหม่อีกครั้ง
tacacs-plus:~#make tac_plus
tacacs-plus:~#make install

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Part III >> การ Configure <<

Configure tac_plus
tacacs-plus:~#mkdir /etc/tac-plus
tacacs-plus:~#vim /etc/tac-plus/tacacs.conf

# comment while debug
#Set up accounting if enableing on NAS
accounting file = /var/log/tac-plus/account.txt

#NAS key below
key = My1@6

default authentication = ldap “ldap://192.168.200.1:389/base=dc=local.com/attribute=uid”
user = DEFAULT {
service = ppp protocol = ip {
}
}

#Enable password setup for everyone:
user = $enable$ {
global = cleartext “login”
}

Create init script for running tacacs service
tacacs-plus:~#vim /etc/init.d/tac-plus

#!/bin/sh
#
### BEGIN INIT INFO
# Provides: tac-plus
# Required-Start: $network
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: S 0 1 6
# Short-Description: Start tac-plus server.
# Description: Run the tac-plus server listening for
# AAA ( access, acounting and autorization request )
# from routers or RAS (remote access servers) via
# tacacs+ protocol
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/tac_plus
NAME=tac_plus
DESC="Tacacs+ server"
OTHER_OPTS="-d 248"
CONFIG_FILE="/etc/tac-plus/tacacs.conf"

test -f $DAEMON || exit 0

if [ -r /etc/default/tac-plus ] ; then
. /etc/default/tac-plus
fi

DAEMON_OPTS="-C $CONFIG_FILE $OTHER_OPTS"
#set -e

case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON
echo "$NAME."
;;
#reload)
#
# The daemon AFAIK have problems reloading its
# config files on the fly. When sending the signal
# it dies trying to bind again to the socket.
# So it has been disabled.
# echo "Reloading $DESC configuration files."
# start-stop-daemon --stop --signal FIXME --quiet --pidfile \
# /var/run/$NAME.pid --exec $DAEMON
#;;
restart|force-reload)
#
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON
sleep 1
start-stop-daemon --start --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
# echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac

exit 0

Change permission script
tacacs-plus:~#chmod u+x /etc/init.d/tac-plus

Make Tacacs+ service start when OS booting
tacacs-plus:~#update-rc.d tac-plus start 30 2 3 4 5 . stop 70 0 1 6 .

Configure Logging
tacacs-plus:~#mkdir /var/log/tac-plus
tacacs-plus:~#touch /var/log/tac-plus/account.txt

Starting tacacs+
tacacs-plus:~#/etc/init.d/tac-plus start

Check tacacs service
tacacs-plus:~#netstat -pln | grep tac
tcp 0 0 0.0.0.0:49 0.0.0.0:* LISTEN 9497/tac_plus

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: