Wi-Fi Authentication service
ระบบการยืนยันตัวตนเข้าใช้งานเครือข่ายไร้สายแบบปลอดภัย(WPA/WPA2 Enterprise) ด้วยบัญชีผู้ใช้แบบรวมศูนย์บน Microsoft Windows Server Active Directory พร้อมทั้งการลงทะเบียนหมายเลข MAC Address แบบอัตโนมัติ: กรณีศึกษามหาวิทยาลัยเชียงใหม่ เวอร์ชันปรับปรุง 2558
ความเป็นมา
มหาวิทยาลัยเชียงใหม่ได้ทำการให้บริการเครือข่ายไร้สายในชื่อ Jumbo-Net โดยแต่เดิมให้บริการชื่อจุดเชื่อมต่อ 3 จุดคือ Jumbo-Net, Jumbo-Secure และ Jumbo-Register ซึ่ง Jumbo-Register ใช้ในการลงทะเบียนอุปกรณ์เพื่อใช้งาน Jumbo-Secure ซึ่งใช้ระบบรักษาความปลอดภัยแบบ WPA/WPA2 Enterprise เพื่อสร้าง key และลงทะเบียน MAC Address ส่วน Jumbo-Net เป็นแบบเปิดและเข้าใช้งานด้วยการยืนยันตัวตนผ่านหน้าเว็บ(Web-based Authentication) ซึ่งไม่ค่อยมีความปลอดภัย
ปัญหาและแนวทางแก้ไข
เนื่องจากมหาวิทยาลัยเป็นสถานที่เปิดมีบุคคลทั่วไปเข้าออกเป็นจำนวนมากและในยุคที่ทุกคนต้องการการเชื่อมต่ออินเทอร์เน็ตตลอดเวลาผ่านโทรศัพท์มือถือและอุปกรณ์ต่างๆ การใช้งานแบบ web-based authentication จึงไม่เหมาะสม และเกิดปัญหาคือ
- อุปกรณ์จำนวนมากรวมถึงบุคคลภายนอกที่เข้ามาภายในมหาวิทยาลัย ได้ทำการ associate เข้ากับ SSID แต่ไม่ได้ทำการยืนยันตัวตน ทำให้อุปกรณ์เครือข่ายไร้สายต้องรับภาระงานเพิ่มขึ้นกระทบผู้ใช้ภายใน รวมถึงมีความเสียงด้านความปลอดภัยเนื่องจากไม่ได้เข้ารหัสสัญญาณ
- อุปกรณ์ที่ต้องการเชื่อมต่ออินเทอร์เน็ตประเภทโทรศัพท์มือถือหรือแท็บเล็ตไม่สะดวกต่อการเชื่อมต่อแบบ web-based authentication เหมาะกับ WPA มากกกว่า ระบบเดิมสามารถลงทะเบียน MAC address เพื่อใช้งานได้แค่อุปกรณ์เดียวซึ่งผู้ใช้มีอุปกรณ์หลายอุปกรณ์ที่ต้องการเชื่อมต่ออินเทอร์เน็ตอยู่ตลอดเวลา
จึงมีแนวคิดยกเลิกการให้บริการแบบ web-based authentication และเพื่อให้ง่ายต่อการบริหารจัดการและประสบการณ์การใช้งานของผู้ใช้ที่ดีขึ้นจึงจำเป็นต้องให้ผู้ใช้บริการแบบ WPA ทั้งหมดและยืนยันตัวตนด้วยบัญชีผู้ใช้ CMU IT Account ซึ่งเป็นอีเมลของมหาวิทยาลัยฯ เพื่อให้เกิดเป็น Centralized Authentication ที่ใช้บัญชีเดียวกันกับทุกบริการ และสามารถควบคุมจำนวนอุปกรณ์ของผู้ใช้ได้จึงได้มีการเปลี่ยนแปลงการให้บริการโดยยกเลิก SSID Jumbo-Net เดิมที่เป็น web-based authentication และเปลี่ยนชื่อ SSID Jumbo-Secure มาเป็น @JumboPlus ซึ่งเป็น WPA-Enterprise และปรับปรุงเว็บไซต์ https://jumbo.cmu.ac.th ให้รองรับการลงทะเบียน MAC address โดยผู้ใช้งานสามารถลงทะเบียนใช้งานได้สูงสุด 5 อุปกรณ์หลังจากเปลี่ยนมาใช้งาน @JumboPlus และปิด Jumbo-Net ไปเมื่อต้นเดือนธันวาคม 2556 จะเห็นว่าภาระงานของหน่วยประมวลผลอุปกรณ์ควบคุมการทำงานเครือข่ายไร้สายลดลง
แต่การปิดระบบ web-based authentication ซึ่งผู้ใช้คุ้นเคย จะต้องเตรียมคู่มือไว้ให้พร้อมเนื่องจาก WPA นั้นต้องมีการตั้งค่าที่อุปกรณ์ก่อนในครั้งแรกซึ่งคู่มือและเครื่องมือในการช่วยตั้งค่าบนอุปกรณ์ต่างๆ ในระบบปฏิบัติต่างเช่น iOS, Android, Windows Phone, Windows XP, Windows Vista, Windows 7 , Windows 8 , OSX, Black Berry OS ก็ต้องเผยแพร่บนเว็บไซต์ให้ครบถ้วน
ปรับปรุง 2558
การแก้ปัญหาจาก web authentication มาเป็น WPA-Enterprise นั้นได้เกิดปัญหาเกี่ยวกับการใช้งานเพิ่มขึ้นมานั่นก็คือผู้ใช้งานต้องเข้าสู่ระบบทางเว็บไซต์เพื่อลงทะเบียน mac address ก่อน ซึ่งผู้ใช้ส่วนจะเกิดความสับสนไม่รู้ว่า mac address คืออะไร ทำให้ใช้งานไม่ได้ จึงต้องทำการปรับปรุงให้ระบบลงทะเบียน mac address ให้ผู้ใช้โดยอัตโนมัติและผู้ใช้สามารถเข้าสู่ระบบเพื่อลบอุปกรณ์เดิมออกเมื่อจำนวนอุปกรณ์ครบกำหนดและต้องการใช้อุปกรณ์ใหม่
บัญชีผู้ใช้ไอทีมหาวิทยาลัยเชียงใหม่(CMU IT Account)
มหาวิทยาลัยเชียงใหม่ได้ใช้ Microsoft Windows Active Directory ในการจัดเก็บบัญชีผู้ใช้ซึ่งเป็นบัญชีเดียวกันกับอีเมลของบุคลากรและนักศึกษา การยืนยันตัวตนบนระบบเครือข่ายไร้สายก็ใช้บัญชี CMU IT Account โดย CMU IT Account จะมีเว็บไซต์ https://account.cmu.ac.th เป็นทั้ง Front-End สำหรับผู้ใช้ในการสร้างและจัดการบัญชี และ Back-End สำหรับผู้ดูแลระบบในการจัดการบัญชี บัญชีที่ถูกสร้างขึ้นจะได้รับกล่องข้อความอีเมลโดยอัตโนมัติ
ทดลองปฏิบัติการตั้งค่า freeradius เพื่อให้ตรวจสอบและลงทะเบียน mac address ให้ผู้ใช้โดยอัตโนมัติรวมถึงยืนยันตัวตนผู้ใช้กับบัญชีบน Active Directory และการจัดการอุปกรณ์
ระบบปฏิบัติการ
- Active Directory ใช้ Microsoft Windows Server 2012 R2
- Network Policy and Access Server ใช้ Microsoft Windows Server 2012 R2
- feeradius ใช้ Ubuntu 14.04LTS
การเชื่อมต่อ
หลักการทำงาน
- เครื่อง NPS เชื่อมต่อเข้ากับ AD เพื่อใช้งานบริการยืนยันตัวตนกับบัญชีบน AD ควรติดตั้ง AD บนเครื่องเดียวกันกับ NPS เพื่อลดข้อมูลจราจรผ่านเครือข่าย
- ตั้งค่า RADIUS Proxy ให้ตรวจสอบฐานข้อมูล MAC Address และลงทะเบียน MAC Address ของผู้ใช้ก่อนแบ่งภาระงานไปยืนยันตัวตนที่ NPS ผ่าน protocol radius
- ตั้งค่า Wi-Fi Controller หรือ Wi-Fi Access point ให้มายืนยันตัวตนที่ RADIUS Proxy
ตั้งค่า Network Access Policy Service สำหรับการยืนยันตัวตนผ่าน protocol radius ด้วยบัญชีบน Active Directory
- หลังจาก Sign In เข้าสู่ Windows Server แล้วให้ทำการตั้งค่าทั่วไป เช่น ip address, time zone โดย ip ของ dns server ให้ระบุเป็น ip address ของเครื่อง Active Directory
- ตั้งค่าเครื่อง NPS ให้ join domain โดยไปที่ Server Manager -> Local Server คลิกที่ชื่อของเครื่อง
จะพบ dialog System Properties กด Change
ระบุชื่อเครื่องและโดเมนจากนั้นกด OK และระบุ username/password ของ Domain Administrator กด OK และ Close ระบบจะให้ restart ให้ restart server - Sign In server ด้วย Domain Administrator จากนั้นทำการเพิ่ม Role Active Directory และ NPS โดยไปที่ Server Manager -> Add roles and features
จากนั้นกด Next 3 ครั้ง เลือก Active Directory Domain Services แล้วกด Add Features เลือก Network Policy and Access Services แล้วกด Add Features แล้วกด Next 4 ครั้งแล้วกด Install - เมื่อติดตั้งเสร็จให้คลิก Promote this server to a domain controller
- จะเข้าสู่ขั้นตอนการสร้าง domain controller เลือก Add a domain controller to an existing domain ให้ Domain เป็น cnon.cmu จากนั้นกด Next
- ระบุรหัสผ่านสำหรับการกู้คืน Directory Service และใช้งานค่าปริยาย โดยติดตั้ง DNS server และทำ domain controller นี้ให้เป็น Global Catalog จากนั้นกด Next 5 ครั้งแล้วกด Install และ restart เครื่องหลังจากติดตั้งเสร็จ
- นำเข้า Key Pair สำหรับการใช้งานเข้ารหัส PEAP กด Windows+R พิมพ์ mmc แล้ว Enter เพื่อเรียก console จากนั้นไปที่ File -> Add/Remove Snap-in ในส่วนของ Available Snap-in เลือก Certificates กด Add ที่ dialog Certificate Snap-in เลือก Computer Account จากนั้นกด Next เลือก Local Computer แล้วกด Finish และกด OK
คลิกขวาที่ Personal เลือก All Tasks -> Import กด Next -> Browse ที่ address bar ให้พิมพ์ \\dc.cnoc.cmu\NETLOGON เลือก All File(*.*) แล้วเลือก auth0.cnoc.cmu แล้วกด Open กด Next ระบุหรัสผ่านของ Key Pair เป็น cnoc1234 กด Next สองครั้งแล้ว Finish
หมายเหตุ สามารถสร้าง Key Pair ได้หลายทาง เช่นสร้าง Self-Sign Certificate http://windowsitpro.com/blog/creating-self-signed-certificates-powershell
- เชื่อม NPS เข้ากับ Active Directory ที่ Server Manager เมนู Tools เลือก Network Policy Server คลิกขวาที่ NPS(Local) เลือก Register server in Active Directory
- สร้าง Policy สำหรับการยืนยันตัวตนเลือก RADIUS server for 802.1X Wireless or Wired Connections จากนั้นกด Configure 802.1X
Type of 802.1X connections เลือกเป็น Secure Wireless Connections แล้วกด Next
ที่ Specify RADIUS Switch กด Add จากนั้นระบุค่า RADIUS Client ให้ตรงกับค่า Radius Proxy และกำหนดค่า Share Secret จากนั้นกด OK แล้ว Next
เลือก Type เป็น Microsoft: Protected EAP (PEAP) จากนั้นกด Configure
เลือก Certificate เป็น auth0.cno.cmu แล้วกด OK แล้วกด Next 3 ครั้งแล้วกด Finish - สามารถแก้ไขการตั้งค่าต่างๆ ของ Policy ได้ที่ NPS -> Policy -> ชื่อ จากนั้นให้ดับเบิ้ลคลิกที่ชื่อ Policy
การตั้งค่าเงือนไขการเข้าใช้งานโดยยกเลิกประเภทของอุปกรณ์ปลายทางจากที่รับเฉพาะ 802.11 เป็นอุปกรณ์ใดๆ
การตั้งค่าให้รองรับการยืนตัวตนแบบไม่เข้ารหัสรหัสผ่านสำหรับใช้งานที่ไม่ใช่การยืนยันตัวตนแบบ PEAP
ตั้งค่าเครื่อง RADIUS Proxy เพื่อตรวจสอบฐานข้อมูล MAC Address และการ Load Balance
1. ตั้งค่าเบื้องต้นเช่น ip address, hostname ให้ Ubuntu server
2. ที่เครื่อง RADIUS Proxy ติดตั้ง package ดังนี้
apt-get install freeradius freeradius-mysql mysql-server mysql-client
3. สร้างฐานข้อมูลสำหรับ freeradius และนำเข้าโครงสร้างตาราง
cd /tmp
echo "CREATE DATABASE freeradius CHARACTER SET utf8 COLLATE utf8_general_ci;" | mysql -uroot -pqwerty
mysql –uroot –pqwerty freeradius < /etc/freeradius/sql/mysql/schema.sql
wget http://myweb.cmu.ac.th/supawit.w/mac_auth_v58/mac.sql
mysql –uroot –pqwerty freeradius < mac.sql
4. แก้ไขไฟล์ /etc/freeradius/sql.conf ส่วนที่เชื่อมต่อกับฐานข้อมูล
server = "localhost"
login = "root"
password = "qwerty"
radius_db = "freeradius"
...
num_sql_socks = 50 // ปรับให้เหมาะสมกับปริมาณ Load และปรับให้สอดคล้องกับ my.cnf
5. แก้ไขไฟล์ /etc/freeradius/radiusd.conf เพื่อให้ freeradius เก็บ log การยืนยันตัวตน และเปิดใช้งานฐานข้อมูล
log {
...
auth = yes
...
}
...
modules {
...
$INCLUDE sql.conf // ยกเลิก comment
...
6. เพิ่ม realm สำหรับโดเมนขององค์กรและทำ pool ของ radius สำหรับการ Load Balance โดยการเพิ่มท้ายไฟล์ /etc/freeradius/proxy.conf
home_server nps1 {
type = auth
ipaddr = [ip address ของ nps ตัวที่ 1]
port = 1812
secret = cnoc1234
response_window = 20
zombie_period = 40
status_check = request
username = "user1@cnoc.cmu"
password = "don't need"
check_interval = 30
num_answers_to_alive = 3
}
home_server nps2 {
type = auth
ipaddr = [ip address ของ nps ตัวที่ 2]
port = 1812
secret = qwerty1234
response_window = 20
zombie_period = 40
status_check = request
username = "user1@cnoc.cmu"
password = "don't need"
check_interval = 30
num_answers_to_alive = 3
}
home_server_pool nps {
type = keyed-balance
home_server = nps1
home_server = nps2
}
realm cnoc.cmu {
auth_pool = nps
nostrip
}
7. แก้ไขไฟล์ /etc/freeradius/policy.conf สำหรับการอัพเดท load balance key ให้เป็น MAC Address โดยการเพิ่มบรรทัดดังนี้ก่อนวงเล็บปีกกาปิดท้ายไฟล์
update_load_balance_key {
update control {
Load-Balance-Key := "%{Calling-Station-Id}"
}
}
เนื่องจากการยืนยันตัวแบบ PEAP จะมีการใช้งานในลักษณะ challenge-response ดังภาพ การ load-balance จะต้องแน่ใจว่าอุปกรณ์เครื่องหนึ่ง ๆ จะต้องถูกส่งการร้องขอไปยัง server เครื่องเดียวกันเสมอ ไม่สามารถใช้งานแบบ round robbin ได้
8. แก้ไขไฟล์ /etc/freeradius/site-enables/default ในส่วน authorize เพื่อตรวจสอบ MAC address จากฐานข้อมูลว่ามี MAC address อยู่ในฐานข้อมูลหรือมี MAC address เกินกว่าที่กำหนด(ในที่นี้คือจำกัดที่ 5 อุปกรณ์) และอัพเดท load balance key ในส่วน accounting ให้ยกเลิกบันทึกข้อมูล accounting ลงไฟล์แต่บันทึกลงฐานข้อมูลแทน ในส่วน post-auth ให้ทำการเพิ่ม MAC address ลงฐานข้อมูลเมื่อผ่านการยืนยันตัวตนหรืออัพเดทค่าวันที่ที่เข้าสู่ระบบกรณีเป็น MAC address ที่มีอยู่ในฐานข้อมูลแล้วผ่าน shell script
...
authorize {
...
sql
if("%{realm}" == "cnoc.cmu"){
update_load_balance_key
rewrite.calling_station_id
if("%{sql:SELECT COUNT(*) FROM mac WHERE username = '%{User-Name}' AND macaddress = '%{Calling-Station-Id}'}" > 0 || "%{sql:SELECT COUNT(*) FROM mac WHERE username = '%{User-Name}'}" < 5){
eap {
ok = return
}
}
else{
%{exec:/etc/freeradius/maclog.sh %{User-Name} %{Calling-Station-Id}}
reject
}
}
...
accounting {
…
# detail // comment
…
sql
…
}
……
post-auth {
...
exec
if("%{realm}" == "cnoc.cmu"){
%{exec:/etc/freeradius/add_mac.sh %{User-Name} %{Calling-Station-Id}}
}
...
}
9. ดาวน์โหลด shell script ที่ใช้ในการเพิ่ม MAC address ลงฐานข้อมูลและ log MAC address ลงฐานข้อมูล และแก้ไข username และรหัสผ่านในไฟล์ add_mac.sh ให้ถูกต้อง
cd /etc/freeradius
wget http://myweb.cmu.ac.th/supawit.w/mac_auth_v58/add_mac.sh
wget http://myweb.cmu.ac.th/supawit.w/mac_auth_v58/maclog.sh
chown freerad:freerad add_mac.sh
chown freerad:freerad maclog.sh
chmod 750 add_mac.sh
chmod 750 maclog.sh
10. เพิ่ม client แก้ไฟล์ /etc/freeradius/clients.conf เพื่ออนุญาตให้อุปกรณ์ Access point หรือ Wi-Fi controller ส่งข้อมูลมาขอยืนยันตัวตนได้
client 10.0.x.x { // ip address ของ Access point หรือ Wi-Fi controller
secret = cnoc1234
shortname = AP
}
11. แก้ไขไฟล์ /etc/logrotate.d/freeradius เพื่อ restart freeradius หลังจาก rotate log
จาก
/etc/init.d/freeradius reload > /dev/null
เป็น
service freeradius restart > /dev/null
12. restart service freeradius
service freeradius restart
13. กรณีเกิดปัญหาในการตั้งค่าสามารถดู log ได้ที่ไฟล์ /var/log/freeradius/radius.log หรือ debug อย่างละเอียดด้วยคำสั่ง
freeradius -X
ติดตั้งเว็บไซต์สำหรับจัดการอุปกรณ์
1. บนเครื่อง RADIUS proxy ติดตั้ง package ดังนี้
apt-get install apache2 php5 php5-cli php5-curl php5-mysql php5-ldap zip unzip
2. ดาวน์โหลดและติดตั้งเว็บไซต์สำหรับจัดการอุปกรณ์
cd /var/www/html
wget http://myweb.cmu.ac.th/supawit.w/mac_auth_v58/mac_manage.tar.gz
tar zxvf mac_manage.tar.gz
3. แก้ไขไฟล์ /var/www/html/mac_manage/controls/config.php เพื่อตั้งค่าให้ถูกต้อง
<?php
define('DB_HOST','localhost'); // ip หรือ host name ของเครื่องฐานข้อมูล
define('DB_USER','root'); // username ของฐานข้อมูล
define('DB_PASS',"qwerty"); // รหัสผ่านของฐานข้อมูล
define('DB_NAME','freeradius'); // ชื่อฐานข้อมูล
define('QUOTA',5); // จำนวนอุปกรณ์ต่อบัญชี
define('AD_HOST','dc.cnoc.cmu'); // ip หรือ host name ของ Active Directory
?>
4. ดาวน์โหลด script สำหรับการระบุผู้ผลิตของ Mac Adress
mkdir /root/scripts
cd /root/scripts
wget http://myweb.cmu.ac.th/supawit.w/mac_auth_v58/update_mac_vendor.zip
unzip update_mac_vendor.zip
5. ตั้งค่าการเชื่อมต่อฐานข้อมูลโดยแก้ไขไฟล์ /root/scripts/update_mac_vendor.php
<?php
define('DB_HOST','localhost'); // ip หรือ host name ของเครื่องฐานข้อมูล
define('DB_USER','root'); // username ของฐานข้อมูล
define('DB_PASS',"qwerty"); // รหัสผ่านของฐานข้อมูล
define('DB_NAME','freeradius'); // ชื่อฐานข้อมูล
?>
6. ตั้งค่าให้ script ทำงานทุก 10 นาทีโดยใช้คำสั่ง crontab –e
*/10 * * * * /usr/bin/php /root/scripts/update_mac_vendor.php > /dev/null 2>&1
7. เรียกใช้งานเว็บไซต์ผ่าน http://<radius-proxy-ip-address>/mac_manage จะเข้าสู่หน้าเว็บไซต์ลงทะเบียน MAC address และเข้าสู่ระบบด้วยบัญชีบน Active Directory อุปกรณ์จะเพิ่มอัตโนมัติเมื่อผู้ใช้งานเข้าสู่ระบบสำเร็จ และเมื่อจำนวนอุปกรณ์ครบจะไม่สามารถใช้งาน WiFi ได้อีกต้องทำการลบอุปกรณ์ที่ไม่ใช้งานออกก่อน