Tuesday, December 27, 2011

Freeradius คืออะไร

Freeradius เป็นโปรแกรมที่ใช้ในการจัดการแอคเค้าท์และใช้ในการตรวจสอบสิทธิ ตามมาตรฐาน IEEE 802.1X ตามคอนเซ็ปคือ AAA
เรามาดูกันซิว่า AAA มาจากคำว่าอะไรบ้าง
Accounting นั่นคือการจัดการแอคเค้าท์ในด้านต่างๆทั้งการสร้างแอคเค้าท์ ลบ และเพิ่มแอคเค้าท์ ตลอดจนการเพิ่มเติมคุณสมบัติต่างๆของแแต่ละแอคเค้าท์
Authentication
สิทธิ ตามวิธีการ A แรกที่ได้กล่าวมาในขั้นตอนนี้จะมีการแจ้งแมสเสจต่างๆว่าผ่านหรือไม่ ผ่าน การตรวจสอบสิทธิและเมื่อผ่านกระบวนการนี้ได้สำเร็จก็จะเข้าสู่กระบวนการสุด ท้าย นั่นคือ
Authorize

ทีนี้มาดูกระบวนการการทำงานของ freeradius กันดีกว่า

เริ่ม แรกหลังจากที่ได้มีการสร้างแอคเคาท์เป็นที่เรียบร้อยแล้ว มีการใช้งานโปรแกรม radius-client ต่างๆเช่น Pgina, ntradping หรือโปรแกรมอื่นๆเพื่อล็อกอินหรือตรวจสอบสิทธิ ก็จะเข้าสู่กระบวนการต่างๆดังนี้
1.โปรแกรม radius-client จะติดต่อโปรแกรม freeradius ตามหมายเลขไอพีและพอร์ทที่ได้กำหนดไว้ (โดยปรกติพอร์ทของโปรแกรมจะอยู่ที่1812 ตาม default)
2.โปรแกรมจะนำชื่อแอคเค้าท์ รหัสผ่าน และค่า secret key ไปตรวจสอบว่าถูกต้องหรือไม่ในขั้นตอนนี้จะมีกระบวนการดังนี้

2.1 (radius-client) >>>{username,password,secret key} >>>(freeradius)
ในขั้นตอนนี้จะมีการส่งยูสเซอร์เนม พาสเวิร์ด และ ซีเคร็ดคีย์ไปยังเซอร์ฟเวอร์เพื่อใช้ ในการตรวจสอบความถูกต้อง

2.2 (radius-client) >>>>{access-request}>>>>(freeradius)
ในขั้นตอนนี้ทางฝั่งไคลเอ้นท์จะสร้างส้ญญาณร้องขอผลตอบกลับมาจากเซอร์ฟเวอร
์หรือรอสัญญาณตอบรับความถูกผิดของข้อมูลที่ส่งจากขั้นตอนแรก

2.3(radius-client) <<<<{access-reply}<<<<<<<<<(freeradius)
ใน ขั้นตอนนี้เซอร์ฟเวอร์จะตอบกลับไปยังเครื่องไคลเอ้นท์ด้วยสัญญาณ access-reply โดยสัญญาณนี้จะประกอบไปด้วย2สัญญาณย่อยที่สำคัญแต่จะเกิดขึ้นเพียงแค่หนึ่ง สัญญาณ
ต่อเงื่อนไขนั่นคือสัญญาณ access-accept และ access-reject โดยสัญญาณ 
access-accept นี้คือสัญญาณที่ใช้ตอบกลับไปยังไคลเอ้นท์ว่ายูสเซอร์เนม รหัสผ่าน และซีเคร็ดคีย์นั้นถูกต้องส่วนสัญญาณ access-reject นั้นจะตรงกันข้ามกับสัญญาณแรก โดยมีความหมายคือยูสเซอร์เนม รหัสผ่าน และซีเคร็ดคีย์ไม่ถูกต้องหรืออาจมี เฉพาะตัวหนึ่งตัวใดไม่ถูกต้องก็ได้ เป็นต้น

ในโปรแกรม freeradius ต้องอาศัยฐานข้อมูลเพื่อดึงข้อมูลมาใช้ในการประมวลผลไม่ว่าจะเป็น
ยู สเซอร์เนม และพาสเวิร์ด หรือเมสเสจและเงื่อนไขต่างๆของแต่ละยูสเซอร์ โดยในฐานข้อมูลจะมีตารางที่เกี่ยวข้องดังนี้ radcheck , radgroupcheck , radgroupreply,usergroup และ radacct มาดูแต่ละเทเบิลดีกว่า

radcheck ในเทเบิลนี้จะมีฟิลด์ดังนี้
username เอาไว้กำหนดยูสเซอร์เนม
Attribute เอาไว้กำหนดแอททริบิวท์ ว่าจะใช้อะไรเช่นต้องการการกำหนดพาสสเวิร์ดก็ใช้ Password เป็นต้น
op เป็นสัญลักษณ์เอาไว้กำหนดรายละเอียดของแต่ละ Attribute
value เอาไว้กำหนดค่าของแต่ละ Attribute

มาดูตัวอย่างการกำนดหรือสร้างแอคเค้าท์กันดังนี้
insert into radcheck value(Null,'oportino','Password',':=','opor_test');
อธิบาย ในขั้นตอนนี้เราก็ได้แอคเค้าท์ แล้วดังนี้ user=oportino มี password=opor_test เป็นต้น แต่ยังไม่สมบูรณ์นะเหลือที่เทเบิล usergroup อีกดูตัวอย่างข้างล่างประกอบด้วย

usergroup
username เอาไว้กำหนดยูสเซอร์เนม
groupname เอาไว้เก็บชื่อกรุ๊ปหรือกำหนดกรุ๊ปให้แก่ยูสเซอร์นั้น

มาดูตัวอย่างการกำนดหรืออสร้างแอคเค้าท์ให้สมบูรณ์ต่อจากตัวอย่างที่แล้วดังนี้
insert into usergroup value(Null,'oportino','User_blog');
อธิบาย ในขั้นตอนนี้เราก็ได้แอคเค้าท์ที่ประจำกรุ๊ปแล้วนั่นคือ ยูสเซอร์ oportino มีกรุ๊ปที่สังกัดคือ User_blog เป็นต้น

radgroupcheck เทเบิลนี้เอาไว้กำหนดนโยบายให้แต่ละกรุ๊ปนั่นคือสมาชิกใดถ้าอยู่ในกรุ๊ปนี้ก็จะถูกกำกนดตามเงื่อนไขที่ระบุ
groupname กำหนดกรุ๊ปที่ต้องการทำนโยบาย
Attribute เอาไว้กำหนดแอททริบิวท์ที่เป็นนโยบายระดับกรุ๊ปให้แก่กร๊ป
op คือสัญลักษณ์ที่ระบุให้แต่ละแอททริบิวท์
value คือค่าของแอททริบิวท์ที่กำหนดแต่ละกรุ๊ป
*ดูการกำหนดท้ายบทความ

radgroupreply เทเบิลนี้เอาไว้กำหนดเงื่อนไขและเมสเสจที่โชว์ให้แก่กรุ๊ปนั้นๆ เช่น หมดเวลาการล็อกอิน หรือหมดอายุการใช้งาน เป้นต้น โดยฟิลด์ต่างๆก็จะเหมือนกับ radgroupcheck และมีการใช้งานเหมือนกัน
* ดูการใช้งานจริงท้ายบทความ


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

ตกลงตามนี้ ยกตัวอย่างผมอยู่ในบริษัทแห่งหนึ่ง มี3แผนกที่ต้องการใช้งาน freeradius นั่นคือ
แผนกบัญชี 10 คน มีชื่อแอคเค้าท์ดังนี้ acc1 - acc10
แผนกการตลาด 5 คน มีชื่อแอคเค้าท์ดังนี้ market1 - market5
และผู้บริหาร 7 คน มีชื่อแอคเค้าท์ดังนี้ vip1 - vip7

เริ่มเลยละกัน
1.กำหนดชื่อกรุ๊ป แผนกบัญชีคือ Accounting แผนกการตลาดคือ Margeting และผู้บริหารคือ VIP

2. กำหนดยูสเซอร์เนมและพาสเวิร์ดให้แก่แต่ละแผนก
insert into radcheck (Null,'acc1','Password',':=','acc1_pass'); ที่เหลือก็กำหนดเข้าไปจนถึง acc10
insert into radcheck (Null,'market1','Password',':=','market1_pass'); ที่เหลือก็กำหนดเข้าไปจนถึง market5
insert into radcheck (Null'vip1','Password',':=','vip1_password'); ที่เหลือก็กำหนดเข้าไปจนถึง vip7

3.จับแต่ละยูสเซอร์มาสังกัดกรุ๊ปของตนเอง
insert into radcheck (Null,'acc1','Accounting'); ที่เหลือก็กำหนดเข้าไปจนถึง acc10 ตรงตำแหน่งกรุ๊ปก็คงไว้
insert into radcheck (Null,'market1','Margeting'); ที่เหลือก็กำหนดเข้าไปจนถึง market5
insert into radcheck (Null'vip1','VIP'); ที่เหลือก็กำหนดเข้าไปจนถึง vip7
ทุกยูสเซอร์ก็จะมีกรุ๊ปอยู่แล้วตรงตามชื่อกรุ๊ปของแผนกตัวเอง

4.จากนั้นกำหนดให้แต่ละกรุ๊ปหมดเวลาการใช้งานเมื่อใดดังนี้
ี้insert into radgroupcheck (Null,'Accounting',Expiration',':=','Oct 30 2007');
insert into radgroupcheck (Null,'Margeting','Expiration',':=','Nov 10 2008');
คราวนี้เมื่อยูสเซอร์นั้นล็อกอินในภายหลังที่เราระบุ พี่แกก็จะล็อกอินไม่ได้พร้อมมีเมสเสจกลับมาว่าหมดอายุการใช้งานแล้ว

5.ต้องการให้กรุ๊ปของผู้บริหารนั่นคือ VIP ไม่มีวันหมดอายุการใช้งานกำหนดดังนี้
insert into radgroupcheck (Null'VIP','Auth-Type',':=','Local');


RADIUS ServerRADIUS Server คืออะไร


       RADIUS เป็นคำย่อของ Remote Authentication Dial-In User Service (RADIUS) คือ client/server security protocol ซึ่งเป็นผลงานของLucent InterNetworking Systems ที่ได้ทำการคิดค้นขึ้นมา เพื่อรวบรวม account ของ users ให้อยู่แต่เพียงที่เดียว เพื่อง่ายต่อการบริหาร ไม่ต้องทำหลายจุดหลายเซิฟเวอร์ เวลามี users ที่เซิฟเวอร์อื่นๆ ต้องการใช้งาน ก็จะส่งข้อมูลมาตรวจเช็คที่ RADIUS Server นี้
ทำไมถึงต้องใช้ RADIUS
หาก ในระบบของท่านมีผู้ใช้งานอินเตอร์เน็ตจำนวนมาก ซึ่งยากต่อการควบคุมการใช้งาน โดยเฉพาะ ในสถานศึกษาที่มีผู้ใช้งานมากๆ RADIUS Server จึงมีความสำคัญเป็นอย่างมาก

ข้อดีของ RADIUS Server
- ควบคุมการใช้อินเตอร์เน็ตของ User ได้อย่างมีประสิทธิภาพ
- สามารถเก็บ Log File เพื่อตรวจสอบหลังได้ ตามกฎหมายใหม่กำหนดdesktop
- ตรวจสอบ User ที่กำลังใช้งานได้ แบบ Real time
- กำหนดระยะเวลาการใช้งานของ User ได้ เช่น 1 ชั่วโมง, 2 วัน, 3 เดือน หรือ 10 นาที เป็นต้น
- สามารถ Clear User ที่ไม่ต้องการให้ใช้งานในขณะ On line ได้

RADIUS Server เหมาะสำหรับที่ไหน?
- อพาร์ทเม้น ที่ให้บริการ อินเตอร์เน็ต ทั้งแบบฟรี และเก็บค่าบริการ
- โรงแรม ที่ให้บริการ อินเตอร์เน็ต ทั้งแบบฟรี และเก็บค่าบริการ
- โรงเรียน, สถานศึกษา ที่มีบริการอินเตอร์เน็ต หรือ เพื่อการเรียนการสอน เพื่อป้องการแอบใช้อินเตอร์เน็ต ขณะรับการสอน
- ผู้ให้บริการ Wireless Internet (WiFi HotSpot)

ที่มา : http://www.star-internet.com/web/content/view/35/1/


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



องค์ประกอบพื้นฐานของ RADIUS Server1. Access Clients
                      คือ เครื่องคอมพิวเตอร์หรืออุปกรณ์ที่ผู้ใช้งานสั่งให้ติดต่อระบบเพื่อใช้งาน เช่น เครื่องคอมพิวเตอร์ที่ลูกค้า Individual ใช้งาน โดยใช้ โปรแกรม Dial-Up Net working สั่งงาน Modem ให้ Connect เพื่อใช้งานอินเทอร์เน็ต

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)

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 Package                  คือ ข้อมูลที่ถูกส่งหรือรับระหว่าง RADIUS Server และ RADIUS Client  (หมายถึง NAS) มีรูปแบบที่ถูกกำหนดไว้ตามมาตรฐานของ RFC 2685 Remote Authentication Dial In User Service (RADIUS) และ 2866 RADIUS Accounting.

มีคุณสมบัติดังนี้

เป็นข้อมูลที่ส่งหรือรับกันระหว่าง RADIUS Server และ RADIUS Client
อยู่ ในรูปแบบของการร้องขอและตอบกลับ (Request /Response) คือ RADIUS Client ส่งการร้องขอไปยัง RADIUS Server และ RADIUS Server ตอบกลับการร้องขอของ RADIUS Client
แต่ละ Package จะต้องระบุจุดประสงค์ของการติดต่อ คือ Authentication หรือ Accounting
แต่ละ Package จะบรรจุข้อมูลที่เรียกว่า Attributes ซึ่งใช้ในการตรวจสอบสิทธิ์กำหนดสิทธิ์ และเก็บบันทึกการใช้งาน

การกำหนดค่าเบื้องต้นสำหรับ RADIUS Server และ Client
RADIUS Server
                  กำหนดเพื่อให้ RADIUS Server สามารถติดต่อกับ RADIUS Client แต่ละตัวได้ ซึ่งมีข้อมูลที่ต้องกำหนดให้ RADIUS Server ดังนี้

IP Address ของ NAS
RADIUS shared secret
ยี่ห้อ และ รุ่นของ NAS  ที่ใช้ในกรณีที่ไม่มีหรือไม่ทราบให้เลือกเป็น - Standard Radius -.
                ** RADIUS Server จำเป็นต้องระบุ UDP Port เพื่อใช้สำหรับรับและส่ง Authentication และ Accounting Package ระหว่าง RADIUS Server และ RADIUS Client

RADIUS Client
                 ต้องกำหนดค่าต่าง ๆ บน NAS  เพื่อให้สามารถติดต่อกับ RADIUS Server   ซึ่งต้องกำหนดค่าต่าง ๆ เหล่านี้บน NAS ทุกตัวที่ติดต่อกับ RADIUS Server

IP Address ของ RADIUS Server
RADIUS shared secret
UDP Port  เพื่อใช้สำหรับส่งและรับ  Authentication และ Accounting Package
                ** สำหรับ RADIUS shared secret และ UDP Port จะต้องกำหนดให้ตรงกับที่ระบุไว้ที่ RADIUS Server

RADIUS Shared Secret               ใช้สำหรับตรวจสอบความถูกต้องของการติดต่อระหว่าง RADIUS Server กับ RADIUS Client ซึ่ง Shared Secret จะเป็นตัวหนังสือ (ตัวเล็กและตัวใหญ่มีความแตกต่างกัน) หรือตัวเลขที่ต้องกำหนดให้ตรงกันทั้ง RADIUS Server และ RADIUS Client  แต่ RADIUS Client แต่ละตัวไม่จำเป็นต้องกำหนด Shared Secretให้เหมือนกัน

RADIUS Shared Secret จะกำหนดได้ 2 ตัว ดังนี้

Authentication Shared Secret
Accounting Shared Secret
               ในขณะที่มีการขอตรวจสอบสิทธิ์ (Authentication) การจัดส่ง Package Access-Request ระหว่าง NAS และ RADIUS Server เนื่องจากการส่ง Password จะต้องมีความปลอดภัยดังนั้นจึงมีการกำหนดโพรโตคอลเพื่อใช้ในการส่งและรับ ข้อมูล โพรโตคอลที่นิยมใช้คือ PAP, SHAP, MS-SHAP, MS-SHAP V2 และ EAP ซึ่งเป็นโพรโตคอลที่เกิดขึ้นใหม่ยังไม่แพร่หลายในขณะนี้


อ้างถึง
ตัวอย่าง ในโพรโตคอล  PAP NAS จะต้องเข้ารหัส (Encrypt) Password ก่อนโดยใช้ Shared Secret และส่ง Package Access-Request นั้นออกไป เมื่อ RADIUS Server รับ Package Access-Request แล้วจะทำการถอดรหัส (Decrypt) Password ที่ถูกเข้ารหัสไว้โดยใช้ Shared Secret แล้วนำไปตรวจสอบ


                 สำหรับในการส่งข้อมูล Accounting จะไม่มีการ Encrypt ข้อมูลแต่ RADIUS Server จะใช้ Shared Secret ในการตรวจสอบความถูกต้องของ NAS ที่จะติดต่อด้วย

RADIUS Port                   RADIUS Server   จำเป็นต้องระบุ UDP Port   เพื่อใช้สำหรับรับและส่ง Authentication  และ  Accounting Package   ระหว่าง RADIUS Server  และ RADIUS Client   ซึ่งเริ่มต้นที่ RADIUS   ได้ถูกพัฒนาขึ้นผู้พัฒนาได้ใช้ Port 1645   สำหรับการส่งและรับ Package Authentication  และ 1646  สำหรับการส่งและรับ Package Accounting   แต่เนื่องจากมาตรฐานนั้นได้มีการกำหนด Port   ดังกล่าวสำหรับ   "datametrics"

ดังนั้น Port ที่เป็นมาตรฐานในปัจจุบันนี้ คือ

                    - 1812  สำหรับการส่งและรับ  Package Authentication
                    - 1813  สำหรับการส่งและรับ  Package Accounting

Password Protocols           เนื่องจากการส่ง Access-Request  ในขณะที่มีการขอ Authentication มีการส่ง Password จาก NAS ไปยัง RADIUS Server จึงจำเป็นต้องคำนึงถึงความปลอดภัยของ Password ดังกล่าว ดังนั้นจึงมีการสร้างโพรโตคอลสำหรับใช้งานในส่วนนี้ขึ้นซึ่งได้แก่

PAP  (Password Authentication Protocol)
              ในขณะที่มีการขอเชื่อมต่อ(User Negotiates) จาก Access Clients มายัง NASการส่ง Password ในขั้นตอนนี้จะยังไม่มีการเข้ารหัส (encrypt) ใด ๆ Password จะจัดส่งในรูปแบบ “Clear Text”

              เมื่อ NAS รวบรวมข้อมูลที่เพียงพอสำหรับสร้าง Access-Request แล้ว NAS จะ Encrypt Password โดยใช้ Authentication Shared Secret ที่ถูกกำหนดไว้ แล้วส่ง Access-Request ดังกล่าวไปยัง RADIUS Server

              เมื่อ RADIUS Server ได้รับ Access-Request จาก NAS แล้วจะทำการ Decrypt Password ที่ได้รับโดยใช้ Authentication Shared Secret ที่จัดเก็บไว้สำหรับ NAS ตัวดังกล่าว

            ** โพรโตคอล PAP สามารถใช้ได้กับ RADIUS Server ทุกตัว

CHAP  (Challenge Handshake Authentication Protocol)
            สำหรับ CHAP ได้ถูกสร้างขึ้นเพื่อหลีกเลี่ยงการส่ง Password แบบ “Clear Text” ในขณะที่ User Negotiates เมื่อ NAS รับทราบแล้ว NAS จะสร้าง Challenge โดยสุ่มตัวอักษร แล้วส่งกลับไปยัง Access Client

              เมื่อ Access Client ได้รับ Challenge จะทำการสร้าง Digest คือ นำ Challenge ที่ได้รับมาต่อท้าย Password แล้วทำการ Encrypt แบบ one-way Encryption (MD5 Algorithm) แล้วส่ง Digest นั้นแทน Password ไปยัง NAS 

               NAS สร้าง Access-Request สำหรับการ Authentication และส่งไปยัง RADIUS Server

เนื่องจาก Digest ถูกสร้างแบบ one-way Encryption ไม่สามารถ Decrypt ได้

RADIUS Server จึงจำเป็นต้องใช้ Attribute ที่เกี่ยวกับ CHAP Protocol ที่ถูกจัดส่งมาใน Access-Request Package ที่ได้รับจาก NAS ซึ่งมี 2 Attributes ที่เกี่ยวข้องดังนี้

              CHAP-Password             :  Attribute สำหรับ Digest (Password ที่ต่อท้ายด้วย Challenge แล้ว Encrypt ด้วย MD5 Algorithm)

              CHAP-Challenge             :  Attribute สำหรับ Challenge ที่ถูกสุ่มขึ้นโดย NAS

RADIUS Server ใช้ Challenge จาก CHAP-Challenge ต่อท้าย Password ที
ที่มา:cpe.rmuti.ac.th

มารู้จัก Freeradius ให้ลึกซึ้งกันดีกว่า

Freeradius เป็นโปรแกรมที่ใช้ในการจัดการแอคเค้าท์และใช้ในการตรวจสอบสิทธิ ตามมาตรฐาน IEEE 802.1X ตามคอนเซ็ปคือ AAA
เรามาดูกันซิว่า AAA มาจากคำว่าอะไรบ้าง
Accounting นั่นคือการจัดการแอคเค้าท์ในด้านต่างๆทั้งการสร้างแอคเค้าท์ ลบ และเพิ่มแอคเค้าท์ ตลอดจนการเพิ่มเติมคุณสมบัติต่างๆของแแต่ละแอคเค้าท์
Authentication
สิทธิ ตามวิธีการ A แรกที่ได้กล่าวมาในขั้นตอนนี้จะมีการแจ้งแมสเสจต่างๆว่าผ่านหรือไม่ ผ่าน การตรวจสอบสิทธิและเมื่อผ่านกระบวนการนี้ได้สำเร็จก็จะเข้าสู่กระบวนการสุด ท้าย นั่นคือ
Authorize

ทีนี้มาดูกระบวนการการทำงานของ freeradius กันดีกว่า

เริ่ม แรกหลังจากที่ได้มีการสร้างแอคเคาท์เป็นที่เรียบร้อยแล้ว มีการใช้งานโปรแกรม radius-client ต่างๆเช่น Pgina, ntradping หรือโปรแกรมอื่นๆเพื่อล็อกอินหรือตรวจสอบสิทธิ ก็จะเข้าสู่กระบวนการต่างๆดังนี้
1.โปรแกรม radius-client จะติดต่อโปรแกรม freeradius ตามหมายเลขไอพีและพอร์ทที่ได้กำหนดไว้ (โดยปรกติพอร์ทของโปรแกรมจะอยู่ที่1812 ตาม default)
2.โปรแกรมจะนำชื่อแอคเค้าท์ รหัสผ่าน และค่า secret key ไปตรวจสอบว่าถูกต้องหรือไม่ในขั้นตอนนี้จะมีกระบวนการดังนี้

2.1 (radius-client) >>>{username,password,secret key} >>>(freeradius)
ในขั้นตอนนี้จะมีการส่งยูสเซอร์เนม พาสเวิร์ด และ ซีเคร็ดคีย์ไปยังเซอร์ฟเวอร์เพื่อใช้ ในการตรวจสอบความถูกต้อง

2.2 (radius-client) >>>>{access-request}>>>>(freeradius)
ในขั้นตอนนี้ทางฝั่งไคลเอ้นท์จะสร้างส้ญญาณร้องขอผลตอบกลับมาจากเซอร์ฟเวอร
์หรือรอสัญญาณตอบรับความถูกผิดของข้อมูลที่ส่งจากขั้นตอนแรก

2.3(radius-client) <<<<{access-reply}<<<<<<<<<(freeradius)
ใน ขั้นตอนนี้เซอร์ฟเวอร์จะตอบกลับไปยังเครื่องไคลเอ้นท์ด้วยสัญญาณ access-reply โดยสัญญาณนี้จะประกอบไปด้วย2สัญญาณย่อยที่สำคัญแต่จะเกิดขึ้นเพียงแค่หนึ่ง สัญญาณ
ต่อเงื่อนไขนั่นคือสัญญาณ access-accept และ access-reject โดยสัญญาณ  
access-accept นี้คือสัญญาณที่ใช้ตอบกลับไปยังไคลเอ้นท์ว่ายูสเซอร์เนม รหัสผ่าน และซีเคร็ดคีย์นั้นถูกต้องส่วน สัญญาณ access-reject นั้นจะตรงกันข้ามกับสัญญาณแรก โดยมีความหมายคือยูสเซอร์เนม รหัสผ่าน และซีเคร็ดคีย์ไม่ถูกต้องหรืออาจมี เฉพาะตัวหนึ่งตัวใดไม่ถูกต้องก็ได้ เป็นต้น

ในโปรแกรม freeradius ต้องอาศัยฐานข้อมูลเพื่อดึงข้อมูลมาใช้ในการประมวลผลไม่ว่าจะเป็น
ยู สเซอร์เนม และพาสเวิร์ด หรือเมสเสจและเงื่อนไขต่างๆของแต่ละยูสเซอร์ โดยในฐานข้อมูลจะมีตารางที่เกี่ยวข้องดังนี้ radcheck , radgroupcheck , radgroupreply,usergroup และ radacct มาดูแต่ละเทเบิลดีกว่า

radcheck ในเทเบิลนี้จะมีฟิลด์ดังนี้
username เอาไว้กำหนดยูสเซอร์เนม
Attribute เอาไว้กำหนดแอททริบิวท์ ว่าจะใช้อะไรเช่นต้องการการกำหนดพาสสเวิร์ดก็ใช้ Password เป็นต้น
op เป็นสัญลักษณ์เอาไว้กำหนดรายละเอียดของแต่ละ Attribute
value เอาไว้กำหนดค่าของแต่ละ Attribute

มาดูตัวอย่างการกำนดหรือสร้างแอคเค้าท์กันดังนี้
insert into radcheck value(Null,'oportino','Password',':=','opor_test');
อธิบาย ในขั้นตอนนี้เราก็ได้แอคเค้าท์ แล้วดังนี้ user=oportino มี password=opor_test เป็นต้น แต่ยังไม่สมบูรณ์นะเหลือที่เทเบิล usergroup อีกดูตัวอย่างข้างล่างประกอบด้วย

usergroup
username เอาไว้กำหนดยูสเซอร์เนม
groupname เอาไว้เก็บชื่อกรุ๊ปหรือกำหนดกรุ๊ปให้แก่ยูสเซอร์นั้น
มาดูตัวอย่างการกำนดหรืออสร้างแอคเค้าท์ให้สมบูรณ์ต่อจากตัวอย่างที่แล้วดังนี้
insert into usergroup value(Null,'oportino','User_blog');
อธิบาย ในขั้นตอนนี้เราก็ได้แอคเค้าท์ที่ประจำกรุ๊ปแล้วนั่นคือ ยูสเซอร์ oportino มีกรุ๊ปที่สังกัดคือ User_blog เป็นต้น


radgroupcheck เทเบิลนี้เอาไว้กำหนดนโยบายให้แต่ละกรุ๊ปนั่นคือสมาชิกใดถ้าอยู่ในกรุ๊ปนี้ก็จะถูกกำกนดตามเงื่อนไขที่ระบุ
groupname กำหนดกรุ๊ปที่ต้องการทำนโยบาย
Attribute เอาไว้กำหนดแอททริบิวท์ที่เป็นนโยบายระดับกรุ๊ปให้แก่กร๊ป
op คือสัญลักษณ์ที่ระบุให้แต่ละแอททริบิวท์
value คือค่าของแอททริบิวท์ที่กำหนดแต่ละกรุ๊ป
*ดูการกำหนดท้ายบทความ

radgroupreply เทเบิลนี้เอาไว้กำหนดเงื่อนไขและเมสเสจที่โชว์ให้แก่กรุ๊ปนั้นๆ เช่น หมดเวลาการล็อกอิน หรือหมดอายุการใช้งาน เป้นต้น โดยฟิลด์ต่างๆก็จะเหมือนกับ radgroupcheck และมีการใช้งานเหมือนกัน
* ดูการใช้งานจริงท้ายบทความ


เกริ่นมาพอสมควรแล้วคราวนี้มาดูการใช้งานจริงกันบ้าง**หมายเหต ทุกยูสเซอร์ต้องสังกัดกรุ๊ปด้วยโดยกรุ๊ปนั้นเรากำหนดขึ้นเอง จะใช้ชื่อกรุ๊ปอะไรก็ได้
ตกลงตามนี้ ยกตัวอย่างผมอยู่ในบริษัทแห่งหนึ่ง มี3แผนกที่ต้องการใช้งาน freeradius นั่นคือ
แผนกบัญชี 10 คน มีชื่อแอคเค้าท์ดังนี้ acc1 - acc10
แผนกการตลาด 5 คน มีชื่อแอคเค้าท์ดังนี้ market1 - market5
และผู้บริหาร 7 คน มีชื่อแอคเค้าท์ดังนี้ vip1 - vip7

เริ่มเลยละกัน
1.กำหนดชื่อกรุ๊ป แผนกบัญชีคือ Accounting แผนกการตลาดคือ Margeting และผู้บริหารคือ VIP

2. กำหนดยูสเซอร์เนมและพาสเวิร์ดให้แก่แต่ละแผนก
insert into radcheck (Null,'acc1','Password',':=','acc1_pass'); ที่เหลือก็กำหนดเข้าไปจนถึง acc10
insert into radcheck (Null,'market1','Password',':=','market1_pass'); ที่เหลือก็กำหนดเข้าไปจนถึง market5
insert into radcheck (Null'vip1','Password',':=','vip1_password'); ที่เหลือก็กำหนดเข้าไปจนถึง vip7

3.จับแต่ละยูสเซอร์มาสังกัดกรุ๊ปของตนเอง
insert into radcheck (Null,'acc1','Accounting'); ที่เหลือก็กำหนดเข้าไปจนถึง acc10 ตรงตำแหน่งกรุ๊ปก็คงไว้
insert into radcheck (Null,'market1','Margeting'); ที่เหลือก็กำหนดเข้าไปจนถึง market5
insert into radcheck (Null'vip1','VIP'); ที่เหลือก็กำหนดเข้าไปจนถึง vip7
ทุกยูสเซอร์ก็จะมีกรุ๊ปอยู่แล้วตรงตามชื่อกรุ๊ปของแผนกตัวเอง

4.จากนั้นกำหนดให้แต่ละกรุ๊ปหมดเวลาการใช้งานเมื่อใดดังนี้
ี้insert into radgroupcheck (Null,'Accounting',Expiration',':=','Oct 30 2007');
insert into radgroupcheck (Null,'Margeting','Expiration',':=','Nov 10 2008');
คราวนี้เมื่อยูสเซอร์นั้นล็อกอินในภายหลังที่เราระบุ พี่แกก็จะล็อกอินไม่ได้พร้อมมีเมสเสจกลับมาว่าหมดอายุการใช้งานแล้ว

ต้องการให้กรุ๊ปของผู้บริหารนั่นคือ VIP ไม่มีวันหมดอายุการใช้งานกำหนดดังนี้
insert into radgroupcheck (Null'VIP','Auth-Type',':=','Local');

5.

Monday, April 18, 2011

ตัวติดตั้ง freeradius2.1.7+coova1.0.14 บนcc5

หาหมูทดลองครับ  ยิงฟันยิ้ม ตัวscript ติดตั้งนี้ดัดแปลงมาจากของ คุณ ลูกตาล ม.บู
เอา มาจากของคุณ jakieboy + คุณ gigaza ขอขอบคุณทุกท่าน ณที่นี้ด้วยครับ รูปร่างตัว ม.บู อาจจะยังไม่ดีเท่าไหร่นะครับแต่ใช้งานได้ไม่มีปัญหา หากไม่ชอบก็สามารถ ไปเอาม.บูของท่านอื่นมาแทนหลังจากลง เสร็จแล้วได้

การ เก็บ log ต่างจะเป็นค่า default ของ cc หากมีโอกาสอาจจะทำ script ติดตั้งในส่วน syslog หรือเก็บ log ต่างๆ อีกที เพราะตอนนี้ยังเลือกไม่ถูกว่าจะเก็บแบบไหนครับ  ฮืม
สิ่งนี้จะทำให้ความหวังของผมเป็นจริงหรือป่าวครับ อิอิ

Gcc, kernel-sourcecode ของ ClarkConnect enterprise-5.0 ครับ
http://122.155.1.135/~kings/addon/gcc/Gcc5.rar

ลงเสร็จแล้ว ไม่ต้องใช้คำสั่งพวกนี้อีกน่ะครับ
# yum upgrade
# yum clean all
# yum groupinstall "Development Tools"
# yum install kernel-sourcecode
# yum install kernel-devel kernel-PAE-devel


เคดิส หยิบมาจากเว็บ king-network โดยคุณ ฮ่องเต้ฟูหลิง™


ตัว setup updateวันที่ 15/10/2552
*script นี้จะทำการ ลง developtool (เนื่องจากต้อง compile coova)หาก internet โหลดนอกประเทศ ช้า ให้ลองหาโหลด ตัว developtool ที่เขาทำไว้แล้วมาใช้นะครับจะได้ไม่เสียเวลาโหลดประมาณ 77 M หากใครคิดว่า เนทออกนอก พอใช้ได้ก็ ให้ติดตั้งแบบเดิมนะครับตัว script จะจัดการ download ให้



เดี๋ยวแก้บั๊กหมดจะทำไฟล์ setup ให้ใหม่นะครับ ตอนนี้ใครเจอบั๊กอะไรก็บอกด้วยนะครับ
changelog 15/10/2552
-เปลี่ยนfreeradius เป็น เวอร์ชัน 2.1.7
-เปลี่ยนจาก chilli มาเป็น coova 1.0.14
-แก้ไข ม.บู ให้ใช้กับ freeradius 2.x.x
         แก้ไขหน้า adduser แบบหลายคน ให้เวลา แสดงข้อมูล password ตรงกับที่กรอก  แต่เวลาลงDB เป็น MD5
          
changelog 28/9/2552

-แก้ไข ม.บู
        manage_group.php
           สามารถกำหนด เวลาเล่นสูงสุดต่อวันได้   (ทดสอบแล้วใช้งานได้)
           กำหนดเวลาที่สามารถเล่นได้ต่อlogin 1 ครั้ง  (ทดสอบแล้วใช้งานได้)
           จำกัด download upload (ทดสอบแล้วจำกัดได้จริงแค่ download)
           กำหนดวันหมดอายุ (ทดสอบแล้วใช้งานได้แต่ถ้าหมดอายุแล้ว เวลาlogin จะขึ้นว่าข้อมูล  ไม่ถูกต้องเหมือนพิมพ์พาสผิด ไม่ได้แจ้งว่าหมดอายุ คาดว่าต้องเปลี่ยนไปใช้ freeradius 2 เพราะ freeradius 1.1.8 ไม่มี module rlm_expiration)
changelog 27/9/2552
-แก้ไข script installmain ที่มีบั๊ก copy ไฟล์ directory.conf
-แก้ไข ม.บู
      manage_group.php
             สามารถกำหนด เวลาเล่นสูงสุดต่อวันได้   (ทดสอบแล้ว)
             กำหนดเวลาที่สามารถเล่นได้ต่อlogin 1 ครั้ง  (ทดสอบแล้ว)
             จำกัด download upload (ทดสอบแล้วจำกัดได้จริงแค่ download)
             กำหนดวันหมดอายุ (แก้ไขให้ add ลง database table group ยังไม่ได้ทดสอบการใช้งาน)
             แก้ไขเมื่อ edit แล้ว ชื่อ group จะไม่ซ้ำกันใน table groupradreply

changelog 26/9/2552
-แก้ไขไฟล์ radius.conf ให้สามารถกำหนดเวลาใช้งานใน ม.บูได้
-แก้ไขไฟล์ php ใน ม.บู บางส่วน
        หน้า block web และ ไฟล์ของ squid แก้ไฟล์ processscript.php ให้สามารถ blockweb ได้ทันทีเมื่อบันทึก
        แก้หน้าจัดการในส่วน admin ให้ redirect ไปหน้า index.php เมื่อไม่ได้ login
-เพิ่มไฟล์ directory.conf ลง ในconfig ของ httpd เพื่อป้องกันการเข้าถึงไฟล์ config.inc.php



วิธีลง


1.ขั้น แรก ลง clark 5.0 ให้เรียบร้อยก่อน ตอนเลือก package ผมเลือกลงหมดเลย ใครเลือกไม่หมดก็ตามใจ แต่ไม่รู้มีปัญหารึเปล่า แต่ที่ต้องเลือกแน่ๆ ก็คือ webserver mysql webproxy 3 อย่างนี้ต้องลง

2.หลังจากลงเสร็จเซตให้ต่อเนทได้เรียบร้อยก็ไปเปิดการทำงานของ โปรแกรมข้างล่างนี้
 เปิดการทำงาน mysql


เปิดการทำงาน webproxy


เปิดการทำงาน webserver


3.หลังจากลงเรียบร้อย
ให้ใช้ winscp อัพไฟล์ cc5chilli.tar.gz ไปไว้บน server


4.เปิด putty แล้วไป path ที่เก็บ cc5chilli.tar.gz ไว้
แล้วแตก  ด้วยคำสั่ง tar zxpf cc5chilli.tar.gz จะได้ folder cc5chilli

5.ใช้ winscp เข้าไปแก้ไขไฟล์ config ที่อยู่ในวงแดงคือส่วนที่เราต้องแก้เป็นข้อมูลของเราเอง
exinterface  คือ การ์ดที่ต่อ internet ถ้าต่อแบบ eth ก็ใส่ ethหมายเลข   ต่อแบบ ppp ก็ใช้ pppตัวเลข
mynet คือ network ของเรา   สังเกตว่าหน้าเครื่องหมาย / จะต้องมี เครื่องหมาย \นำหน้าด้วย
myuamlister คือ ip ของเครื่อง server chilli
mydhcpif คือ การ์ดที่ทำหน้าที่แจก dhcp ของ chillispot
ส่วนอันอื่นก็ตามชื่อมันเลยครับ

หลังจากแก้ไขเสร็จแล้วก็ save ครับ

6.ใช้ putty เข้าไป ที่ folder cc5chilli รันคำสั่ง ./config
7.รันคำสั่ง ./installmain  เครื่องจะใช้เวลาลงไม่นานครับ แล้วเครื่องจะ restart ก็สามารถใช้งานได้ทันที



ปล.
 phpmyadmin เข้าผ่านทาง https://ipที่กรอกในmyuamlisten:81/mysql
user root
password ก็ตามที่เราเซต

หน้าจัดการ ม.บู เข้าทาง  http://ipที่กรอกในmyuamlisten/authen/admin
user: administrator
password : password

เวปไหนที่เราblock ผม set ให้มัน redirect ไป google นะครับ ใครจะให้มันไปไหนไปแก้เอาเองใน squid.conf

ปล2. ตัว script ต่างๆไม่ได้มีการเข้ารหัสใดๆทั้งสิ้น หากท่านสนใจวิธีการ setup ให้ ดูตาม script เลยครับ 

ที่ผมลงใน vmware ครับ โดย จำลองให้มี 3 interface
โดยตัวที่ต่อเนท แบบ eth มี 2 ตัว คือ eth0 eth1  ส่วน eth2 เป็น interface ที่ทำ chilli   โดยผมลง cc5 เลือก package ทั้งหมด  เปิด service  squid mysql webserver เสร็จแล้วก็ ใช้ script โดย ต้องทำการ config ที่ ไฟล์ config ของ script ก่อน จากนั้น ก็รัน ./config ตามด้วย ./installmain เสร็จแล้วพอมัน restart ก็ใช้ได้เลยครับ

ใครที่ต่อแบบ ppp ตรง exinterface ก็ใส่เป็น pppหมายเลข นะครับ

แจกจริง Authentication ตัวเต็ม ไม่มีแก้โค้ด

ตัวนี้อ้างอิงจาก

http://forum.ubuntuclub.com/forum?topic=19606.0

ลองพิจารณากันดูนะครับ

download ได้ที่
http://www.upload-thai.com/download.php?id=85d462459743c6861b0e10a048e4eb06

ขอแตกกระทู้ ออกมาจากกระทู้ของ ท่าน maya_java นะครับ

เท่าที่ download มาดู ยังไม่ได้ลองครับ คู่มือ เล็ก ๆ น้อย ๆ ที่เขาเขียนบอกไว้

=============================================================================
ไปแก้ค่า config ตรงไฟล์ php.ini ตรงนี้สำคัญมาก ห้ามข้าม เพราะต้องให้ตัวแปร Global ที่เขียนในภาษา php สามารถใช้งานได้

ไปแก้ที่



php.ini

จากเดิม

register_global = Off



เปลี่ยนเป็น

register_global = On





ต่อไปก็เป็นในเรื่องของการกำหนดสิทธิ์ ตรงนี้ก็สำคัญมาก

ต้อง folder phpwifi->admin



กำหนดให้เป็นสิทธิ์  755 ทุกไฟล์ เล้นแต่ folder upload ให้เป็น  777 เท่านั้น



และกลุ่มก็ต้องเป็นของ root:apache อันนี้อ้างจาก  Linux CentOS



root:wheel อันนี้อ้างจาก  Unix FreeBSD



OS อื่นอาจไม่เหมือนกัน



ตรง /etc/squid/

กำหนด blockx.txt และ files.txt

กำหนดเป็น  777 น่ะคับ

และที่ห้ามข้ามขั้นตอนนี้ คือ กำหนดสิทธ์ 755 ให้ freeradius
ตรง /etc/raddb/
cd /etc/raddb/
chmod -R 755 *
chown root:apache *



ส่วนฐานข้อมูลของระบบนี้อยู่ที่ folder backupsql ชื่อ  portsproDB.sql



หรือ ง่ายๆก็ สามารถใช้กับระบบฐานข้อมูล ของ ม.บูรพา ได้ ผมพัตนามาจาก ม.บูรพา ครับ  แต่ห้ามเปิดระบบ Nas น่ะคับ เพราะผมใช้ช่องว่างของตาราง Nas มาใช้งาน



shell script ตอนติดตั้งใช้ของ ม.บูรพาได้ครับ อันเดียวกัน



Authen ตัวนี้เป็นเต็มสมบูรณ์ครับ ไม่มีตุกติกเรื่องโค้ด เสริมให้ตั้งเยอะด้าน function ขายได้เลย



ส่วนที่เหลือใครอยากไปพัฒนาต่อก็ได้ครับ!

authen ตัวนี้รองรับทุก OS server Linux,Unix ใช้ได้ ลงเพิ่มแค่ freeradius,chillispot ก็พอ

ผมคิดว่า จะเอารวมกับของท่าน maya เหมือนกัน หรือไม่ก็ดัดแปลงเข้าไปใน กระทู้นี้
http://www.linuxthai.org/forum/index.php?topic=7880.0 เดี๋ยวลองดูก่อน