ในโลกของ Network และ Security RADIUS (Remote Authentication Dial-In User Service) คือ Server ตัวสำคัญที่ช่วยให้การจัดการการเข้าถึงเครือข่ายเป็นเรื่องง่ายและปลอดภัย ด้วยฟังก์ชัน Authentication, Authorization, และ Accounting (AAA) ทำให้ RADIUS server เป็นหัวใจสำคัญในการควบคุมว่าใครเข้าได้ ทำอะไรได้บ้าง และเก็บ Logs ว่าใครทำอะไรไปบ้าง เมื่อเกิดปัญหาแล้ว จะได้จัดการได้อย่างถูกต้อง
โดยบทความนี้ จะเป็นการนำเสนอ วิธีการตั้งค่า FreeRADIUS โดยใช้ OS คือ Debian12 (อาจจะใช้ linux ตัวอื่นก็ได้นะครับ ถ้าเพื่อนๆถนัด) เนื่องจาก FreeRADIUS เป็น open-sources ใช้งานได้ฟรี รวมถึงตั้งค่าให้ใช้งานร่วมกันกับ MariaDB เพื่อความง่ายในการ Query ข้อมูล นำไปใช้ต่อ เช่น เขียน web management เพื่อให้ user สามารถตั้งค่าได้ง่ายขึ้น ทำ report สรุปผล จาก table ของ mariadb ที่สรุปให้เรียบร้อย เป็นต้นครับ
Prerequisite
1.) Debian 12.10 (Bookworm)
2.) อุปกรณ์ที่จะนำ FreeRADIUS ไปผูก
3.) การติดตั้ง Dependencies ต่างๆ เพื่อใช้งาน FreeRADIUS (จะมีบอกใน Step การตั้งค่าครับ)
โดย Step จะมีดังนี้ครับ
1.) อัพเดท dependencies จาก repository ให้เป็น version ล่าสุด
2.) ใช้ไฟล์ user เป็น DB เพื่อ Authen (สามารถทำได้ แต่ไม่แนะนำ)
3.) ใช้ MariaDB เป็น Database แทน ไฟล์ user
4.) เชื่อมต่อ FreeRADIUS เข้ากับ MariaDB
5.) ทดสอบว่า FreeRADIUS ทำงานปกติไหม
6.) ตั้งค่า NAS Client
1.) อัพเดท dependencies จาก repository ให้เป็น version ล่าสุด ด้วยคำสั่ง
apt update -y && apt upgrade -y
แต่อาจจะมี Erorr ดังรูป เนื่องจาก repository ที่จะไปอัพเดท จะไปเอามาจาก CD-ROM

เราเลยจะเปลี่ยนจาก ให้ get repository จาก CD-ROM เป็น Website ของ debian โดยตรง
1.1) ใช้คำสั่ง nano /etc/apt/sources.list และ comment บรรทัดแรกทิ้ง จากนั้นเพิ่ม เพื่อให้ debian ไป apt จาก repositories จาก debian โดยตรง จากนั้น Ctrl+o –> Enter –> Ctrl+x
deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
deb http://deb.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware

จากนั้น รันคำสั่ง apt update -y && apt upgrade -y อีกรอบ
1.2 ติดตั้ง vim เป็น Text Editor เพื่อง่ายต่อการ config + ติดตั้ง FreeRADIUS
apt install vim -y
apt install freeradius -y
1.3 เช็คว่า FreeRADIUS ติดตั้งเรียบร้อยแล้ว โดยใช้คำสั่ง ก็จะเห็นว่า FreeRADIUS ถูกติดตั้งเรียบร้อยแล้ว
apt list freeradius

2. ใช้ไฟล์ user เป็น DB เพื่อ Authen (สามารถทำได้ แต่ไม่แนะนำ)
2.1 สร้าง user ที่จะใช้ authen โดยใช้คำสั่ง
vim etc/freeradius/3.0/users
เพื่อเข้าไปแก้ไขไฟล์ user จากนั้น Copy format จากตัวอย่างที่มีได้เลย โดย testtest คือ username, Cleartext-Password คือ password และ reply-Message คือ ข้อความที่จะตอบกลับมาหาเรา จากนั้น save

2.2) สั่ง systemctl restart freeradius เพื่อ restart services ของ freeradius ให้อ่านไฟล์ users อีกรอบ
2.3) ทำการเทสว่า user สามารถ authen ได้ปกติไหม โดยใช้คำสั่ง radtest testtest P@ssw0rd localhost 0 testing123 ซึ่ง format เป็นดังนี้ radtest <username> <password> <server> <port> <secret> [options]

ซึ่งจะเห็นว่า Received Access-Accept แปลว่า สามารถใช้งาน user นี้ เพื่อ Authen ได้แล้ว
*** แต่วิธีนี้ ไม่แนะนำเป็นอย่างยิ่ง เนื่องจาก เราต้องทำการ restart freeradius service ทุกครั้ง ที่มีการ add users เข้าไปใหม่ ซึ่งจะกระทบกับ user ที่ใช้งานอยู่ด้วย ***
โดยเราจะเปลี่ยนจากไฟล์ user ที่เป็น text-based DB เป็น MariaDB เพื่อเก็บ username password ที่ใช้ในการ Authen รวมถึง log ต่างๆด้วย (Accounting)
3. ใช้ MariaDB เป็น Database แทน ไฟล์ user
3.1 ติดตั้ง mariaDB package โดยใช้คำสั่ง
apt install mariadb-server -y
sudo apt install freeradius-mysql -y
3.2 เช็คสถานะ mariaDB ว่าทำงานปกติไหม โดยใช้คำสั่ง systemctl status mariadb ซึ่งจะเห็นว่า สถานะเป็น Active พร้อมทำงาน

3.2 เข้าใช้งาน MariaDB โดยพิมพ์คำสั่ง mysql -u root -p เมื่อมีให้ใส่ password สามารถกด enter เพื่อข้ามได้เลย เนื่องจาก default credential จะไม่มี password ครับ

3.3 สร้าง database ชื่อ radius (อาจจะตั้งชื่ออื่นก็ได้นะครับ) โดยใช้คำสั่ง create database radius character set utf8; เพื่อรองรับภาษาไทย (เผื่อพัฒนาเขียน PHP เพื่อดึงข้อมูลจาก DB) จากนั้นเช็คว่า มีการสร้าง database ที่ชื่อ radius แล้วหรือยัง โดยใช้คำสั่ง show databases; ก็จะเห็นว่า มี database ชื่อ radius มาแล้ว

3.4 Import Table schema โดยเราไม่ต้องไปสร้างเอง ตัว freeradius มีให้อยู่แล้ว สามารถนำไปใช้ได้เลย โดยใช้คำสั่ง mysql -u root -p radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql จากนั้นลองเช็คว่า Table ได้ถูก import มาจริงไหม โดยเข้าไปที่ radius database แล้ว show tables; ก็จะเห็นว่า มี table เรียบร้อย

3.5 แก้ไขไฟล์ setup.sql ให้มี user/password ที่จะเข้า database ที่ชื่อ radius เป็นชื่ออื่น โดย default จะเป็น radius/radpass และสามารถเข้าใช้งาน database ได้จาก localhost นี้เท่านั้น (ip นี้เท่านั้น) โดยให้ใช้คำสั่ง
vim /etc/freeradius/3.0/mods-config/sql/main/mysql/setup.sql
จากนั้นให้ comment บรรทัดที่เป็นของเดิม แล้วสร้าง username/password ใหม่ พร้อมกำหนด permission ดังรูป


3.6 Import ไฟล์ setup.sql มาไว้ที่ radius database โดยใช้คำสั่ง mysql -u root -p radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/setup.sql

3.7 เช็คว่า มี user cisco ที่เราได้สร้างไว้ไหม โดยเข้าไปที่ database radius แล้วใช้คำสั่ง SELECT User, Host FROM mysql.user; ก็จะเห็นว่า มี user cisco สร้างไว้อยู่แล้ว (user radius เป็น default ตอนสร้าง database สร้างมาไว้อยู่แล้ว สามารถลบได้เลยนะครับ ถ้าไม่ได้ใช้)

3.8 Import ไฟล์ process-radacct.sql (เป็น table ไว้ดู summary bandwidth และเวลา login/logout ของ users) โดยใช้คำสั่ง mysql -u root -p radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/process-radacct.sql จากนั้นเช็คความถูกต้องโดยเข้าไปที่ database radius แล้ว show tables; ก็จะเห็น tables ที่ชื่อ data_usage_by_period

4. เชื่อมต่อ FreeRADIUS เข้ากับ MariaDB
เนื่องจากโดยค่า default freeradius จะดึง user มาจาก ไฟล์ที่ชื่อว่า user เพื่อใช้ในการทำงาน เราต้องย้ายให้ Freeradius ชี้ไปที่ mariadb ที่เราทำไว้
4.1 ) เข้าไปแก้ไขไฟล์ ให้ชี้ db ไปที่ mariadb โดยใช้คำสั่ง
vim /etc/freeradius/3.0/mods-available/sql
4.1.1) แก้ไขบรรทัดที่ 40 เป็น dialect = mysql เพื่อใช้งาน mysql

4.1.2) ลบ comment บรรทัดที่ 61 ออก แล้วไป comment บรรทัดที่ 60 แทน ชี้ไปที่ mysql ข้อ 4.1.1

4.1.3) ปิด TLS Certificate Check เนื่องจากเรายังไม่มี Cert (หากเพื่อนๆมี cert แล้ว ก็สามารถเปิดใช้งานได้ครับ) หากเพื่อนๆใช้ db ตัวอื่นๆ ก็ไปปิด TLS ตรง db ที่ต้องการได้นะครับ ของผมใช้ mariadb

4.1.4) แก้ไข connection info เชื่อมต่อ db กับ freeradius โดยเปลี่ยน username/password เป็น username/password ที่สร้างไว้ตอนข้อ 2 เพื่อใช้แทน default ครับ (แต่หากเพื่อนๆไม่ได้แก้ไข ก็สามารถใช้ default password เดิมได้ครับ)

4.1.5) หากเพื่อนๆ ไม่ได้ใช้ชื่อ db ว่า radius ก็ให้เพื่อนๆ มาแก้ไขชื่อให้ตรงกันกับของเพื่อนๆนะครับ (แต่แนะนำว่า ตอนสร้างให้เป็นชื่อ radius ดีกว่าครับ จะได้ไม่ต้องแก้ไขอะไรเยอะ)

4.2) สร้าง softlink driver (shortcut) จาก mods-avaliable –> mods-enabled เพื่อใช้งานไฟล์ sql
ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/
เช็คดูว่าไฟล์มาแล้วยัง โดยเข้าไปที่ mods-enabled แล้ว ls -l ก็จะเห็นว่ามีไฟล์ sql มาอยู่ใน mods-enabled แล้ว

* เนื่องจากผมได้ทำการเปลี่ยน owner เป็น root ตั้งแต่แรกใน folder freeradius ทำให้ owner ที่เห็นในไฟล์อื่นๆ จะเป็น root ส่วนของเพื่อนๆ จะขึ้นเป็น freerad นะครับ แต่ไฟล์ที่เราทำ softlink มา มันจะมี owner เป็น root ครับ เนื่องจากเราใช้สิทธิ์ root ในการ execute command แล้วเวลา start service มันจะไม่ผ่านครับ ต้องแก้ owner ไปเป็น freerad ก่อนนะครับ โดยใช้คำสั่ง
chown -R freerad:freerad sql
chmod 755 sql (คำสั่งนี้ทำไว้เผื่อๆครับ)
4.3) ทดสอบ config ของ freeradius ว่าเราเชื่อมต่อ DB กับ freeradius ถูกต้องแล้วหรือยัง โดยใช้คำสั่ง
/usr/sbin/freeradius -XC
ก็จะเห็นข้อความขึ้นมาว่า Configuration appears to be OK แสดงว่า เรา config ไว้ถูกต้องแล้ว

5.) ทดสอบว่า freeradius ทำงานปกติไหม
5.1) โดยเข้าไปที่ database radius จากนั้นพิมพ์คำสั่ง INSERT INTO radcheck (username, attribute, op, value)VALUES (‘napat’, ‘Cleartext-Password’, ‘:=’, ‘P@ssw0rd123’); โดยสามารถเปลี่ยน username และ password ได้ ในช่องของ username, value ส่วนค่าอื่นๆ ให้คงไว้ตาม format จากนั้น ให้เช็คว่า user ที่เราสร้างมา ได้ถูก add ใน database radius เรียบร้อยแล้ว โดยใช้คำสั่ง SELECT id, username, attribute, op, value FROM radcheck; ก็จะเห็นว่า มี user ที่เราได้สร้างไว้ เรียบร้อยแล้ว
* ในการสร้าง username และ password ในท่าปกติ จะสร้างใน table radcheck ของ database radius นะครับ

5.2) ทดลอง Debug โดยให้ทำการ stop services ของ freeradius เสียก่อน ก่อนจะทำการ debug โดยพิมพ์คำสั่ง systemctl stop freeradius จากนั้นให้เช็คสถานะ ว่า freeradius กลายเป็น inactive แล้วหรือยัง โดยพิมพ์คำสั่ง systemctl status freeradius ก็จะเห็นว่า status กลายเป็น inactive เรียบร้อยแล้ว

พิมพ์คำสั่ง /usr/sbin/freeradius -X เพื่อเปิด debug mode ของ freeradius จากนั้นเปิดอีก 1 terminal แล้ว ssh เข้าไปที่ debain จากนั้นพิมพ์คำสั่ง radtest napat P@ssw0rd123 localhost 0 testing123 เพื่อเทสว่า user สามารถ login ได้สำเร็จไหม ซึ่งถ้าถูกต้อง จะขึ้นสถานะ Received Access-Accept ดังรูป

6.) ตั้งค่า NAS Client
6.1) แก้ไขไฟล์ client.conf เพื่อ allow ให้ NAS Client ผูกกับ freeradius ได้ โดยพิมพ์คำสั่ง vim /etc/freeradius/3.0/clients.conf จากนั้นให้เพิ่ม บรรทัดที่ 251-254 หรือจะแก้ไขจาก ตัวอย่างที่มีให้ก็ได้ โดย attribute ipaddr คือ อุปกรณ์ที่จะผูก freeradius และ secret คือ secret ที่ใช้คุยกัน

6.2) stop service freeradius และ เปิด debug mode ทิ้งไว้ โดยใช้คำสั่ง /usr/sbin/freeradius -X
6.3) จากนั้น เพื่อนๆ ก็สามารถนำ อุปกรณ์ของเพื่อนๆ ไปผูกกับ FreeRADIUS ได้เลยครับ โดยใช้ Secret Key ที่ตั้งไว้
ก็จบกันไปแล้วนะครับ สำหรับบทความ วิธีการติดตั้ง FreeRADIUS + MariaDB บน Debian 12 โดยเพื่อนๆสามารถปรับแต่ง mariadb ให้สะดวกกว่าการใช้ CLI โดยใช้ phpmyadmin หรือโปรแกรม mySQL Client อื่นๆ ที่เพื่อนๆถนัด ได้เลยนะครับ แต่ในบทความนี้ จะมาทำเป็นฉบับ CLI เพื่อให้เห็นภาพรวมว่ามีกี่ Step แล้วต้องทำอะไรบ้าง Table แต่ละตัว ใช้ทำอะไรบ้าง เพื่อให้เพื่อนๆ เข้าใจหลักการของ FreeRADIUS กันก่อนนะครับ จริงๆแล้ว เจ้าตัว FreeRADIUS สามารถทำอะไรได้หลายอย่างเลยนะครับ เช่น mac-auth, eduroam เพื่อนๆสามารถเข้าไปศึกษากันได้ที่ https://wiki.freeradius.org/guide/HOWTO ได้เลยนะครับ
Ref : https://draculaservers.com/tutorials/freeradius-centos-7-mysql/
https://networkradius.com/doc/FreeRADIUS%20Technical%20Guide.pdf