Radius Server

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)

มารู้จักกับ 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 ที

เป็นคำแนะนำติดตั้งจัดการปรับแต่ง radius server

วิธีติดตั้ง radius server ด้วยโปรแกรม freeradius

  1. ติดตั้งโปรแกรม freeradius ด้วยคำสั่ง
    apt-get install freeradius
  2. แก้ไขให้ทำงานทุกครั้งที่บูทเครื่อง
    chkconfig radiusd on
  3. สั่งให้ทำงานด้วยคำสั่งว่า
    /etc/init.d/radiusd start
    Starting RADIUS server: [ OK ]
  4. ตรวจสอบว่าโปรแกรมทำงานแล้วด้วยคำสั่ง
    /etc/init.d/radiusd status
    ได้ผลออกมาดังตัวอย่าง
    radiusd (pid 19180) is running…
  5. แฟ้มที่เกี่ยวข้อง

    • /var/log/radius/radius.log
    • /etc/raddb/radiusd.conf
    • /etc/raddb/clients.conf
  6. เมื่อให้ radiusd ทำงานแล้ว เริ่มขั้นตอนทดสอบระบบโดยป้อนตัวอย่างคำสั่งดังนี้radtest root password-root localhost 0 testing123
    *** จากตัวอย่าง password-root คือรหัสผ่านของ root
    ได้ผลข้อความตอบกลับดังตัวอย่าง
    Sending Access-Request of id 43 to 127.0.0.1:1812
    User-Name = “root”
    User-Password = “password-root”
    NAS-IP-Address = 10.0.1.2
    NAS-Port = 0
    Re-sending Access-Request of id 43 to 127.0.0.1:1812
    User-Name = “root”
    User-Password = “{\27733\t\217\224\n2136\271$\30126\234\353\225”
    NAS-IP-Address = 10.0.1.2
    NAS-Port = 0
    rad_recv: Access-Reject packet from host 127.0.0.1:1812, id=43, length=20
    แสดงว่าระบบใช้งานได้แล้ว ถึงแม้ว่าจะมีการแจ้งว่า Access-Reject
    เป็นสาเหตุเนื่องจากไม่มีสิทธิในการอ่านแฟ้ม /etc/shadow ของระบบ
  7. หากต้องการให้ใช้กับบัญชีผู้ใช้ระบบ UNIX
    ต้องตั้งค่าให้อ่านแฟ้ม /etc/shadow ได้
    โดยแก้ไขแฟ้ม /etc/raddb/radiusd.conf
    ทำการ comment ยกเลิกบรรทัดข้อความจากเดิม
    user = radiusd
    group = radiusd
    ให้เป็น
    #user = radiusd
    #group = radiusd
    เสร็จแล้วให้ restart ระบบ radiusd ใหม่ด้วยคำสั่ง /etc/init.d/radiusd restart
    ต่อไปลองป้อนตัวอย่างคำสั่งเดิมเพื่อทดสอบดังนี้
    radtest root password-root localhost 0 testing123
    คราวนี้จะได้ผลข้อความว่า
    Sending Access-Request of id 82 to 127.0.0.1:1812
    User-Name = “root”
    User-Password = “password-root”
    NAS-IP-Address = 10.0.1.2
    NAS-Port = 0
    rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=82, length=20
    โดยมีผลการแจ้งว่า Access-Accept ถูกต้องตามต้องการ
  8. หากต้องการให้ radius client เข้ามาติดต่อใช้งานระบบ radiusd นี้ได้
    ให้แก้ไขแฟ้ม /etc/raddb/clients.conf ให้มีค่าดังตัวอย่างนี้
    client 10.0.1.0/24 {
    secret = mytestkey
    shortname = private-network
    }
    ตัวอย่างคือให้ radius client ที่มีหมายเลข ip 10.0.1.x
    สามารถเข้ามาใช้ด้วย secret key ว่า mytestkey
    เมื่อแก้ไขเสร็จแล้วให้ reload ใหม่ด้วยคำสั่ง /etc/init.d/radiusd reload
    ลองทดสอบด้วยคำสั่งตัวอย่าง
    radtest root passwordroot 10.0.1.1 0 mytestkey
    *** ค่า passwordroot คือ รหัสผ่านของ root และ 10.0.1.1 คือหมายเลข ip ของ radius server
    ได้ผลแสดงข้อความดังตัวอย่าง
    Sending Access-Request of id 246 to 10.0.1.1:1812
    User-Name = “root”
    User-Password = “passwordroot”
    NAS-IP-Address = 10.0.1.2
    NAS-Port = 0
    rad_recv: Access-Accept packet from host 10.0.1.1:1812, id=246, length=20
    ถึงขั้นตอนนี้เป็นอันเปิดใช้ระบบ radiusd ได้แล้ว
  9. หากต้องการให้ใช้ได้ดับ LDAP ด้วยให้แก้ไขแฟ้ม /etc/raddb/radiusd.conf
    เพื่อให้รองรับและเชื่อมต่อกับ LDAP server ดังนี้
    ต้องแก้ไขส่วนของ modules โดยค้นเข้าไปที่บริเวณพื้นที่ขึ้นต้นด้วยข้อความว่า
    modules {

    ldap {
    **** ให้แก้ไขค่าของ server , basedn ดังตัวอย่าง
    server = “myldap.net”
    basedn = “dc=my, dc=net”
    **** ให้ comment บรรทัด access_attr เพื่อยกเลิกค่า เนื่องจากไม่ได้ใช้รูปแบบนี้
    # access_attr = “dialupAccess”

    *** ในส่วนของ modules แก้ไขเพียงแค่นี้
    ต่อไปแก้ไขส่วนของ authorize โดยค้นเข้าไปที่บริเวณพื้นที่ขึ้นต้นด้วยข้อความว่า
    authorize {

    # Read the ‘users’ file
    files
    *** ให้แก้ไขโดยแทรกเพิ่มบรรทัดข้อความว่า ldap ก่อนบรรทัดคำว่า files
    เพื่อให้ระบบทำการลำดับ authorize ด้วยแบบ ldap ก่อน
    หากไม่พบก็จะต่อด้วยแบบ files (แฟ้ม /etc/shadow)
    ถ้ากลับลำดับการ authorize อาจพบปัญหาผิดพลาดได้
    ดังตัวอย่างหลังการแทรกเพิ่มข้อความ
    # Read the ‘users’ file
    ldap
    files
    *** ในส่วนของ authorize แก้ไขเพียงแค่นี้
    ต่อไปแก้ไขส่วนของ authenticate โดยค้นเข้าไปที่บริเวณพื้นที่ขึ้นต้นด้วยข้อความว่า
    authenticate {

    # Auth-Type LDAP {
    # ldap
    # }
    *** ให้แก้ไขด้วยการ uncomment บรรทัดข้อความเพื่อให้ระบบกำหนดวิธี LDAP
    Auth-Type LDAP {
    ldap
    }
    *** ในส่วนของ authenticate แก้ไขเพียงแค่นี้

    เสร็จแล้วให้ reload ใหม่ด้วยคำสั่ง /etc/init.d/radiusd reload
    ทดสอบใช้งานได้เลย

  10. แนะนำให้ยกเลิกการกำหนดค่าการทำงานบางตัวที่ไม่ได้ใช้งาน
    โดยการ comment บรรทัดข้อความในแฟ้ม /etc/raddb/radiusd.conf
    ถ้าไม่ได้ใช้เป็น proxy radius ควรยกเลิก
    โดยเปลี่ยนจากเดิม proxy_requests = yes
    ให้เป็น proxy_requests = no

    ควรยกเลิกบาง authorize ที่ไม่ได้ใช้เช่น
    authorize {
    # preprocess
    # chap
    # mschap
    # suffix
    # ldap —> ระบบ ldap
    # files –> ระบบ UNIX หรือแฟ้ม /etc/shadow

  11. การแสดงผลรายงานจำเป็นต้องหาโปรแกรมมาต่างหาก
    ขอแนะนำตัวอย่างโปรแกรมแสดงผลรายงาน

    • ต้นแหล่งข้อมูลคือ http://www.tummy.com/radiusContext/
      สามารถได้ดาวน์โหลดโปรแกรมได้ที่
      ftp://ftp.psu.ac.th/pub/freeradius/radiusContext-1.93.tar.gz
    • ให้ดาวน์โหลดมาแล้วขยายแฟ้มเก็บไว้ที่ /root ด้วยตัวอย่างคำสั่ง
      tar -C /root -zxvf radiusContext-1.93.tar.gz
    • สร้าง directory สำหรับแสดงผลบนเวบ ดังตัวอย่างคือ
      mkdir /var/www/html/radiusreport
      จะแสดงผลบนโฮมพจ http://x.x.x.x/radius-report
    • ตัวอย่าง ขั้นตอนที่ใช้สำหรับประมวลผลรวมข้อมูลจาก
      /var/log/radius/radacct ไปเก็บไว้เพื่อแสดงผลที่ /var/www/html/radius-report
      *** ภายใน /var/log/radius/radacct จะแยกเก็บข้อมูลเป็น directory ของ
      แต่ละหมายเลข ip ทำให้อาจยุ่งยากต่อการรวบรวมข้อมูล
      /root/radiusContext-1.93/raddetail /var/log/radius/radacct/*/*
      /root/radiusContext-1.93/stdreport -D /var/www/html/radius-report

      *** ต้องใช้คำสั่งเหล่านี้ทุกครั้งเพื่อปรับปรุงผลรายงาน

    • ทดสอบผลรายงานได้เลยที่ http://x.x.x.x/radius-report
หมวดหมู่:คุย Linux, คุย...Network
  1. ยังไม่มีความเห็น
  1. No trackbacks yet.

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: