AAA หรือ Authentication, Authorization and Accounting เป็นแนวคิดและวิธีการสำหรับการรักษาความปลอดภัยและสร้างความน่าเชื่อถือให้แก่ระบบของเรา ถึงอักษรย่อทั้ง 3 ตัว มีความหมายดังนี้
Authentication : การตรวจสอบและพิสูจน์ตัวตน เพื่อเข้าใช้งานระบบ ซึ่งมีหลากหลายวิธี เช่น Username/Password, ลายนิ้วมือ,ใบหน้า
Authorization : การกำหนดสิทธิการเข้าถึงให้แก่บุคคลว่าสามารถใช้งานอะไรในระบบได้บ้าง เช่น บางคนสามารถคอนฟิกได้ แต่บางคนสามารถมอนิเตอร์ได้เท่านั้น
Accounting : เป็นการเก็บและบันทึกว่าแต่ละคนเข้ามาเปลี่ยนแปลงแก้ไขอะไรบ้างในระบบบ้าง เพื่อเก็บข้อมูลไว้ตรวจสอบ
ในบทความนี้จะทำการคอนฟิก AAA โดยใช้ Local database บน Network device (Router,Switch) นะครับ แต่ในการใช้งานจริง ถ้าเป็นระบบใหญ่ๆ แนะนำให้ใช้ร่วมกับ External server จะมีความยืดหยุ่นมากกว่า และสามารถจัดการได้จากที่เดียว รวมถึงสามารถทำ Policy ต่างๆ ได้ด้วย External Server ที่แนะนำ นั่นคือ Cisco ISE สามารถใช้ได้ทั้ง Feature ที่เป็น Radius Server หรือถ้าอยากทำ Policy ควบคุมการสั่งแต่ละคำสั่งเลย แนะนำใช้ Feature TACACS Server ได้เลยครับ
ขั้นตอนการคอนฟิก
Step 1: Enable AAA New Model
Router(config)#aaa new-model
Step 2: สร้าง default authentication list (สามารถเปลี่ยน Default เป็นชื่อก็ได้นะ)
ความหมายของคำสั่งนี้คือ การ Authentication จะใช้ชื่อ “default” และจะอ่านข้อมูล User ที่ Login เข้ามาโดยอ่านจาก Local database
Router(config)#aaa authentication login default local
Step 3: Apply Authentication list ไปที่ Line VTY (Apply ที่อื่นด้วยก็ได้นะ เช่น Line console)
Router(config)#line vty 0 4
Router(config)#login authentication default
Router(config)#transport input all
Router(config)#line console 0
Router(config)#login authentication default
Router(config)#exit
Step 4: สร้าง Local User บน Network Device (Router/Switch) เพื่อใช้สำหรับการระบุตัวตนในการเข้าถึงอุปกณ์
Router(config)#username cisco privilege 15 password cisco123
Step 5: Debugging เพื่อดูการทำงานของ AAA Authentication
Router#debug aaa authentication
Router#debug aaa protocal local
Router#Terminal Monitor
Router#show debugging
General OS:
AAA Authentication debugging is on
AAA Local debugs debugging is on
IOSXE Conditional Debug Configs:
Conditional Debug Global State: Stop
IOSXE Packet Tracing Configs:
Packet Infra debugs:
Ip Address Port
------------------------------------------------------|----------
ทดสอบ Login ด้วย User ที่ไม่ถูกต้อง และดูผลลัพธ์ที่เกิดขึ้น
*Apr 29 14:43:48.363: AAA/BIND(00000FAF): Bind i/f
*Apr 29 14:43:48.363: AAA/AUTHEN/LOGIN (00000FAF): Pick method list 'default'
*Apr 29 14:43:48.363: AAA/LOCAL/LOGIN(00000FAF): user admin not found in local DB
*Apr 29 14:43:48.363: AAA/LOCAL/LOGIN(00000FAF): get password
*Apr 29 14:43:48.364: AAA/LOCAL/LOGIN(00000FAF): user admin not found in local DB
*Apr 29 14:43:48.364: AAA/LOCAL/LOGIN(00000FAF): check username/password
*Apr 29 14:43:48.364: AAA/LOCAL/LOGIN(00000FAF): failover
ทดสอบ Login ด้วย User ที่ถูกต้อง และดูผลลัพธ์ที่เกิดขึ้น
*Apr 29 14:46:47.141: AAA/BIND(00000FB2): Bind i/f
*Apr 29 14:46:47.141: AAA/AUTHEN/LOGIN (00000FB2): Pick method list 'default'
*Apr 29 14:46:47.141: AAA/LOCAL/LOGIN(00000FB2): get password
*Apr 29 14:46:47.142: AAA/LOCAL/LOGIN(00000FB2): check username/password
*Apr 29 14:46:47.150: AAA/LOCAL: exec
*Apr 29 14:47:03.132: AAA: parse name=tty2 idb type=-1 tty=-1
*Apr 29 14:47:03.132: AAA: name=tty2 flags=0x11 type=5 shelf=0 slot=0 adapter=0 port=2 channel=0
*Apr 29 14:47:03.132: AAA/MEMORY: create_user (0x7FE673C92618) user='cisco' ruser='NULL' ds0=0 port='tty2' rem_addr='192.168.10.1' authen_type=ASCII service=ENABLE priv=15 initial_task_id='0', vrf= (id=0)
*Apr 29 14:47:03.132: AAA/AUTHEN/START (3932439966): port='tty2' list='' action=LOGIN service=ENABLE
*Apr 29 14:47:03.132: AAA/AUTHEN/START (3932439966): non-console enable - default to enable password
*Apr 29 14:47:03.132: AAA/AUTHEN/START (3932439966): Method=ENABLE
*Apr 29 14:47:03.132: AAA/AUTHEN (3932439966): status = GETPASS
*Apr 29 14:47:05.415: AAA/AUTHEN/CONT (3932439966): continue_login (user='(undef)')
*Apr 29 14:47:05.415: AAA/AUTHEN (3932439966): status = GETPASS
*Apr 29 14:47:05.416: AAA/AUTHEN/CONT (3932439966): Method=ENABLE
*Apr 29 14:47:05.416: AAA/AUTHEN (3932439966): status = PASS
*Apr 29 14:47:05.416: AAA/MEMORY: free_user (0x7FE673C92618) user='NULL' ruser='NULL' port='tty2' rem_addr='192.168.10.1' authen_type=ASCII service=ENABLE priv=15 vrf= (id=0)