AAA Protocol

AAA Protocol ประกอบด้วยกระบวนการ 3 ส่วน คือ

>Authentication

>Authorization

>Accounting

โดยแต่ละส่วนสามารถอธิบายได้ดังนี้

>Authentication คือ กระบวนการตรวจสอบตัวตน เพื่อเป็นการพิสูจน์ตัวตนในการเข้าใช้งานระบบ โดยวิธีการพิสูจน์ตัวตนนั้นมีหลายวิธีตามความเหมาะสม และความสะดวกในการใช้งาน โดยมีวิธีการดังนี้

-Password

-PIN Code

-Biometric trails

-One-time Password

-Public-key cryptography

-Digital Signature

-Quiz

>Authorization คือกระบวนการสิทธิว่าสามารถใช้งานบริการของระบบได้อย่างไรบ้าง ตาม Policy ของแต่ละคน หรือแต่ละกลุ่ม ซึ่งในการตรวจสอบสิทธิจะอ้างอิงจากการ Authentication ก่อน เช่น User1 ทำการ Login เข้าสู่ระบบโดยขั้นตอนแรกต้องผ่านการ Authentication เพื่อทำการพิสูจน์ตัวตนก่อน เมื่อทำการ Authentication ได้สมบูรณ์แล้วก็จะทำการตรวจสอบ Authorize ว่ามีสิทธิในการใช้บริการอะไรได้บ้างตามที่กำหนด

>Accounting คือกระบวนการเก็บข้อมูลและบันทึกว่าแต่คน หรือแต่ละกลุ่มได้ใช้บริการหรือได้ดำเนินการอะไรในระบบบ้าง เพื่อเก็บไว้เป็นข้อมูลในการตรวจสอบ หรือนำข้อมูลที่ได้มาเป็นแนวทางในการกำหนด Policy

AAA Protocol

>DIAMETER

>RADIUS

>TACACS

>TACACS+

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

Authentication Using LDAP and RADIUS (OpenLDAP+FreeRADIUS)

Introduction

ในอุปกรณ์ Network จะมีการตรวจสอบสิทธิ์ในการใช้งาน เพื่อเพิ่มระบบความปลอดภัยให้กับ Network ซึ่งการตรวจสอบนั้นเราสามารถตรวจสอบ Account จาก Local Database ของอุปกรณ์เอง หรือใช้ระบบ Centralize Database  ซึ่งการรูปแบบของ Centralize Database จะทำให้ลดปัญหาเรื่องข้อมูลซ้ำซ้อน และเพิ่มความสะดวกในการ Management ด้วย การนำเอา LDAP มาเป็น Centralize Database และใช้ RADIUS เป็น Authenticator นั้นก็เป็นรูปแบบหนึ่งเพิ่มประสิทธิภาพในการใช้งาน ซึ่งในบทความนี้ผมได้เขียนเนื้อหาที่เกี่ยวข้องแบ่งเป็นแต่ละส่วนดังนี้

Part 1 >เริ่มเรียนรู้ว่า LDAP,RADIUS คืออะไร

Part 2 >การติดตั้ง Application

Part 3 >การ Configure Application

Part 4 >การทดสอบโดยใช้ NTRadPing

Part 5 >แนวทางการแก้ไขปัญหา

Part 6 >การ Configure Option ให้กับระบบ

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

Software Requirement

>Server LDAP

-CentOS 5.5

-openldap-servers-2.3.43-12.el5_5.2

>Server RADIUS

-CentOS 5.5

-freeradius2-2.1.7-7.el5

-freeradius2-ldap-2.1.7-7.el5

-freeradius2-utils-2.1.7-7.el5

>Tester Client

-NTRadPing

-JXplorer (build JXv3.2.1)

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

PART I >> เริ่มเรียนรู้ว่า LDAP,RADIUS คืออะไร <<

1. LDAP (Lightweight Directory Access Protocol)

LDAP (นิยมอ่านว่า “แอล-แด็บ”) เป็น Protocol ที่พัฒนามาจาก Protocol X.500 ซึ่งใช้ในการเข้าถึงและ Update ข้อมูลของ Directory ซึ่งDirectory ในทาง Computer ที่จริงก็อาจเรียกได้ว่าเป็น Database แบบพิเศษหรือ Data repository ที่บรรจุรายละเอียดของ Object ต่างๆ เช่น Users, Application, Files, Printer และอื่นๆ รวมทั้ง Security information ของ Object เหล่านี้ด้วย โดยข้อแตกต่างของ Directory กับ Database ปกติ ได้แก่
1.     Operation: ใน Directory จะเน้นที่การ Access ข้อมูลหรือ อ่านข้อมูล มากกว่า Update หรือ เขียนข้อมูล ในขณะที่ Database ทั่วไปจะเน้นการ Update มากกว่า
2.     Transaction: ใน Database จะรองรับการทำ Transaction หรือการ Update ข้อมูลสองจุดที่ต้องสอดคล้องกัน แบบ All-or-nothing เช่นการโอนเงินจากบัญชีหนึ่ง ไปอีกบัญชีหนึ่ง ที่ต้องการความสมบูรณ์ทั้ง 2 ฝั่ง หรือไม่ก็ไม่ต้องทำเลย ในขณะที่ Directory ที่เน้นการอ่านอย่างเดียว อาจจะไม่ต้องการความสอดคล้องกันของข้อมูลบ้างนัก เช่นเมื่อมีการย้ายที่อยู่ระหว่างคน 2 คน ก็ต้องมีการปรับเปลี่ยนเบอร์ติดต่อของ 2 คนนั้น ซึ่งตรงนี้อาจจะไม่จำเป็นต้องทำทันที อย่างไรก็ตาม Feature นี้อาจจะมีการผนวกเข้ากับ LDAP Product ใหม่ๆ ในอนาคตก็ได้
3.     Data Accuracy: Directory อาจจะมีข้อจำกัดในการจัดเก็บข้อมูลที่ไม่สมบูรณ์ เช่นมีแต่ชื่อ ไม่มีที่อยู่ แต่อย่างไรก็ตาม เราสามารถ Configure คุณสมบัติเหล่านี้ได้ในบาง Directory Service
4.     Query: Directory ไม่ Support Query String (SQL, Structured Query Language)

อย่าง ไรก็ตามถึงแม้ Directory จะมีคุณสมบัติด้อยกว่า Database หลายประการ แต่เนื่องจาก Protocol ที่ใช้ในการเข้าถึง Directory เช่น LDAP มีความเร็วในการเข้าถึงข้อมูลสูง และก็ทำให้ Application ที่ทำงานบน Protocol เหล่านี้สามารถเข้าถึงข้อมูลอย่างรวดเร็ว ทำให้ระบบ Directory เป็นที่ยอมรับ และนำมาใช้งานทั่วไป

อ่านรายละเอียดเพิ่มเติมที่ LDAP

Credit by : http://www.msit.mut.ac.th

Note: ไว้โอกาสหน้าผมจะเขียนบทความเฉพาะเรื่องของ LDAP อย่างเดียวครับ

2. RADIUS (Remote Authentication Dial In User Service )

RADIUS คือ วิธีการมาตรฐานของการแลกเปลี่ยนข้อมูลระหว่างอุปกรณ์ที่ควบคุมการใช้งานเน็ตเวิร์ค  (Network Access Server)  กับผู้ใช้งาน  (Access Clients) และอุปกรณ์ที่ทำหน้าที่ตรวจสอบสิทธิ์การใช้งาน (Radius Server)

องค์ประกอบพื้นฐานของระบบ RADIUS

2.1 Access Clients
คือ เครื่องคอมพิวเตอร์หรืออุปกรณ์ที่ผู้ใช้งานสั่งให้ติดต่อระบบเพื่อใช้งาน เช่น เครื่องคอมพิวเตอร์ที่ลูกค้า Individual ใช้งาน โดยใช้ โปรแกรม Dial-Up Net working สั่งงาน Modem ให้ Connect เพื่อใช้งานอินเทอร์เน็ต
2.2 Network Access Servers (NAS )
คือ อุปกรณ์ที่ทำหน้าที่เชื่อมต่อและจัดการการติดต่อระหว่าง Access Clients และ RADIUS Server ซึ่ง NAS จะทำหน้าที่เป็น Client เชื่อมต่อกับ RADIUS Server ส่งผ่านและจัดการข้อมูลที่ใช้ในการตรวจสอบสิทธิ์ กำหนดสิทธิ์ ของ Access Clients เมื่อ Access Clients ร้องขอการต่อเชื่อมซึ่งจะต้องต่อเชื่อมมายัง NAS ผ่านโพรโตคอลที่ใช้ในการต่อเชื่อมต่าง ๆ เช่น PPP (Point-to-Point Protocol), SLIP (Serial Line Internet Protocol), Extensible Protocol อื่น ๆ เป็นต้น
ซึ่งจำเป็นต้องมีการส่งผ่าน Username และ Password จาก Access Clients มายัง NAS  หลังจากนั้น NAS จะส่งข้อมูลที่จำเป็นต่าง ๆ เช่น Username, Password, NAS IP Address, NAS Port Number และข้อมูลอื่น ๆ ไปที่ RADIUS Server เพื่อขอตรวจสอบสิทธิ์ (Request Authentication)
2.3 RADIUS Server
ทำการตรวจสอบสิทธิ์โดยใช้ข้อมูลที่ NAS ส่งมา (Access-Request) กับข้อมูลที่จัดเก็บไว้ใน RADIUS Server เอง หรือจากฐานข้อมูลภายนอก อื่น ๆ เช่น MS SQL Server, Oracle Database, LDAP Database หรือ RADIUS Server อื่น (ซึ่งเรียกการส่งผ่านการตรวจสอบสิทธิ์แบบนี้ว่า Proxy)
ในกรณีที่ข้อมูลทั้งหมดถูกต้อง RADIUS Server จะส่งผลยินยอมการเชื่อมต่อ (Access-Accept) หรือ ไม่ยินยอม (Access-Reject) ในกรณีที่ข้อมูลไม่ถูกต้อง แก่ NAS หลังจากนั้น NAS จะเชื่อมต่อหรือยกเลิกการการต่อเชื่อมตามผลที่ได้รับจาก RADIUS Server ซึ่งตามปรกติแล้ว NAS จะขอบันทึกข้อมูลต่าง ๆ เช่น วันที่ เวลา Username และข้อมูลอื่น ๆ ไปที่ RADIUS Server (Accounting Request) เพื่อให้ RADIUS Sever จัดเก็บข้อมูลหรือส่งต่อไปที่ RADIUS Server อื่น จัดเก็บเพื่อใช้ในการประมวลผลอื่น ๆ ต่อไป

อ่านรายละเอียดเพิ่มเติมที่ RADIUS

Credit by : http://ekasitw.tripod.com

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

Part II  >> การติดตั้ง Application <<

Install freeradius on RADIUS Server

[root@radius ~]#yum install freeradius2 freeradius2-ldap freeradius2-utils

Install Openldap on LDAP Server

[root@database ~]#yum install openldap-servers

Install NTRadPing and JXplorer on Tester Client

Download NTRadPing

Download JXplorer

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

Part III  >> การ Configure Application <<

3.1 Configure RADIUS Server

ในการ Configure RADIUS นั้นในลำดับแรกแนะนำให้ Backup Default Configure ไว้ก่อนหากหลังจากการ Edit Configure แล้ว Server ไม่สามารถ Run RADIUS ได้จะได้นำ Configure เดิมมาใช้

3.1.1 Backup configure

[root@radius ~]#tar cvzf backup-radius.tar.gz /etc/raddb/

3.1.2 Edit radiusd.conf

[root@radius ~]#vi /etc/raddb/radiusd.conf

………………

line 279           #  Port on which to listen.
line 280           #  Allowed values are:
line 281           #    integer port number (1812)
line 282           #    0 means “use /etc/services for the proper port”

line 283            port = 0      << ค่าเดิม

เปลี่ยนค่าในบรรทัดที่ 283 ตามค่าด้านล่าง

line 283          port = 1812 << ค่าใหม่

………………

line 439         #  Log authentication requests to the log file.
line 440         #
line 441         #  allowed values: {no, yes}
line 442         #
line 443             auth = no       << ค่าเดิม

เปลี่ยนค่าในบรรทัดที่ 443 ตามค่าด้านล่าง

line 443             auth = yes << ค่าใหม่

………………

3.1.3 Edit clients.conf

[root@radius ~]#vi /etc/raddb/clients.conf

………………

line 192            #  You can now specify one secret for a network of clients.
line 193            #  When a client request comes in, the BEST match is chosen.
line 194            #  i.e. The entry from the smallest possible network.
line 195            #

เพิ่ม Network ของ NAS ที่จะ Authentication กับ RADIUS ตั้งแต่บรรทัดที่ 196-199

line 196               client 192.168.200.0/24 {
line 197                            secret             = My1@6
line 198                            shortname    = MyLAB-Network
line 199                }
line 200          #
line 201           #  client 192.168.0.0/24 {
line 202          #               secret              = testing123-1
line 203          #               shortname     = private-network-1
line 204          #}

………………

3.1.4 Edit ldap module

[root@radius ~]#vi /etc/raddb/modules/ldap

………………

แก้ไขบรรทัดที่ 33 และ 36

line 26           #  Setting “Auth-Type = LDAP” is ALMOST ALWAYS WRONG.  We
line 27          #  really can’t emphasize this enough.
line 28           #
line 29               ldap {
line 30           #
line 31                          #  Note that this needs to match the name in the LDAP
line 32                          #  server certificate, if you’re using ldaps.
line 33                              server = “ldap.local.com”
line 34                          # identity = “cn=admin,o=My Org,c=UA”
line 35                          # password = mypass
line 36                              basedn = “dc=local, dc=com”
line 37                              filter = “(uid=%{%{Stripped-User-Name}:-%{User-Name}})”
line 38                          # base_filter = “(objectclass=radiusprofile)”

………………

3.1.5 Edit freeradius default configure

[root@radius ~]#vi /etc/raddb/sites-available/default

………………
line 62                        authorize {
line 63                                             #

………………

Uncomment บรรทัดที่ 170

line 168                                          #  The ldap module will set Auth-Type to LDAP if it has not
line 169                                          #  already been set
line 170                                          ldap

………………

line 205                                           }

………………

line 234               authenticate {

line 235                                           #

………………

line 276                                          # Uncomment it if you want to use ldap for authentication
line 277                                         #
line 278                                         # Note that this means “check plain-text password against
line 279                                         # the ldap database”, which means that EAP won’t work,
line 280                                         # as it does not supply a plain-text password.
Uncomment บรรทัดที่ 281-283

line 281                                          Auth-Type LDAP {
line 282                                                          ldap
line 283                                          }

………………

line 304                                          }

3.1.6 Test radius configure

ก่อนที่จะทดสอบ Configure ให้ตรวจสอบก่อนว่า Service RADIUS Run อยู่หรือเปล่าด้วย

[root@radius ~]#/etc/init.d/radiusd status

ถ้ามี Service RADIUS Run อยู่ก็ให้ Stop Service ก่อน

[root@radius ~]#/etc/init.d/radiusd stop

จากนั้นก็ทำการทดสอบด้วย Command:

[root@radius ~]#radiusd -X

ถ้าทำการทดสอบ Configure ผ่านจะได้ผลดังนี้

FreeRADIUS Version 2.1.7, for host i686-redhat-linux-gnu, built on Mar 31 2010 at 00:25:31
Copyright (C) 1999-2009 The FreeRADIUS server project and contributors.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
You may redistribute copies of FreeRADIUS under the terms of the
GNU General Public License v2.
Starting – reading configuration files …

………………

………………

………………

Listening on authentication address * port 1812
Listening on accounting address * port 1813
Listening on command file /var/run/radiusd/radiusd.sock
Listening on proxy address * port 1814
Ready to process requests.

Note: ถ้ามี Error ก็จะแสดง file และ บรรทัดที่ Error

3.1.7 Configure firewall for accept RADIUS connection

[root@radius ~]#vi /etc/sysconfig/iptables

ทำการ Add rule ของ firewall
A RH-Firewall-1-INPUT -m state –state NEW -m udp -p udp –dport 1812 -j ACCEPT

3.1.8 Run Service RADIUS

[root@radius ~]#/etc/init.d/radiusd stop

3.1.9 ทดสอบด้วย radtest

[root@radius ~]# radtest root password-root localhost 0 testing123
Sending Access-Request of id 85 to 127.0.0.1 port 1812
User-Name = “root”
User-Password = “password-root”
NAS-IP-Address = 192.168.200.2
NAS-Port = 0
rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=85, length=20

ถ้าได้ผลตามด้านบนก็แสดงว่าสามารถใช้งานได้ปกติแล้ว

3.2 Configure LDAP Server

ในส่วนของการ configure LDAP server นั้นง่ายมาก เพราะมีการ configure เพิ่มเติมน้อยมาก ขั้นตอนที่ยุ่งยากจะเป็นส่วนของการจัดการข้อมูลมากกว่า

3.2.1 Edit slapd.conf

สร้าง password ให้กับ root ด้วย

[root@database ~]# slappasswd

New password:
Re-enter new password:
{SSHA}YUpvjtn1vKak8dW1qfcO0zqJDXYd+sM/

ทำการ Copy ค่า {SSHA}YUpvjtn1vKak8dW1qfcO0zqJDXYd+sM/ ไปใช้เป็น password ให้กับ root

[root@database ~]# vi /etc/openldap/slapd.conf

………………

line 82                                ############################################
line 83                                # ldbm and/or bdb database definitions
line 84                                ############################################
line 85

ทำการแก้ไขค่าในบรรทัดที่ 87-88 และ 93

line 86                               database        bdb
line 87                              suffix          “dc=local,dc=com”
line 88                              rootdn          “cn=Manager,dc=local,dc=com”
line 89                             # Cleartext passwords, especially for the rootdn, should
line 90                            # be avoided.  See slappasswd(8) and slapd.conf(5) for details.
line 91                             # Use of strong authentication encouraged.
line 92                             # rootpw                secret
line 93                                rootpw          {SSHA}YUpvjtn1vKak8dW1qfcO0zqJDXYd+sM/

………………

3.2.2 Start Service LDAP

[root@database ~]#/etc/init.d/ldap start

หาก Start Service แล้วเกิด Error อย่างเช่นด้านด้านล่าง

/var/lib/ldap/__db.004 is not owned by “ldap”              [WARNING]
/var/lib/ldap/__db.001 is not owned by “ldap”              [WARNING]
/var/lib/ldap/__db.002 is not owned by “ldap”              [WARNING]
/var/lib/ldap/__db.006 is not owned by “ldap”              [WARNING]
/var/lib/ldap/__db.005 is not owned by “ldap”              [WARNING]
/var/lib/ldap/alock is not owned by “ldap”                        [WARNING]
/var/lib/ldap/__db.003 is not owned by “ldap”              [WARNING]

ซึ่งเกิดจากปัญเรื่อง Permission ไม่ถูกต้อง เมื่อ list file ดูจะเห็นว่า Group และ Owner เป็น root

[root@database ~]#ls -l /var/lib/ldap/
total 884
-rw——- 1 root root 2048 Jul 16 20:37 alock
-rw——- 1 root root 24576 Jul 16 20:37 __db.001
-rw——- 1 root root 212992 Jul 16 20:37 __db.002
-rw——- 1 root root 270336 Jul 16 20:37 __db.003
-rw——- 1 root root 163840 Jul 16 20:37 __db.004
-rw——- 1 root root 802816 Jul 16 20:37 __db.005
-rw——- 1 root root 32768 Jul 16 20:37 __db.006

ให้ทำการแก้ไขโดย

[root@database ldap]# chown ldap.ldap *

จากนั้นลอง list file ดูใหม่อีกครั้งจะได้เป็น

[root@database ldap]# ls -l
total 884
-rw——- 1 ldap ldap 2048 Jul 16 20:37 alock
-rw——- 1 ldap ldap 24576 Jul 16 20:37 __db.001
-rw——- 1 ldap ldap 212992 Jul 16 20:37 __db.002
-rw——- 1 ldap ldap 270336 Jul 16 20:37 __db.003
-rw——- 1 ldap ldap 163840 Jul 16 20:37 __db.004
-rw——- 1 ldap ldap 802816 Jul 16 20:37 __db.005
-rw——- 1 ldap ldap 32768 Jul 16 20:37 __db.006

คราวนี้ก็ลอง Start service ใหม่อีกครั้ง ก็จะสามารถ Run ได้ปกติ

3.2.3 Add initial entries to directory

สร้าง LDIF file ด้วย Editer

[root@database ~]#mkdir /etc/openldap/initldap

[root@database ~]#vi /etc/openldap/initldap/init.ldif

Copy Text ด้านล่าง ลงใน file init.ldif

dn: dc=local,dc=com
objectClass: dcObject
objectClass: organization
dc: local
description: Simulate test authentication system
o: MyLAB

dn: ou=Administrator,dc=local,dc=com
objectClass: organizationalUnit
objectClass: top
ou: Administrator

dn: cn=Manager,ou=Administrator,dc=local,dc=com
objectClass: organizationalRole
cn: Manager

ทำการ Add LDIF file ลงใน Database

[root@database ~]#ldapadd -x -D “cn=Manager,ou=Administrator,dc=local,dc=com” -W -f init.ldif

Enter LDAP Password:     << ให้ใส่ Password ที่กำหนดใน slapd.conf

ตรวจสอบข้อมูลทั้งหมดใน Database ด้วย

[root@database ~]#ldapsearch -x -b ‘dc=local,dc=com’ ‘(objectclass=*)’

3.2.4 Configure firewall for accept LDAP connection

[root@database ~]#vi /etc/sysconfig/iptables

ทำการ Add rule ของ firewall
A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 389 -j ACCEPT

3.2.5 Add radius.schema to LDAP server

ทำการ FTP file openldap.schema จาก RADIUS Server ไปยัง LDAP Server

Directory of openldap.schema on RADIUS Server

/usr/share/doc/freeradius-2.1.7/examples/openldap.schema

นำ openldap.schema ไปไว้ใน Directory schema ของ LDAP Server และ Rename

/etc/openldap/schema/radius.schema

ทำการแก้ไข Configure slapd.conf

[root@database ~]# vi /etc/openldap/slapd.conf

เพิ่ม configure ในบรรทัดที่ 9

line 1                                  #
line 2                                 # See slapd.conf(5) for details on configuration options.
line 3                                 # This file should NOT be world readable.
line 4                                 #
line 5                                  include         /etc/openldap/schema/core.schema
line 6                                  include         /etc/openldap/schema/cosine.schema
line 7                                  include         /etc/openldap/schema/inetorgperson.schema
line 8                                  include         /etc/openldap/schema/nis.schema
line 9                                  include         /etc/openldap/schema/radius.schema

เสร็จแล้วทำการ Restart Service ใหม่อีกครั้ง

[root@database ~]#/etc/init.d/ldap restart

3.2.6 Add data to LDAP server

3.2.6.1 เปิด Application JXplorer บน เครื่อง Tester Client

ทำการ Connect โดยเลือก File >> Connect

ป้อนค่า Parameter ที่สำคัญดังนี้

>>Host: <IP Address or Hostname LDAP Server>

>>Port: <Port in configure file slapd.conf>

>>Level: <User+Password>

>>User DN: <cn=Manager,dc=local,dc=com>

>>Password: <Password in configure file slapd.conf>

Configure connection for LDAP Server

 

3.2.6.2 Add ในส่วนของ organizationalUnit ก่อน โดย Click ขวาที่ local แล้วเลือก New ซึ่งจะต้องกำหนด Class ดังนี้

Add organizationalUnit

 

3.2.6.3 เมื่อเรียบแล้วให้กด Submit

organizationalUnit

 

3.2.6.4 Add User เข้าไปใน organizationalUnit โดยกำหนด Class ดังนี้

Add organizationalPerson

3.2.6.5 เมื่อ Add ข้อมูล User เรียบร้อยแล้วจะได้ดังนี้

organizationalPerson

 

3.2.6.6 กำหนด Password ให้กับ User โดยใส่ค่าใน userPassword จะมี Pop-up ให้ใส่ Password

userPassword

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

Part IV  >> การทดสอบโดยใช้ NTRadPing <<

เปิด Application NTRadPing.exe และ Set Parameter ดังนี้

>> RADIUS Server/port: <IP Address or Hostname RADIUS Server> <Port configure file radiusd.conf on RADIUS Server>

>> RADIUS Secret key: <secret key configure file clients.conf on RADIUS Server>

>> User-Name: <uid on LDAP Server>

>> Password: <userPassword on LDAP Server>

>> Request type: <Authentication Request>

NTRadPing

เมื่อทดสอบ Send ก็จะแสดงผลการทดสอบ

Test Authentication RADIUS

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

Part V  >> แนวทางการแก้ไขปัญหา <<

ในการตรวจสอบปัญหาของ RADIUS Server และ LDAP Server นั้น สามารถทำได้ด้วยการ Debug ซึ่งจะแสดง Process ที่มีปัญหาได้

และในการ Debug จะต้องทำการ Stop Service ก่อน จากนั้นจึงทำการ Debug เพื่อดู Process

Debugging RADIUS Server

[root@radius ~]#radiusd -X

Debugging LDAP Server

[root@radius ~]#slapd -d <level>

Level Description
-1 enable all debugging
0 no debugging
1 trace function calls
2 debug packet handling
4 heavy trace debugging
8 connection management
16 print out packets sent and received
32 search filter processing
64 configuration file processing
128 access control list processing
256 stats log connections/operations/results
512 stats log entries sent
1024 print communication with shell backends
2048 print entry parsing debugging

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

Part VI  >> การ Configure option ให้กับระบบ <<

ถ้าเราต้องการให้ User Login โดยกำหนดให้มี domain ด้วย เช่น Manager@Adminstrator.local.com แต่เราต้องการ RADIUS Server ทำการ Strip domain ออกก่อนที่จะส่งค่าไปยัง LDAP Server

ซึ่งก็จะได้ username เป็น Manager อย่างเดียว ตัดส่วน @Adminstrator.local.com ซึ่งสามารถ Configure RADIUS Server เพิ่มเติมดังนี้

Edit proxy.conf

vi /etc/raddb/proxy.conf

………………

line 655                        #  This realm is for ALL OTHER requests.
line 656                        #
line 657                        #realm DEFAULT {
line 658                        #       authhost        = radius.company.com:1600
line 659                        #       accthost        = radius.company.com:1601
line 660                       #       secret          = testing123
line 661                        #}

เพิ่ม configure บรรทัดที่ 662-667 เข้าไป

line 662                        realm “~local.com” {
line 663                                     type                = radius
line 664                                    authhost        = LOCAL
line 665                                    accthost        = LOCAL
line 666                                    strip
line 667                                    }

………………

ทั้งหมดก็เสร็จสมบูรณ์แล้วสามารถใช้งานระบบทั้งหมดได้ปกติ ผมจะทดสอบ Configure ในส่วน Option อื่นๆ เพิ่มเติม แล้วจะนำมา Share กันในบทความหน้าครับ

ติดตาม

Get every new post delivered to your Inbox.