Difference between revisions of "Wi-Fi Authentication Service version 2019Jan"

From CMU ITSC Network
 
(7 intermediate revisions by the same user not shown)
Line 30: Line 30:
  
 
=== หลักการทำงาน ===
 
=== หลักการทำงาน ===
# ติดตั้ง Active Directory และ Network Policy and Access Service บน Windows Server
+
1. ติดตั้ง Active Directory และ Network Policy and Access Service บน Windows Server<br>
# deploy freeradius mysql ที่ตั้งค่าการตรวจสอบฐานข้อมูล MAC Address และลงทะเบียน MAC Address ของผู้ใช้ก่อนแบ่งภาระงานไปยืนยันตัวตนที่ NPS ผ่าน protocol radius ผ่าน docker
+
2. deploy freeradius mysql ที่ตั้งค่าการตรวจสอบฐานข้อมูล MAC Address และลงทะเบียน MAC Address ของผู้ใช้ก่อนแบ่งภาระงานไปยืนยันตัวตนที่ NPS ผ่าน protocol radius ผ่าน docker<br>
# ทดลองใช้ Wi-Fi Client เชื่อมต่อ
+
3. ทดลองใช้ Wi-Fi Client เชื่อมต่อ<br>
  
 
=== ติดตั้ง Active Directory และ Network Policy and Access Service ===
 
=== ติดตั้ง Active Directory และ Network Policy and Access Service ===
# Server Manager -> Add roles and features<br>[[File:WifiAuth2019-02-ad-add-role.png|link=]]
+
1. Server Manager -> Add roles and features<br>[[File:WifiAuth2019-02-ad-add-role.png|link=]]<br>
# จากนั้นกด Next 3 ครั้ง เลือก Active Directory Domain Services และ Network Policy and Access Services แล้วกด Next 4 ครั้งแล้วกด Install<br>[[File:WifiAuth2019-03-ad-select-role.png|link=]]
+
2. จากนั้นกด Next 3 ครั้ง เลือก Active Directory Domain Services และ Network Policy and Access Services แล้วกด Next 4 ครั้งแล้วกด Install<br>[[File:WifiAuth2019-03-ad-select-role.png|link=]]<br>
# เมื่อติดตั้งเสร็จให้คลิก Promote this server to a domain controller<br>[[File:WifiAuth2019-04-ad-promote.png|link=]]
+
3. เมื่อติดตั้งเสร็จให้คลิก Promote this server to a domain controller<br>[[File:WifiAuth2019-04-ad-promote.png|link=]]<br>
# เลือก Add a new forest ระบุ domain แล้วกด Next<br>[[File:WifiAuth2019-05-ad-new-forest.png|link=]]
+
4. เลือก Add a new forest ระบุ domain แล้วกด Next<br>[[File:WifiAuth2019-05-ad-new-forest.png|link=]]<br>
# กำหนดรหัสผ่านที่ใช้ใน mode กู้คืนแล้วกด Next ไปเรื่อย ๆ แล้วกด Install และรอระบบ restart<br>[[File:WifiAuth2019-06-ad-restore-password.png|link=]]
+
5. กำหนดรหัสผ่านที่ใช้ใน mode กู้คืนแล้วกด Next ไปเรื่อย ๆ แล้วกด Install และรอระบบ restart<br>[[File:WifiAuth2019-06-ad-restore-password.png|link=]]<br>
  
 
=== สร้าง self-sign Certificate ===
 
=== สร้าง self-sign Certificate ===
# เปิด Powershell แล้วใช้คำสั่ง
+
1. เปิด Powershell แล้วใช้คำสั่ง
 
<syntaxhighlight lang=powershell>
 
<syntaxhighlight lang=powershell>
 
New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname wifi-auth.cnoc.cmu
 
New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname wifi-auth.cnoc.cmu
Line 49: Line 49:
  
 
=== ตั้งค่า Network Policy and Access Service ===
 
=== ตั้งค่า Network Policy and Access Service ===
# เชื่อม NPS เข้ากับ Active Directory ที่ '''Server  Manager เมนู Tools เลือก Network Policy Server''' คลิกขวาที่ NPS(Local) เลือก Register server in Active Directory<br>[[File:Nps12.png|link=]]
+
1. เชื่อม NPS เข้ากับ Active Directory ที่ '''Server  Manager เมนู Tools เลือก Network Policy Server''' คลิกขวาที่ NPS(Local) เลือก Register server in Active Directory<br>[[File:Nps12.png|link=]]<br>
# สร้าง Policy สำหรับการยืนยันตัวตนเลือก RADIUS server for 802.1X Wireless or Wired Connections จากนั้นกด Configure 802.1X<br>[[File:Nps13.png|link=]]<br>Type of 802.1X connections เลือกเป็น Secure Wireless Connections แล้วกด Next<br>[[File:Nps14.png|link=]]
+
2. สร้าง Policy สำหรับการยืนยันตัวตนเลือก RADIUS server for 802.1X Wireless or Wired Connections จากนั้นกด Configure 802.1X<br>[[File:Nps13.png|link=]]<br>Type of 802.1X connections เลือกเป็น Secure Wireless Connections แล้วกด Next<br>[[File:Nps14.png|link=]]<br>
#ที่ Specify RADIUS Switch กด Add จากนั้นระบุค่า RADIUS Client ให้ตรงกับค่า Ip address ของ Radius Server และกำหนดค่า Share Secret  จากนั้นกด OK แล้ว Next<br>[[File:WifiAuth2019-07-nps-rad-client.png|link=]]
+
3. ที่ Specify RADIUS Switch กด Add จากนั้นระบุค่า RADIUS Client ให้ตรงกับค่า Ip address ของ Radius Server และกำหนดค่า Share Secret  จากนั้นกด OK แล้ว Next<br>[[File:WifiAuth2019-07-nps-rad-client.png|link=]]<br>
#เลือก Type เป็น Microsoft: Protected EAP (PEAP) จากนั้นกด Configure<br>[[File:Nps16.png|link=]]<br>เลือก Certificate เป็น wifi-auth.cnoc.cmu แล้วกด OK แล้วกด Next 3 ครั้งแล้วกด Finish<br>[[File:WifiAuth2019-08-nps-certificate.png|link=]]
+
4. เลือก Type เป็น Microsoft: Protected EAP (PEAP) จากนั้นกด Configure<br>[[File:Nps16.png|link=]]<br>เลือก Certificate เป็น wifi-auth.cnoc.cmu แล้วกด OK แล้วกด Next 3 ครั้งแล้วกด Finish<br>[[File:WifiAuth2019-08-nps-certificate.png|link=]]<br>
# สามารถแก้ไขการตั้งค่าต่างๆ ของ Policy ได้ที่ NPS -> Policy ->  ชื่อ จากนั้นให้ดับเบิ้ลคลิกที่ชื่อ Policy<br>[[File:Nps18.png|link=]]<br>การตั้งค่าเงือนไขการเข้าใช้งานโดยยกเลิกประเภทของอุปกรณ์ปลายทางจากที่รับเฉพาะ 802.11 เป็นอุปกรณ์ใดๆ<br>[[File:Nps19.png|link=]]<br>[[File:Nps20.png|link=]]<br>[[File:Nps21.png|link=]]<br>การตั้งค่าให้รองรับการยืนตัวตนแบบไม่เข้ารหัสรหัสผ่านสำหรับใช้งานที่ไม่ใช่การยืนยันตัวตนแบบ PEAP<br>[[File:Nps22.png|link=]]
+
5. สามารถแก้ไขการตั้งค่าต่างๆ ของ Policy ได้ที่ NPS -> Policy ->  ชื่อ จากนั้นให้ดับเบิ้ลคลิกที่ชื่อ Policy<br>[[File:Nps18.png|link=]]<br>การตั้งค่าเงือนไขการเข้าใช้งานโดยยกเลิกประเภทของอุปกรณ์ปลายทางจากที่รับเฉพาะ 802.11 เป็นอุปกรณ์ใดๆ<br>[[File:Nps19.png|link=]]<br>[[File:Nps20.png|link=]]<br>[[File:Nps21.png|link=]]<br>การตั้งค่าให้รองรับการยืนตัวตนแบบไม่เข้ารหัสรหัสผ่านสำหรับใช้งานที่ไม่ใช่การยืนยันตัวตนแบบ PEAP<br>[[File:Nps22.png|link=]]<br>
  
 
=== เพิ่มบัญชีผู้ใช้ ===
 
=== เพิ่มบัญชีผู้ใช้ ===
# เปิด Server Manager -> Tools -> Active Directory Users and Computers
+
1. เปิด Server Manager -> Tools -> Active Directory Users and Computers<br>
# คลิกขวาที่ cnoc.cmu เลือก New -> Organizational Unit แล้วตั้งชื่อ OU เป็น CMU Users
+
2. คลิกขวาที่ cnoc.cmu เลือก New -> Organizational Unit แล้วตั้งชื่อ OU เป็น CMU Users<br>
# คลิกขวาที่ CMU Users เลือก New -> User แล้วระบุรายละเอียด User ตามขั้นตอน<br>[[File:WifiAuth2019-09-ad-add-user.png|link=]]
+
3. คลิกขวาที่ CMU Users เลือก New -> User แล้วระบุรายละเอียด User ตามขั้นตอน<br>[[File:WifiAuth2019-09-ad-add-user.png|link=]]<br>
  
  
 
=== Deploy freeradius ===
 
=== Deploy freeradius ===
# ที่ Linux Server ทำการ clone script การ deploy
+
1. ที่ Linux Server ทำการ clone script การ deploy
 
<syntaxhighlight lang=bash>
 
<syntaxhighlight lang=bash>
git clone https://github.com/supawit/wifi-authen.git
+
git clone https://gitlab.com/supawit/wifi-authen.git
 +
cd wifi-authen
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
2. แก้ไขไฟล์ config.env โดยระบุค่าต่าง ๆ ตามต้องการให้สอดคล้องกับระบบ
 +
<syntaxhighlight lang=bash>
 +
TZ=Asia/Bangkok
 +
MYSQL_HOST=mysql
 +
MYSQL_USER=radius
 +
MYSQL_ROOT_PASSWORD=qwerty1234
 +
MYSQL_PASSWORD=qwerty1234
 +
MYSQL_DATABASE=radius
 +
DOMAIN=cnoc.cmu
 +
AD_HOST=10.110.0.107
 +
MAX_DEVICE=5
 +
</syntaxhighlight>
 +
3. แก้ไขไฟล์ freeradius.conf/proxy.conf โดยระบุ ip address ของ NPS Server และ domain ให้ถูกต้อง
 +
<syntaxhighlight lang=text>
 +
home_server nps1 {
 +
        type = auth
 +
        ipaddr = 10.110.0.207
 +
        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_pool nps {
 +
        type = keyed-balance
 +
        home_server = nps1
 +
}
 +
 +
realm cnoc.cmu {
 +
        auth_pool = nps
 +
        nostrip
 +
}
 +
</syntaxhighlight>
 +
4. deploy freeradius mysql stack
 +
<syntaxhighlight lang=bash>
 +
docker-compose up -d
 +
</syntaxhighlight>
 +
5. ตรวจสอบว่า container run ปกติหรือไม่
 +
<syntaxhighlight lang=bash>
 +
docker ps
 +
</syntaxhighlight>
 +
 +
=== ทดสอบการใช้งาน ===
 +
1. ติดตั้ง lib ที่จำเป็น
 +
<syntaxhighlight lang=bash>
 +
sudo apt-get install -y libpcsclite1
 +
</syntaxhighlight>
 +
2. เพิ่ม client
 +
<syntaxhighlight lang=bash>
 +
docker exec -it mysql sh -c "echo \"INSERT INTO nas SET nasname='0.0.0.0/0', shortname='all-client', secret='veryStrongSecret'\" | mysql -uradius -p radius"
 +
</syntaxhighlight>
 +
* หลังจากเพิ่ม client แล้วต้อง restart freeradius ทุกครั้ง
 +
<syntaxhighlight lang=bash>
 +
docker restart freeradius
 +
</syntaxhighlight>
 +
3. ทดลอง log in ด้วยเครื่องมือจำลองการ Log in WiFi แบบ WPA-Enterprise โดยระบบ IP Address ของ freeradius server, Secret key และบัญชีที่สร้างบน Active Directory ให้ถูกต้อง
 +
<syntaxhighlight lang=bash>
 +
cd tool
 +
./rad_eap_test -H 10.110.0.168 -P 1812 -S 'veryStrongSecret' -u user1@cnoc.cmu -p P@ssw0rd@1 -m IEEE8021X -e PEAP -2 MSCHAPV2 -M 00:00:00:00:00:03
 +
</syntaxhighlight>
 +
4. เข้าใช้งานเว็บไซต์สำหรับจัดการ mac address ที่ '''http://freerarius-ip-address/device''' เข้าสู่ระบบด้วยบัญชีที่สร้างบน Active Directory <br>
 +
[[File:WifiAuth2019-10-web-device.png|link=]]
 +
 +
== ข้อเสนอแนะ ==
 +
ในเอกสารฉบับนี้ได้แสดงถึงแนวทางการ implement ระบบยืนยันตัวตนแบบรวมศูนย์โดยใช้บัญชีของ Active Directory ซึ่งคิดว่าเป็นที่นิยมขององค์กรต่างๆ แต่ขอละการ implement Active Directory ไว้ กล่าวถึงเฉพาะส่วนของ freeradius ซึ่งก็ยังเป็นแนวทางคร่าวๆ กรณี implement จริงจะต้องมีหลายส่วนที่ต้องทำเช่น<br>
 +
1. การตั้งค่า firewall เพื่อให้ freeradius ติดต่อกับ Active Directory ได้หรือ client ติดต่อกับ freeradius ได้<br>
 +
2. การตั้งค่า web server ของเว็บไซต์ลงทะเบียน MAC address ควรใช้ SSL(https) เนื่องจากต้องเข้าสู่ระบบด้วยบัญชีที่เป็นบัญชีแบบรวมศูนย์ต้องเข้ารหัส รวมถึงชื่อโดเมนควรตั้งให้สะดวกแก่การใช้งาน<br>
 +
3. สามารถนำเครื่อง RADIUS และ RADIUS Proxy มารวมกันได้ หรือเพิ่มจำนวนเครื่อง RADIUS ตามต้องการได้ หรือใช้วิธีการอื่นในการทำ Load-Balance ได้<br>
 +
4. เว็บไซต์ลงทะเบียนควรมีคู่มือการเชื่อมต่อสำหรับ platform ต่างๆให้ผู้ใช้เนื่องจากการเชื่อมต่อ Wi-Fi แบบ WPA มีขั้นตอนที่ยุ่งยากกว่าแบบ Web-based Authentication เว็บลงทะเบียนในเอกสารนี่เป็นตัวอย่าง สามารถนำไปแก้ไขดัดแปลงให้เข้ากับแต่ละองค์กรได้เช่นเว็บลงทะเบียนของมหาวิทยาลัยเชียงใหม่ [https://jumbo.cmu.ac.th https://jumbo.cmu.ac.th]<br>
 +
5. การเก็บ log ต้องทำให้ครบถ้วนตามกฎหมาย ต้องเก็บส่วนอื่นๆ เพิ่มเช่น dhcp log<br>
 +
6. การจำกัดการใช้งานต้องทำร่วมกับอุปกรณ์อื่นที่รองรับโดยสามารถใช้ข้อมูลจากฐานข้อมูล freeradius ตาราง radacct ได้<br>
 +
7. กรณีระบบใหญ่ๆ ที่มีผู้ใช้งานมากจะเกิดภาระงานที่ server ที่ใช้เชื่อมต่อกับฐานข้อมูลค่อนข้างมากต้องมีการแยก server เป็นหลายๆ ตัว เช่น<br>
 +
[[File:Loadbalance01.PNG|link=]]<br>
 +
8. กรณีที่มีผู้ใช้งานเยอะมาก ๆ ในเวลาพร้อม ๆ กันอาจจำเป็นต้องมีอุปกรณ์กระจายภาระงานที่รองรับการทำงานในการแกะ header ของ radius เพื่อกระจายภาระได้ถูกต้องตามเงื่อนไขของ PEAP เช่น F5<br>
 +
[[File:Loadbalance02.PNG|link=]]<br>
 +
9. การปรับแต่งฐานข้อมูลเป็นเรื่องสำคัญในกรณีที่มีผู้ใช้งานจำนวนมากเนื่องจากจะมีการ Insert หรือ Update ระเบียนในตารางอยู่ตลอดเวลาอาจจะใช้เครื่องมือเช่น mysqltuner ในการช่วยปรับแต่งฐานข้อมูลให้เหมาะสม<br>
 +
[[File:Mysqltunner01.png|link=]]<br>
 +
 +
== สอบถามเพิ่มเติม ==
 +
ศุภวิทย์ วรรณภิละ<br>
 +
supawit.w@cmu.ac.th<br>
 +
 +
== link ที่เกี่ยวข้อง ==
 +
[[Wi-Fi_Authentication_service | Version เก่า]]

Latest revision as of 04:33, 24 January 2019

ระบบการยืนยันตัวตนเข้าใช้งานเครือข่ายไร้สายแบบปลอดภัย(WPA/WPA2 Enterprise) ด้วยบัญชีผู้ใช้แบบรวมศูนย์บน Microsoft Windows Server Active Directory พร้อมทั้งการลงทะเบียนหมายเลข MAC Address แบบอัตโนมัติ: กรณีศึกษามหาวิทยาลัยเชียงใหม่ เวอร์ชันปรับปรุง 2562

ความเป็นมา

มหาวิทยาลัยเชียงใหม่ได้ทำการให้บริการเครือข่ายไร้สายในชื่อ Jumbo-Net โดยแต่เดิมให้บริการชื่อจุดเชื่อมต่อ 3 จุดคือ Jumbo-Net, Jumbo-Secure และ Jumbo-Register ซึ่ง Jumbo-Register ใช้ในการลงทะเบียนอุปกรณ์เพื่อใช้งาน Jumbo-Secure ซึ่งใช้ระบบรักษาความปลอดภัยแบบ WPA/WPA2 Enterprise เพื่อสร้าง key และลงทะเบียน MAC Address ส่วน Jumbo-Net เป็นแบบเปิดและเข้าใช้งานด้วยการยืนยันตัวตนผ่านหน้าเว็บ(Web-based Authentication) ซึ่งไม่ค่อยมีความปลอดภัย
Intro01.PNG

ปัญหาและแนวทางแก้ไข

เนื่องจากมหาวิทยาลัยเป็นสถานที่เปิดมีบุคคลทั่วไปเข้าออกเป็นจำนวนมากและในยุคที่ทุกคนต้องการการเชื่อมต่ออินเทอร์เน็ตตลอดเวลาผ่านโทรศัพท์มือถือและอุปกรณ์ต่างๆ การใช้งานแบบ web-based authentication จึงไม่เหมาะสม และเกิดปัญหาคือ

  1. อุปกรณ์จำนวนมากรวมถึงบุคคลภายนอกที่เข้ามาภายในมหาวิทยาลัย ได้ทำการ associate เข้ากับ SSID แต่ไม่ได้ทำการยืนยันตัวตน ทำให้อุปกรณ์เครือข่ายไร้สายต้องรับภาระงานเพิ่มขึ้นกระทบผู้ใช้ภายใน รวมถึงมีความเสียงด้านความปลอดภัยเนื่องจากไม่ได้เข้ารหัสสัญญาณ
  2. อุปกรณ์ที่ต้องการเชื่อมต่ออินเทอร์เน็ตประเภทโทรศัพท์มือถือหรือแท็บเล็ตไม่สะดวกต่อการเชื่อมต่อแบบ 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 จะเห็นว่าภาระงานของหน่วยประมวลผลอุปกรณ์ควบคุมการทำงานเครือข่ายไร้สายลดลง
Problem01.png
Problem02.png
Problem03.png
แต่การปิดระบบ 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 ให้ผู้ใช้โดยอัตโนมัติ และผู้ใช้สามารถเข้าสู่ระบบเพื่อลบอุปกรณ์เดิมออกเมื่อจำนวนอุปกรณ์ครบกำหนดและต้องการใช้อุปกรณ์ใหม่

ปรับปรุง 2562

ทำการ update version ของ freeradius และ deploy application ผ่านเทคโนโลยี docker เพื่อให้ง่ายต่อการนำไปใช้งาน

บัญชีผู้ใช้ไอทีมหาวิทยาลัยเชียงใหม่(CMU IT Account)

มหาวิทยาลัยเชียงใหม่ได้ใช้ Microsoft Windows Active Directory ในการจัดเก็บบัญชีผู้ใช้ซึ่งเป็นบัญชีเดียวกันกับอีเมลของบุคลากรและนักศึกษา การยืนยันตัวตนบนระบบเครือข่ายไร้สายก็ใช้บัญชี CMU IT Account โดย CMU IT Account จะมีเว็บไซต์ https://account.cmu.ac.th เป็นทั้ง Front-End สำหรับผู้ใช้ในการสร้างและจัดการบัญชี และ Back-End สำหรับผู้ดูแลระบบในการจัดการบัญชี บัญชีที่ถูกสร้างขึ้นจะได้รับกล่องข้อความอีเมลโดยอัตโนมัติ
ItAccount01.PNG

Workshop

การเชื่อมต่อ

WifiAuth2019-01-topology.png

หลักการทำงาน

1. ติดตั้ง Active Directory และ Network Policy and Access Service บน Windows Server
2. deploy freeradius mysql ที่ตั้งค่าการตรวจสอบฐานข้อมูล MAC Address และลงทะเบียน MAC Address ของผู้ใช้ก่อนแบ่งภาระงานไปยืนยันตัวตนที่ NPS ผ่าน protocol radius ผ่าน docker
3. ทดลองใช้ Wi-Fi Client เชื่อมต่อ

ติดตั้ง Active Directory และ Network Policy and Access Service

1. Server Manager -> Add roles and features
WifiAuth2019-02-ad-add-role.png
2. จากนั้นกด Next 3 ครั้ง เลือก Active Directory Domain Services และ Network Policy and Access Services แล้วกด Next 4 ครั้งแล้วกด Install
WifiAuth2019-03-ad-select-role.png
3. เมื่อติดตั้งเสร็จให้คลิก Promote this server to a domain controller
WifiAuth2019-04-ad-promote.png
4. เลือก Add a new forest ระบุ domain แล้วกด Next
WifiAuth2019-05-ad-new-forest.png
5. กำหนดรหัสผ่านที่ใช้ใน mode กู้คืนแล้วกด Next ไปเรื่อย ๆ แล้วกด Install และรอระบบ restart
WifiAuth2019-06-ad-restore-password.png

สร้าง self-sign Certificate

1. เปิด Powershell แล้วใช้คำสั่ง

New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname wifi-auth.cnoc.cmu

ตั้งค่า Network Policy and Access Service

1. เชื่อม NPS เข้ากับ Active Directory ที่ Server Manager เมนู Tools เลือก Network Policy Server คลิกขวาที่ NPS(Local) เลือก Register server in Active Directory
Nps12.png
2. สร้าง Policy สำหรับการยืนยันตัวตนเลือก RADIUS server for 802.1X Wireless or Wired Connections จากนั้นกด Configure 802.1X
Nps13.png
Type of 802.1X connections เลือกเป็น Secure Wireless Connections แล้วกด Next
Nps14.png
3. ที่ Specify RADIUS Switch กด Add จากนั้นระบุค่า RADIUS Client ให้ตรงกับค่า Ip address ของ Radius Server และกำหนดค่า Share Secret จากนั้นกด OK แล้ว Next
WifiAuth2019-07-nps-rad-client.png
4. เลือก Type เป็น Microsoft: Protected EAP (PEAP) จากนั้นกด Configure
Nps16.png
เลือก Certificate เป็น wifi-auth.cnoc.cmu แล้วกด OK แล้วกด Next 3 ครั้งแล้วกด Finish
WifiAuth2019-08-nps-certificate.png
5. สามารถแก้ไขการตั้งค่าต่างๆ ของ Policy ได้ที่ NPS -> Policy -> ชื่อ จากนั้นให้ดับเบิ้ลคลิกที่ชื่อ Policy
Nps18.png
การตั้งค่าเงือนไขการเข้าใช้งานโดยยกเลิกประเภทของอุปกรณ์ปลายทางจากที่รับเฉพาะ 802.11 เป็นอุปกรณ์ใดๆ
Nps19.png
Nps20.png
Nps21.png
การตั้งค่าให้รองรับการยืนตัวตนแบบไม่เข้ารหัสรหัสผ่านสำหรับใช้งานที่ไม่ใช่การยืนยันตัวตนแบบ PEAP
Nps22.png

เพิ่มบัญชีผู้ใช้

1. เปิด Server Manager -> Tools -> Active Directory Users and Computers
2. คลิกขวาที่ cnoc.cmu เลือก New -> Organizational Unit แล้วตั้งชื่อ OU เป็น CMU Users
3. คลิกขวาที่ CMU Users เลือก New -> User แล้วระบุรายละเอียด User ตามขั้นตอน
WifiAuth2019-09-ad-add-user.png


Deploy freeradius

1. ที่ Linux Server ทำการ clone script การ deploy

git clone https://gitlab.com/supawit/wifi-authen.git
cd wifi-authen

2. แก้ไขไฟล์ config.env โดยระบุค่าต่าง ๆ ตามต้องการให้สอดคล้องกับระบบ

TZ=Asia/Bangkok
MYSQL_HOST=mysql
MYSQL_USER=radius
MYSQL_ROOT_PASSWORD=qwerty1234
MYSQL_PASSWORD=qwerty1234
MYSQL_DATABASE=radius
DOMAIN=cnoc.cmu
AD_HOST=10.110.0.107
MAX_DEVICE=5

3. แก้ไขไฟล์ freeradius.conf/proxy.conf โดยระบุ ip address ของ NPS Server และ domain ให้ถูกต้อง

home_server nps1 {
        type = auth
        ipaddr = 10.110.0.207
        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_pool nps {
        type = keyed-balance
        home_server = nps1
}

realm cnoc.cmu {
        auth_pool = nps
        nostrip
}

4. deploy freeradius mysql stack

docker-compose up -d

5. ตรวจสอบว่า container run ปกติหรือไม่

docker ps

ทดสอบการใช้งาน

1. ติดตั้ง lib ที่จำเป็น

sudo apt-get install -y libpcsclite1

2. เพิ่ม client

docker exec -it mysql sh -c "echo \"INSERT INTO nas SET nasname='0.0.0.0/0', shortname='all-client', secret='veryStrongSecret'\" | mysql -uradius -p radius"
  • หลังจากเพิ่ม client แล้วต้อง restart freeradius ทุกครั้ง
docker restart freeradius

3. ทดลอง log in ด้วยเครื่องมือจำลองการ Log in WiFi แบบ WPA-Enterprise โดยระบบ IP Address ของ freeradius server, Secret key และบัญชีที่สร้างบน Active Directory ให้ถูกต้อง

cd tool
./rad_eap_test -H 10.110.0.168 -P 1812 -S 'veryStrongSecret' -u user1@cnoc.cmu -p P@ssw0rd@1 -m IEEE8021X -e PEAP -2 MSCHAPV2 -M 00:00:00:00:00:03

4. เข้าใช้งานเว็บไซต์สำหรับจัดการ mac address ที่ http://freerarius-ip-address/device เข้าสู่ระบบด้วยบัญชีที่สร้างบน Active Directory
WifiAuth2019-10-web-device.png

ข้อเสนอแนะ

ในเอกสารฉบับนี้ได้แสดงถึงแนวทางการ implement ระบบยืนยันตัวตนแบบรวมศูนย์โดยใช้บัญชีของ Active Directory ซึ่งคิดว่าเป็นที่นิยมขององค์กรต่างๆ แต่ขอละการ implement Active Directory ไว้ กล่าวถึงเฉพาะส่วนของ freeradius ซึ่งก็ยังเป็นแนวทางคร่าวๆ กรณี implement จริงจะต้องมีหลายส่วนที่ต้องทำเช่น
1. การตั้งค่า firewall เพื่อให้ freeradius ติดต่อกับ Active Directory ได้หรือ client ติดต่อกับ freeradius ได้
2. การตั้งค่า web server ของเว็บไซต์ลงทะเบียน MAC address ควรใช้ SSL(https) เนื่องจากต้องเข้าสู่ระบบด้วยบัญชีที่เป็นบัญชีแบบรวมศูนย์ต้องเข้ารหัส รวมถึงชื่อโดเมนควรตั้งให้สะดวกแก่การใช้งาน
3. สามารถนำเครื่อง RADIUS และ RADIUS Proxy มารวมกันได้ หรือเพิ่มจำนวนเครื่อง RADIUS ตามต้องการได้ หรือใช้วิธีการอื่นในการทำ Load-Balance ได้
4. เว็บไซต์ลงทะเบียนควรมีคู่มือการเชื่อมต่อสำหรับ platform ต่างๆให้ผู้ใช้เนื่องจากการเชื่อมต่อ Wi-Fi แบบ WPA มีขั้นตอนที่ยุ่งยากกว่าแบบ Web-based Authentication เว็บลงทะเบียนในเอกสารนี่เป็นตัวอย่าง สามารถนำไปแก้ไขดัดแปลงให้เข้ากับแต่ละองค์กรได้เช่นเว็บลงทะเบียนของมหาวิทยาลัยเชียงใหม่ https://jumbo.cmu.ac.th
5. การเก็บ log ต้องทำให้ครบถ้วนตามกฎหมาย ต้องเก็บส่วนอื่นๆ เพิ่มเช่น dhcp log
6. การจำกัดการใช้งานต้องทำร่วมกับอุปกรณ์อื่นที่รองรับโดยสามารถใช้ข้อมูลจากฐานข้อมูล freeradius ตาราง radacct ได้
7. กรณีระบบใหญ่ๆ ที่มีผู้ใช้งานมากจะเกิดภาระงานที่ server ที่ใช้เชื่อมต่อกับฐานข้อมูลค่อนข้างมากต้องมีการแยก server เป็นหลายๆ ตัว เช่น
Loadbalance01.PNG
8. กรณีที่มีผู้ใช้งานเยอะมาก ๆ ในเวลาพร้อม ๆ กันอาจจำเป็นต้องมีอุปกรณ์กระจายภาระงานที่รองรับการทำงานในการแกะ header ของ radius เพื่อกระจายภาระได้ถูกต้องตามเงื่อนไขของ PEAP เช่น F5
Loadbalance02.PNG
9. การปรับแต่งฐานข้อมูลเป็นเรื่องสำคัญในกรณีที่มีผู้ใช้งานจำนวนมากเนื่องจากจะมีการ Insert หรือ Update ระเบียนในตารางอยู่ตลอดเวลาอาจจะใช้เครื่องมือเช่น mysqltuner ในการช่วยปรับแต่งฐานข้อมูลให้เหมาะสม
Mysqltunner01.png

สอบถามเพิ่มเติม

ศุภวิทย์ วรรณภิละ
supawit.w@cmu.ac.th

link ที่เกี่ยวข้อง

Version เก่า