Wednesday, October 3, 2012

การติดตั้ง chillispot, FreeRadius, syslog-ng บน ubuntu เพื่อทำตาม พรบ.ตอมพิวเตอร์

ท่านที่เคยไปพักตามโรงแรมหรือสถานที่ท่องเที่ยว/จุดพักเิดินทาง ฯลฯ คงเคยเห็นมีบริการ Wi-Fi และมีการขายบัตรอินเตอร์เ้น็ต หลาย ๆ ที่ดังกล่าว ได้นำเอาโปรแกรม chillispot และ FreeRaDius ไปประยุกต์ใช้งาน  นั่นคือเมื่อเราเชื่อมต่อ Wi-Fi ได้แล้ว พอเข้าเว็บไซต์ก็จะมีหน้าต่างให้เราป้อน username และ password ก่อนจึงจะใช้งานได้

ในสถานการณ์ปัจจุบัน  พรบ.คอมพิวเตอร์ 2550 ได้บังคับใช้งานแ้ล้ว  เราสามารถนำเอาโปรแกรม chillispot, FreeRadius, syslog-ng มาประยุกต์ใช้งานให้เข้ากับ พรบ.ได้ เพราะ พรบ.ได้ระบุว่า ผู้ให้บริการจะต้องสามารถระบุตัวตนของผู้ใช้งานได้ พร้ออมเก็บข้อมูลการ จราจรคอมพิวเตอร์ไม่น้อยกว่า 90 วัน ซึ่ง chillispot + freeradius + syslog-ng สามารถที่จะช่วยได้  ไม่เว้นแ่ต่ plawan centralized log ก็ได้นำซอฟต์แวร์ชุดนี้มาใช้งานเช่นกัน

การติดตั้งในที่นี้เป็นการติดตั้งตามรูปคอนฟิกข้างล่าง  โดยติดตั้ง FreeRadius และ syslog-ng ไว้บน Server ที่วางอยู่ในตำแหน่ง DMZ และติดตั้ง Chillispot ให้ทำหน้าที่เป็น Authentication Gateway ไ้ว้ในตำแน่ง Internal  ซึ่งจะเห็นว่าถ้าเป็นเครือข่ายขนาดใหญ่ และมีหลาย Internal Network ก็สามารถใช้ FreeRadius และ syslog-ng ร่วมกันได้  โดยส่วนประกอบของ chillispot ก็ประกอบด้วย dhcp, firewall, และ nat อยู่ในตัว การทำงานของ chillispot จะต้องทำงานร่วมกับ FreeRadius ซึ่งวิธีการติดตั้ง FreeRadius ดูได้ ที่นี่ โดยในที่นี้ผู้เขียนติดตั้ง chillispot บน ubuntu 8.10 ส่วน FreeRadius ติดตั้งบน ubuntu 8.04 (ไม่ใช้ ubuntu 8.10 เพราะเจอปัญหาบางอย่างที่้ัยังแก้ไม่ได้)


หมายเหตุ FreeRadius, chillispot และ syslog-ng สามารถติดตั้งในเครื่องเดียวกันได้  ซึ่งจะเหมาะสมกับหน่วยงานขนาดเล็ก ด้วยการปรับค่าคอนฟิกบางส่วน
ขั้นตอนการติดตั้ง Freeradius
การติดตั้ง Freeradius สำหรับวิธีการของผู้เขียนดูวิธีได้ ที่นี่

โดยบนเครื่อง FreeRadius จะต้องมีการคอนฟิกอนุญาตให้เข้าไปใช้งาน FreeRadius ที่ไฟล์ /etc/freeradius/client.conf ดังนี้
client 172.24.51.16 {
secret = radiussecret
shortname = chilli
}


จากค่า client ข้างบนอาจจะมีการสงสัยกันว่าทำไม่อนุญาต IP 172.24.51.252 เข้าไปใช้งาน  คำตอบก็คือว่าที่ Firewall มีการทำ NAT ระหว่าง Internal กับ DMZ ดังนั้น IP ที่ส่งไปยัง FreeRadius จึงเป็น IP ของ Firewall ฝั่ง Internal คือ 172.24.51.16

ในการติดตั้งใช้งาน ที่ Firewall ต้องทำให้เครื่อง Authentication Gateway สามารถเชื่อมต่อไปยังเครื่องที่เป็น FreeRadius ได้  ไม่นั้นก็จะไม่สามารถติดตั้ง FreeRadius ได้
ขั้นตอนการติดตั้ง chillispot บนเครื่อง Authentication Gateway
เซ็ตค่า Network
  1. ทำการ Enable packet forwarding ด้วยการแก้ไขไฟล์ /etc/sysctl.conf ด้วยการเอาเครื่องหมาย # หน้าคำว่า net.ipv4.ip_forward=1 ออก เพื่อสั่งให้ packet forwarding ของ ipv4 ทำงาน
  2. ทำการรันคำสั่งต่อไปนี้  เพื่อให้มีผลทันที  ให้เครื่องสามารถ forward packet ทำตัวเป็นเราเตอร์ได้
    echo 1 | tee /proc/sys/net/ipv4/ip_forward
    ถ้าผลที่ได้เป็น 1 ถือว่าทำการ Enable packet forwarding สำเร็จ
  3. ทำการ Restart network ด้วยคำสั่งต่อไปนี้
    sysctl -p
    /etc/init.d/networking restart
Enable TUN/TAP device driver support
  1. ทำการ Enable TUN/TAP device drive support ด้วยการเพิ่มคำว่า tun ต่อท้ายไฟล์ /etc/modules
  2. จากนั้นทำการ Enable โดยไม่ต้อง reboot ด้วยการรันคำสั่งต่อไปนี้
    modprobe tun
Install Chillispot
โปรแกรม chillispot เป็น Opensource ที่ใช้ติดตั้งบน Gateway Server เพื่อทำหน้าที่ควบคุมการใช้งานของ user ที่วิ่งผ่านให้มีการป้อน username และ password ก่อนจึุงจะใช้งานได้ ซึ่งจะทำงานร่วมกับโปรแกรม Radius ซึ่งทำหน้าที่บริหารจัดการฐานข้อมูลของ user โดยโปรแกรม chillispot กับ FreeRadius อาจจะติดตั้งอยู่บนเครื่องเดียวกันหรือต่างเครื่องกันได้ 
การติดตั้ง chillispot จะต้องใช้การ์แลน 2 การ์ด ซึ่งมีขั้นตอนต่อไปนี้
  1. ทำการติดตั้ง chillispot โดยใ้้ช้คำสั่งต่อไปนี้
    apt-get install chillispot
    จากนั้นให้เติมรายละเอียดดังต่อไปนี้
    IP address of radius server 1:
    127.0.0.1(ของผู้เีขียนชี้ไปยัง Freeradius ซึ่งอยู่อีกเครื่องจึงกำหนดเป็น 192.168.9.12)
    Radius shared secret:
    radiussecret   (ค่านี้ต้องตรงกับ Radius Server)
    Ethernet interface for DHCP to listen:
    eth1
    URL of UAM server:
    https://192.168.182.1/cgi-bin/hotspotlogin.cgi  (เปลี่ยนเป็นค่าอื่นได้)
    URL of UAM homepage:
    https://192.168.182.1/welcome.html
    Shared password between chillispot and webserver:
    uamsecret
  2. ต่อไปทำการแก้ไขไฟล์ /etc/default/chillispot เพื่อ Enable captive portal ด้วยการกำหนดค่าให้
    ENABLED=1
  3. ทำการแก้ไขไฟล์คอนฟิกของ chillispot คือไฟล์ /etc/chilli.conf โดยค่าที่สำคัญมาจากขั้นตอนของการติดตั้งที่ได้ทำมาแล้ว  และให้แก้ไขค่าให้เหมาะสม ดังต่อไปนี้
    net 192.168.182.0/24
    dns1 61.19.253.134
    dns2 61.19.253.136
    radiusserver1 127.0.0.1 (ของผู้เีขียนเป็น 192.168.99.12)
    radiusserver2 127.0.0.1 (ของผู้เีขียนเป็น 192.168.99.12)
    radiussecert radiussecret
    dhcpif eth1
    uamserver https://192.168.182.1/cgi-bin/hotspotlogin.cgi
    uamhomepage https://192.168.182.1/welcome.html
    uamsecret uamsecret
    uamlisten 192.168.182.1
    uamallowed www.google.co.th,192.168.182.0/24


    โดยค่าของ dns ต้องสามารถใช้งานได้จริง เพราะเป็นค่าที่จะต้องจ่ายให้กับเครื่อง Client
ติดตั้ง Firewall สำหรับ Chillispot
chillispot จะต้องมีการติดตั้ง Firewall (iptables) เพื่อกำหนดให้แพ็กเกตของข้อมูลจากเครื่อง Client ที่วิ่งผ่าน  ต้องผ่าน Service ที่เป็น chillispot เพื่อให้ Client ทุกคนต้องมีการป้อน username และ password ก่อนถึงจะใช้งานได้  โดย Firewall ของ Chillspot จะมีมาให้แล้วกับการติดตั้ง ซึ่งมีขั้นตอนการนำมาใช้ดังต่อไปนี้
  1. ทำการกำหนด firewall โดยทำการสร้างไฟล์ chilli.iptables ด้วยการคัดลอกมาจากไฟล์ firewall.iptables ที่มากับ chillispot ไปไว้ในตำแหน่ง /etc/init.d ด้วยคำสั่งดังนี้
    cp /usr/share/doc/chillispot/firewall.iptables /etc/init.d/chilli.iptables
  2. กำหนดให้ไฟล์ chilli.iptables สามารถ execute ได้ด้วยคำสั่ง
    chmod a+x /etc/init.d/chilli.iptables
  3. กำหนดให้กฎ firewall มีการ start ทุกครั้งเมื่อมีการเิปิดเครื่องด้วยคำสั่ง
    ln -s /etc/init.d/chilli.iptables /etc/rcS.d/S41chilli.iptables
  4. โดยค่าดีฟอลต์ไฟร์วอลล์จะทำการกำหนดค่าให้ eth0=internet, eth1= LAN แต่ถ้าคุณต้องการเปลี่ยนค่าก็สามารถเปลี่ยนแปลงได้ 
  5. หากต้องการให้เครื่องลูกสามารถทดสอบการเชื่อมต่อโดยใ้ช้โปรโตคอล ICMP หรือ ping ได้ ให้เพิ่มกฎของ iptables ดังนี้
    #Allow ping to myserver
    SERVER_IP="192.168.182.1"
    iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -d $SERVER_IP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -p icmp --icmp-type 0 -s $SERVER_IP -d 0/0 -m state --state ESTABLISHED,RELATED -j ACCEPT

  6. ทำการ Enable firewall script ด้วยคำสั่ง
    /etc/init.d/chilli.iptables
ติดตั้ง Apache และ PHP
  1. ติดตั้ง Apache Web Server ด้วยคำสั่ง
    apt-get install apache2
  2. start apache ด้วยคำสั่ง
    /etc/init.d/apache2 start
  3. ตรวจสอบว่า apache ทำงานหรือไม่ด้วยคำสั่ง
    netstat -lnt
    ถ้าทำแล้วจะต้องมีคำว่า
    tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
  4. ติดตั้ง PHP5 ด้วยคำสั่ง
    apt-get install php5
  5. restart apache ด้วยคำสั่ง
    /etc/init.d/apache2 restart
สร้างหน้าต่าง Login
  1. โดยปกติตำแหน่งที่เป็น ScriptAlias /cgi-bin/ ของ apache จะอยู่ที่ /usr/lib/cgi-bin/
  2. ให้ทำการเปลี่ยนไดเร็กทอรีเข้าไปยังตำแหน่งดังกล่าว แล้วใ้ช้ีคำสั่ง ls จะเห็นชื่อไฟล์ชื่อว่า hotspotlogin.cgi ซึ่งเป็นไฟล์ที่ถูกสร้างขึ้นในขั้นตอนการติดตั้ง chillispot
  3. ทำการแก้ไขไฟล์ดังกล่าวโดยให้เอาเครื่องหมาย # หน้าคำว่า $uamsecret และ $userpassword ออกและำกำหนดค่าเป็นดังนี้
    $uamsecret = "uamsecret";
    $userpassword=1;
  4. เมื่อแก้ไขเสร็จแล้วทำการ restart chillispot ด้วยคำสั่ง
    /etc/init.d/chillispot start
  5. ทำการสร้างไฟล์ welcome.html ด้วยคำสั่ง
    vim /var/www/welcome.html
  6. ทำการเพิ่มข้อความต่อไปนี้ลงไปในไฟล์ welcome.html
    <html>
    <head><title> Welcome to Our Hotspot, Wireless Network </title></head>
    <body>
    <center>
         <H1><font color="red">TESTING ONLY</font></H1>
         <img src="chillispot.png">
         <H3><font color="blue">Welcome to Our Hotspot, Wireless Network.</font></H3>
         <p>You are connected to an authentication and restricted network access point.
         <H3><a href="http://192.168.182.1:3990/prelogin">Click here to login</a></H3>
         <p>
         <p>Enjoy.
    </center>
    </body>
    </html>
  7. ถ้าต้องการรูป chillispot.png ให้ทำการดาว์นโหลดโดยใช้คำสั่ง
    wget http://mamboeasy.psu.ac.th/~wiboon.w/images/stories/chillispot/chillispot.png
    cp chillispot.png /var/www
เซ็ตอัพ SSL
  1. ติดตั้ง SSL โดยใช้คำสั่งต่อไปนี้
    apt-get install ssl-cert
  2. สร้างไดเร็กทอรี่ขึ้นมาเพื่อเก็บ Certificate ที่ถูกสร้างขึ้น โดยใช้คำสั่ง
    mkdir /etc/apache2/ssl
  3. ทำการสร้าง self-signed cerfiticate ด้วยคำสั่งดังต่อไปนี้
    make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
  4. แล้วจะถูกถามคำถามต่าง ๆ แต่ใน ubuntu 8.10 อาจจะถามแค่ hostname
    Country Name : ป้อน TH
    State or Province Name : ป้อนจังหวัด
    Locality Name : ป้อนชื่อที่เหมาะสม
    Organization : ป้อนชื่อองค์กร
    hostname   :  localhost (ควรจะใช้ hostname ที่เป็นจริง ของผู้เขียนแค่ทดลอง)
    Email : ป้อนอีเมล
  5. ทำการ install module ssl ด้วยคำสั่ง
    a2enmod ssl
  6. ให้รันคำสั่งต่อไปนี้เพื่อ active new configuration
    /etc/init.d/apache2 restart
  7. สร้าง virtual host ชื่อ hotspot ขึ้นมาด้วยคำสั่งต่อไปนี้
    vim /etc/apache2/sites-available/hotspot
  8. เพิ่มข้อความต่อไปนี้ลงไปในไฟล์
    NameVirtualHost 192.168.182.1:443
    <VirtualHost 192.168.182.1:443>
          ServerAdmin adisorn.k@cattelecom.com
          DocumentRoot "/var/www"
          ServerName "192.168.182.1"
          <Directory "/var/www/">
              Options Indexes FollowSymLinks MultiViews
              AllowOverride None
              Order allow,deny
              allow from all
          </Directory>
           ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
           <Directory "/usr/lib/cgi-bin/">
                  AllowOverride None
                  Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
                  Order allow,deny
                  Allow from all
            </Directory>
            ErrorLog /var/log/apache2/hotspot-error.log
            LogLevel warn
            CustomLog /var/log/apache2/hotspot-access.log combined
            ServerSignature On
            SSLEngine on
            SSLCertificateFile /etc/apache2/ssl/apache.pem
    </VirtualHost>
  9. ทำการ Enable SSL VirtualHost ด้วยคำสั่งต่อไปนี้
    a2ensite hotspot
  10. ทำการ reload apache ด้วยคำสั่ง
    /etc/init.d/apache2 reload
  11. การ Listen port ของ https (SSL) โดย default จะเป็นพอร์ต 443 ให้ทำการแก้ไขค่าคอนฟิกที่เกี่ยวกับ port ของ SSL ที่ไฟล์ /etc/apache2/ports.conf ให้มีค่าเป็นดังนี้



  12. เปลี่ยนแปลงค่าให้มีการ Listen port ที่เป็น default http (80) ด้วยการแก้ไขไฟล์ /etc/apache2/site-available/default โดยให้มีโครงสร้างของ VirtualHost เป็นดังนี้
    NameVirtualHost *:80
    <VirtualHost *:80>


    </VirtualHost>


  13. ทำการกำหนดค่า ServerName ในไฟล์ /etc/apache2/apache2.conf ให้มีค่าดังนี้
    ServerName  192.168.182.1  (ของผู้เขียนไม่ได้กำหนดค่านี้ก็ทำงานได้)

  14. ทำการ restart apache ด้วยคำสั่ง
    /etc/init.d/apache restart

  15. เืมื่อเอาเครื่อง client มาเชื่อมใช้งานหลังเครื่อง Authentications Gateway ก็ได้จะรับ IP address ที่ Authentications Gateway จ่ายมาให้โดย ค่า Gateway IP ที่ได้ เป็นค่าที่ชี้ไปยัง Authentication Server ดังนั้นเมื่อเปิดใ้ช้งาน Browser ตัว Authentication Gateway จะบังคับให้มีการ Redirect ไปยัง https ดังรูป ให้คลิ๊กที่คำว่า Continue to this website (not recommended)



  16. จากนั้นจะได้หน้าต่างแจ้งข้อมูลดังรูป ให้คลิ๊กที่ Link --> Click Here to login



  17. จากนั้นจะได้หน้า่ต่างให้ป้อน username และ password ดังรูป



  18. ถ้า Login ถูกต้องจะได้ผลดังรูป


กรณีที่ต้องการบังคับให้ผู้ใช้งานเว็บต้องใช้งานผ่าน Proxy ต้องทำดังขั้นตอนต่อไปนี้
  1. ติดตั้ง squid ด้วยคำสั่ง
    apt-get install squid
  2. แก้ไขไฟล์คอนฟิกของ squid คือไฟล์ /etc/squid/squid.conf ดังนี้
    1. เอาเครื่องหมาย # ไปไว้หน้าคำว่า http_port 3128 เพื่อกำหนดให้เป็นคอมเมนต์
    2. หาข้อความว่า # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS แล้วข้อความเพิ่มเติมอีก 3 บรรทัดต่อไปนี้
      acl chillispot src 192.168.182.0/255.255.255.0
      http_port 192.168.182.1:3128 transparent
      http_access allow chillispot

      คำอธิบาย
      # http_port 3128  เป็นการยกเลิกการทำงานของโปรแกรมแบบไม่ทำ transparent
      visible_hostname ต้องกำหนดชื่อเครื่องให้ระบบ หากไม่กำหนด  อาจมีปัญหาในการ start service
      acl chillispot src เป็นการกำหนดค่าเน็ตเวิร์กของเครือข่ายที่จะอนุญาตให้ใช้งานผ่านโปรแกรม Squid
      http_port x.x.x.x.3128 transparent เป็นการกำหนดให้พอร์ต 3128 เป็น transparent proxy
      http_access allow กำหนดค่า Access Control ให้เน็ตเวิร์ควง chillispot สามารถใช้งานผ่าน transparent proxy ได้
    3. หาคำว่า visible_hostname แล้วใส่ชื่อหลังคำดังกล่าวเช่น
      visible_hostname myproxy
  3. สั่งให้โปรแกรม squid ทำงานด้วยคำสั่ง
    /etc/init.d/squid start
  4. ทำการส่งต่อ packet ที่เข้ามาทางพอร์ต 80 ไปยัง squid พอร์ต 3128 ด้วย คำสั่ง iptables โดยเพิ่มในไฟล์ /etc/init.d/chilli.iptables ดังนี้
    iptables -t nat -A PREROUTING -i tun0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
  5. ทำการอนุญาตให้ใช้งาน INPUT ที่เป็น syn flag ดังนี้
    iptables -A INPUT -i tun0 -p tcp -m tcp --dport 3128 --syn -j ACCEPT
  6. ต้องเิพิ่ม rule ต่อไปนี้เพื่อป้องกันการเ้้ข้าใช้งานระบบโดยการแอบตั้งค่า proxy เอง
    iptables -t nat -I PREROUTING -p tcp -m tcp –dport 3128 -j DROP
การจัดการเรื่อง Log
การจัดการเรื่อง Log ในที่นี้จะเลือกข้อมูลการจราจรที่สำคัญจากเครื่องที่เป็น Authentication Gateway และ Log ของ Server อื่น ๆ (ถ้ามี) ส่งไปยังเครื่อง Centralized Log Server เหตุผลที่เรามีการคัดเฉพาะส่วนที่ำจำเป็นก็คือ เพื่อไม่ให้ปริมาณทราฟฟิกของข้อมูลการจราจร ทำให้การใช้งานระบบเครือข่ายคอมพิวเตอร์ช้าลง หรือเปลืองแบนด์วิดธ์ของระบบ

สำหรับเซอร์วิสที่สำคัญที่จะ้ต้องส่งต่อข้อมูลการจราจรคอมพิวเตอร์ได้แก่ squid และ radius ขณะเดียวกันเราจะต้องใช้หลักการของ IPTABLES เพื่อทำการคัดเลือกข้อมูลเบื้องต้นสำหรับการใช้งานผ่านพอร์ตต่าง ๆ ที่เป็นเซอร์วิสพื้นฐานเพื่อจัดเก็บข้อมูลการจราจรคอมพิวเตอร์ เช่น http, https, ftp, smtp, imap, pop3, IM เป็นต้น

Install Time Server
ด้วย พรบ.ได้กำหนดว่าต้องตั้งนาฬิกาของอุปกรณ์บริการทุกชนิดให้ตรงกับเวลาอ้างอิง สากล (Stratum0) ซึ่งเราควรจะติดตั้ง NTP Server ไว้บน Server เครื่องใดเครืองหนึ่ง  ซึ่งในที่นี้เลือกเครื่องที่เป็น Log Server เพื่อกระจายสัญญาณนาฬิกาให้กับเครื่อง Server และเครื่อง Workstation อืน ๆ ทั้งหมดในระบบเป็นลำดับที่ 1 ส่วนลำดับที่ 2 และ 3 ให้อ้างอิงไปยังฐานฐานเวลาภายนอก โดยรูปแบบการอ้างอิงฐานเวลาเป็นดังรูปข้างล่าง


รูปแสดงการอ้างอิงฐานเวลา

ส่วนตารางข้างล่างเป็นการอิงเวลามาตรฐานของประเทศไทย


ตารางแสดงการอิงเวลามาตรฐานของประเทศไทย

ขั้นตอนการติดตั้ง NTP Server ที่เครื่อง Log Server เป็นดังนี้

  1. ติดตั้ง ntp ด้วยสั่ง
    apt-get instal ntp
  2. ทำการสำเนาไฟล์คอนฟิกของ ntp ไปไว้เป็นอีกชื่อดังนี้
    cp /etc/ntp.conf /etc/ntp.conf.bak
  3. แก้ไขไฟล์ /etc/ntp.conf ให้มีค่าเป็นดังนี้
    restrict default kod nomodify notrap noquery nopeer
    restrict 127.0.0.1
    # อนุญาตให้ Internal network เข้าใช้งาน
    restrict 172.24.51.0 mask 255.255.255.0 nomodify notrap
    server 203.185.69.60 dynamic
    server time.navy.mi.th dynamic
    server time.nist.gov dynamic
    server 127.127.1.0 # local clock
    fudge 127.127.1.0 stratum 10
    driftfile /var/lib/ntp/ntp.drift
    broadcastdelay 0.008
    keys /etc/ntp/keys
  4. ตรวจสอบ Remote Server ที่ต้องการใช้อ้างอิงฐานเวลา ใช้คำสั่งดังนี้
    apt-get install ntpdate
    ntpdate -b 203.185.69.60
    ntpdate -b time.navy.mi.th
    ntpdate -b time.nist.gov
  5. สั่ง restart service ด้วยคำสั่ง
    /etc/init.d/ntp restart
  6. หลังจากที่ Server ทำงานปกติไม่มีการแจ้ง error ใด ๆ สามารถตรวจสอบตารางการทำงานของ Server ด้วยคำสั่ง
    ntpq -pn
    ซึ่งจะได้ผลดังนี้

    remote                     refid       st    t    when   poll     reach   delay     offset     jitter
    ==========================================
    203.185.69.60         .INIT.    16    u     -            64       0      0.000    0.000    0.000
    118.175.67.83         .INIT.    16    u     -            64       0      0.000    0.000    0.000
    192.43.244.18         .INIT.    16    u     -            64       0      0.000    0.000    0.000
    127.127.1.0             .LOCL. 10     l    54           64      7       0.000    0.000    0.001

  7. สามารถใช้เครื่อง Linux เครื่องอื่นในระบบทดสอบการทำงานของ Server ได้ด้วยคำสั่ง
    ntpdate <ip address> ใส่ ip address ของเครื่อง NTP Server
ขั้นตอนการติดตั้ง NTP Server ที่เครื่อง Server เครื่องอื่น (NTP client) เป็นดังนี้
  1. ติดตั้ง ntp ด้วยสั่ง
    apt-get instal ntp
  2. ทำการสำเนาไฟล์คอนฟิกของ ntp ไปไว้เป็นอีกชื่อดังนี้
    cp /etc/ntp.conf /etc/ntp.conf.bak
  3. แก้ไขค่าคอนไฟล์ของเครื่อง Linux Server อื่น ๆ ที่ไฟล์ /etc/ntp.conf ดังนี้
    server 192.168.9.12  ## ip address ของ NTP Server
    restrict 127.0.0.1
    driftfile /var/lib/ntp/ntp.drift
หมายเหตุ : สำหรับการทำ NTP Server จะมีการใช้งานโปรโตคอล NTP ซึ่งทำงานที่ port 123 ดังนั้นต้องดูเรื่องของ Firewal ให้เปิด port ดังกล่าวด้วย
การติดตั้ง syslog-ng ที่ centralized log
  1. ติดตั้ง syslog-ng ด้วยคำสั่ง
    apt-get install syslog-ng
  2. สำเนาไฟล์คอนฟิกของ syslog-ng คือไฟล์ /etc/syslog-ng/syslog-ng.conf ด้วยคำสั่ง
    cp /etc/syslog-ng/syslog-ng.conf /etc/syslog-ng/syslog-ng.conf.bak
  3. แ้ำก้ไขค่าคอนฟิกในไฟล์ /etc/syslog-ng/syslog-ng.conf ตามความเหมาะสม  ซึ่งในที่นี้ให้แก้ไขค่าในส่วนของ options ซึ่งมีโครงสร้างเป็นดังนี้
    options {
                 - - - - -
                 - - - - -
                 - - - - -
    }

    โดยให้เพิ่มข้อความต่อไปนี้ลงไปในส่วนของ options เพื่อให้ syslog-ng ทำการเก็บชื่อ hostname ของเครื่องที่ส่ง log เข้ามา
    keep_hostname (yes);
  4. จากรูปเครือข่ายของผู้เขียนจะเห็นว่าโปรแกรม Freeraius ติดตั้งอยู่ีที่เดียวกับเครื่อง Centralized log ซึ่งปกติแล้ว detail file ซึ่งเป็นไฟล์ที่เก็บข้อมูลการ Login เข้าใช้งานโปรแกรม Freeradius จะอยู่ในตำแหน่ง /var/log/freeradius/radacct/ipaddress_of_client/detail-Ymd โดยค่า Ymd คือ Year month day ซึ่งชื่อไฟล์จะมีการแปรเปลี่ยนตามปีเดือนวัน ฉะนั้นถ้าต้องการให้สามารถส่ง detail file ดังกล่าวไปยัง syslog ได้  เราจะต้องทำการเปลี่ยนชื่อไฟล์ดังกล่าวให้มีชื่อที่คงที่คือไม่มีปีเดือน วัน  ด้วยการเปลี่ยนตัวแปร detailfile ในไฟล์ /etc/freeradius/radiusd.conf ดังนี้
    ให้เปลี่ยนค่า detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d  เป็น
    detailfile = ${radacctdir}/%{Client-IP-Address}/details
    หมายเหตุ ถ้าไม่ต้องการส่ง freeradius detail file ไปยัง syslog ก็ไม่ต้องทำขั้นตอนนี้
  5. เพิ่ม log rotate ของ freeeradius ในส่วนของ detail file เื่ืพื่อแก้ปัญหาขนาดไฟล์ที่อาจจะใหญ่เกินไป ด้วยการเพิ่มข้อมูลต่อไปนี้ไปต่อท้ายของไฟล์ /etc/logrotate.d/freeradius

    /var/log/radius/radacct/172.24.51.16/details {
    rotate 13
    weekly
    missingok
    notifempty
    compress
    }

    หมายเหตุ ค่า 172.24.51.16 เป็น IP address ของเครื่อง client ที่เข้ามาใช้งาน freeradius server ซึ่งจากรูปคือเครื่อง 172.24.51.252 แต่มีการใช้งานผ่าน firewall ที่มีการทำ nat จึงต้องเปลี่ยนค่า IP เป็น 172.24.51.16
  6. สั่งให้มีการส่งขอมูลของ freeradius server ซึ่งในที่นี้คือ detail file ดังที่กล่าวมาไปยัง syslog-ng agent ด้วยการสร้างไฟล์ขึ้นมาหนึ่งไฟล์ในที่นี้คือ /etc/init.d/rc.capture และให้ป้อนข้อมูลต่อไปนี้เข้าไปในไฟล์
    #!/bin/bash
    tail -F /var/log/radius/radacct/127.0.0.1/details | logger -t freeradius -p local3.info&
  7. จากนั้นสั่งให้สามารถรันได้และสร้าง Link ให้ทำงานทุกครั้งหลังเิปิดเครื่องด้วยคำสั่ง
    chmod a+x /etc/init.d/rc.capture
    ln -s /etc/init.d/rc.capture /etc/rcS.d/S88rccapture
  8. ซึ่งเมื่อเราไปเปิด log file ของ syslog-ng (/var/log/syslog) ก็จะเห็นค่าของการ login เข้าใช้งาน freeradius เหมือนกับค่าในไฟล์ detail file ของ freeradius ดังรูป


การติดตั้ง syslog-ng ที่เครื่อง Authentication Gateway
  1. ติดตั้ง syslog-ng ด้วยคำสั่ง
    apt-get install syslog-ng
  2. กำหนดให้เครื่อง Authentication Gateway ส่ง log ไปยัง Centralized log ด้วยการเพิ่มเติมค่าคอนฟิกในไฟล์ /etc/syslog-ng/syslog-ng.conf ดังนี้
    destination remote {
                  udp("192.168.9.12" port(514));
    };
    log {source(s_all); filter(f_messages); destination(remote); };
    log {source(s_all); filter(f_kern); destination(remote); };


    สคริปต์ข้างบนเป็นการส่ง log ไปยังเครื่อง 192.168.9.12
  3. ทำการส่งค่า log ของ squid (/var/log/squid/access.log) ไปยัง syslog-ng agent ซึ่งก็คือส่งไปยัง syslog-ng agent ของเครื่องตัวเอง และหลังจากนั้น syslog-ng agent ในเครื่องตัวเองก็จะส่งต่อไปยัง remote syslog ต่อไป  โดยการส่งมี 2 วิธีคือ
    วิธีที่ 1 ส่ง log ของ squid ที่เก็บไว้ในไฟล์ /var/log/squid/access.log ในลักษณะที่สำเนาต่อไปยังยังเครื่อง centralized log ซึ่งทำได้ดังนี้
    1. ด้วยการสร้างไฟล์หนึ่งไฟล์ในที่นี้ชื่อว่า /etc/init.d/rc.capture และมีข้อความในไฟล์ดังนี้
      #!/bin/bash
      tail -F /var/log/squid/access.log | logger -t squid -p local3.info
    2. จากนั้นสั่งให้สามารถรันได้และสร้าง Link ให้ทำงานทุกครั้งหลังเิปิดเครื่องด้วยคำสั่ง
      chmod a+x /etc/init.d/rc.capture
      ln -s /etc/init.d/rc.capture /etc/rcS.d/S88rccapture
    3. เมื่อเราไปเิปิดดู log ที่ไฟล์ /var/log/syslog ของเครื่อง Centralized log จะได้ Log ของ squid ดังรูป


      รูปแสดง Log ของ squid บนเครื่อง Centralized Log
    วิธีที่ 2 ส่ง log ของ squid ไปยังเครื่อง Centralized log โดยไม่มีการเก็บ squid log (/var/log/squid/access.log) ไว้ในเครื่องของตัวเอง ทำดังนี้
    1. แก้ไขไฟล์ /etc/squid/squid.conf โดยแก้ไขค่าดังนี้
      ของเดิม
      access_log /var/log/squid/access.log squid
      แก้ไขเป็น
      access_log syslog:local7.info หรือ
      access_log syslog:local0.notice หรือ
      access_log syslog:local0.warning หรือแบบอื่น ขึ้นอยู่กับ facility และ priority
    2. สั่ง reconfigure squid ด้วยคำัสั่ง
      squid -k reconfigure

  4. ที่ผ่านมาจะเราสามารถเก็บ Log ของ Freeradius ซึ่งอยู่บนเครื่อง Centralized Log และเก็บ Log ของ Squid ที่อยู่ ณ เครื่อง Authentication Gateway ได้แล้ว ซึ่งเป็น Log หลัก ที่ควรจะเก็บเอาไว้ ต่อไปนี้ก็จะขึ้นอยู่กับนนโยบายของแต่ละหน่วยงานว่ามี การเปิดให้ใช้งานโปรโตคอลอื่น ๆ บน Authentication Gateway นอกเหนือจาก web หรือไม่ ซึ่งถ้าไม่เป็น การเก็บ Log แค่นี้ก็อาจจะเพียงพอแล้ว เพราะทุก application ที่ผู้ใช้ใช้งาน มีการใช้ผ่่าน squid อย่า่งเดียว  แต่ถ้ามีการใช้งานโปรโตคอลอื่น ๆ ด้วย ก็จะ้ต้องมีการเก็บ Log เพิ่มเติมต่อไป
  5. ในกรณีที่ต้องการเก็บ Log ของทราฟฟิกทั้งหมดที่เข้าทางขา eth1 (ซึ่ง chillispot จะสร้าง interface ที่เป็น tun0 ขึ้นมา) และออกทางขา eth0 ของ Authentication Gateway ให้เพิ่มคำสั่ง iptables ลงไปในไฟล์ /etc/init.d/rc.capture โดยให้เพิ่มคำสั่งต่อไปนี้ลงไป
    iptables -A FORWARD -i tun0 -o eth0 -j LOG --log-level info --log-prefix "FORWARD "
การส่ง Log จาก Server อื่น ๆ ไปยัง Centralized Log
  1. ติดตั้ง NTP Server ที่เครื่อง Server เครื่องอื่น (NTP client) ตามวิธีการที่ได้กล่าวมาแล้วข้างบน
  2. ติดตั้ง syslog-ng ด้วยคำสั่ง
    apt-get install syslog-ng
  3. กำหนดให้เครื่อง Server อื่น ๆ ส่ง log ไปยัง Centralized log ด้วยการเพิ่มเติมค่าคอนฟิกในไฟล์ /etc/syslog-ng/syslog-ng.conf ดังนี้
    destination remote {
                  udp("202.129.16.26" port(514));
    };
    log {source(s_all); filter(f_messages); destination(remote); };
    log {source(s_all); filter(f_kern); destination(remote); };


    สคริปต์ข้างบนเป็นการส่ง log ไปยังเครื่อง 202.129.16.26
  4. แ้ก้ไขการกำหนดค่า log ของ Apache ที่ไฟล์คอนฟิกของ Apache (/etc/apache2/sites-available/default) เป็นดังนี้ ของเดิม
        LogLevel warn
    แก้ไขเป็น
        LogLevel notice

กรณี Apache Web Server ให้ทำดังนี้
วิธีที่ 1 ทำการส่ง log ที่ถูกเก็บเอาไว้ในเครื่อง Web Server แล้ว (/var/log/apache2/access.log) และให้สำเนาส่งไปยัี่งครื่อง Centralized log ด้วย ทำดังนี้
  1. สร้างไฟล์ขึ้นมาหนึ่งไฟล์ในที่นี้ชื่อว่า /etc/init.d/rc.capture และมีข้อความในไฟล์ดังนี้
    #!/bin/bash
    tail -F /var/log/apache2/access.log | logger -t apache2_copy -p local3.info
  2. จากนั้นสั่งให้สามารถรันได้และสร้าง Link ให้ทำงานทุกครั้งหลังเิปิดเครื่องด้วยคำสั่ง
    chmod a+x /etc/init.d/rc.capture
    ln -s /etc/init.d/rc.capture /etc/rcS.d/S88rccapture
  3. เมื่อเราไปเิปิดดู log ที่ไฟล์ /var/log/syslog ของเครื่อง Centralized log จะได้ Log ของ apache ดังรูป



    จากรูปจะเห็นคำว่า ns2 ซึ่งเป็นชื่อ host ของ Web Server และคำว่า apache2_copy ซึ่งเป็นข้อความที่อยู่หลัง -t ของคำสั่งที่กล่าวมา  โดยเราสามารถที่จะเปลี่ยนแปลงค่าได้ตามความเหมาะสม  เพื่อให้บ่งบอกได้ว่าเป็น log ประเภทไหน
วิธีที่ 2 กำหนดให้ส่ง log จาก Apache Web Server (/var/log/apache2/access.log) ไปยัง Centralized Log โดยไม่มีการสำเนาเก็บไว้ที่ Apache Web Server ทำดังนี้
  1. แก้ไขคอนฟิกไฟล์ของ Apache (/etc/apache2/sites-available/default) ในส่วนของ Log ดังนี้
    ของเดิม
        CustomLog /var/log/apache2/access.log combined
    แก้ไขเป็น
        CustomLog "|/usr/bin/logger -t apache2 -p local1.info" combined
  2. สั่ง restart apache ด้วยคำสั่ง
    /etc/init.d/apache2 restart
  3. เมื่อเราไปเิปิดดู log ที่ไฟล์ /var/log/syslog ของเครื่อง Centralized log จะได้ Log ของ apache ดังรูป

การสั่งให้ Centralized log มีการเก็บ Log แบบกลั่นกรอง (Filter)
ที่ผ่านมาการเก็บ Log ของ Centralized Log Server มีการเก็บ log ไว้ที่ไฟล์ /var/log/syslog ทั้งหมด  ซึ่งจะยากต่อการมอนิเตอร์  วิธีการแก้ทำได้ด้วยการสั่งให้ syslog-ng มีการเก็บ log แบบกลั่นกรองคือกำหนดให้มีการเก็บ log ของแต่ละโปรแกรมหรือแต่ละบริการ แยกไฟล์ต่างหาก
ซึ่งสามารถทำได้ด้วยการแก้ไขไฟล์ /etc/syslog-ng/syslog-ng.conf แล้วเพิ่มค่าการ Filter ดังต่อไปนี้
  • สำหรับฟิลเตอร์โปรแกรม Freeraduis

    filter f_radius { match("radius"); };
           destination d_radius {
           file("/var/log/$HOST/$YEAR/$MONTH/radius.$YEAR-$MONTH-$DAY"
           owner(root) group(adm) perm(665)
           create_dirs(yes) dir_perm(0775));
    };
    log { source(s_all); filter(f_radius); destination(d_radius); };


  • สำหรับฟิลเตอร์โปรแกรม squid

    filter f_squid { match("squid"); };
           destination d_squid {
           file("/var/log/$HOST/$YEAR/$MONTH/squid.$YEAR-$MONTH-$DAY"
           owner(root) group(adm) perm(665)
           create_dirs(yes) dir_perm(0775));
    };
    log { source(s_all); filter(f_squid); destination(d_squid); };


  • สำหรับฟิลเตอร์โปรแกรม apache

    filter f_apache { match("apache"); };
            destination d_apache {
            file("/var/log/$HOST/$YEAR/$MONTH/apache.$YEAR-$MONTH-$DAY"
            owner(root) group(adm) perm(665)
            create_dirs(yes) dir_perm(0775));
    };
    log { source(s_all); filter(f_apache); destination(d_apache); };
หมายเหตุ คำว่า match สำมารถใช้คำว่า program แทนได้
ซึ่งเมื่อเราทำการฟิลเตอร์แล้ว  เมื่อเข้าไปดูไฟล์ในไดเร็กทอรี่ที่กำหนด ก็จะได้ไฟล์เป็นดังรูป

รูปแสดง ไฟล์ที่เก็บ Log ซึ่งผ่านการ Filter แล้ว บน Centralized log ซึ่งเป็น Log ของ radius ที่ส่งมาจาก Server มีชื่อ Hostname เป็น qc


รูปแสดง ไฟล์ที่เก็บ Log ซึ่งผ่านการ Filter แล้ว บน Centralized log ซึ่งเป็น Log ของ squid ที่ส่งมาจาก Server มีชื่อ Hostname เป็น chilli


รูปแสดง ไฟล์ที่เก็บ Log ซึ่งผ่านการ Filter แล้ว บน Centralized log ซึ่งเป็น Log ของ apache ที่ส่งมาจาก Server มีชื่อ Hostname เป็น ns2
การเพิ่มชื่อผู้ใช้งานบน FreeRadius
เป็นการเพิ่มข้อมูลเข้าไปยังฐานข้อมูล MySQL ของ FreeRadius ซึ่งมีวิธีการเพิ่มที่สามารถทำได้ 3 วิธีคือ
  1. การเพิ่มผ่านโปรแกรม phpmyprepaid ซึ่งจะไ่ม่ขอกล่าวเพราะสามารถทำได้ง่ายผ่าน GUI
  2. การเพิ่มผ่านโปรแกรม phpmyadmin
    โดยตารางข้อมูลที่ใช้ี่สำหรับการเพิ่ม user ในเบื้องต้นมี 2 ตารางคือ ตาราง radcheck ซึ่งมีไว้เพื่อเก็บข้อมูลที่เป็น username และ password ของผู้ใช้งาน และตารางที่สองชื่อ radreply มีไว้สำหรับเก็บข้อมูลที่เกี่ยวกับคุณสมบัติการใช้งานของผู้ีใช้ เช่นเวลาในการใช้งานทั้งหมด (Session-Timeout) และเวลาที่เป็นที่เป็น Idle (Idle-Timeout) โดยข้อมูลตัวอย่างเป็นดังรูป

    ตัวอย่างข้อมูลในตาราง radcheck


    ตัวอย่างข้อมูลในตาราง radreply



  3. การเพิ่มผู้ใช้งานด้วยการ import text file ผ่าน phpmyadmin โดยมีขั้นตอนดังนี้
    1. สร้าง text file เพื่อสร้างรายชื่อผู้ใช้งานในตาราง radcheck และตาราง radreply ให้มีนามสกุลเป็น *.sql

      ตัวอย่างการเพิ่มรายชื่อผู้ใช้งานในตาราง radcheck
      INSERT INTO radcheck VALUES ('', 'somsak', 'User-Password', '==', 'test123'),
      ('', 'somchai', 'User-Password', '==', 'test123');


      ตัวอย่างการเพิ่มรายชื่อผู้ใช้งานในตาราง radreply
      INSERT INTO radreply VALUES ('', 'somsak', 'Session-Timeout', ':=', 10800),
      ('', 'somsak', 'Idle-Timeout', ':=', 1200);

    2. เปิด phpmyadmin แล้วเลือกเมนู import เพื่อทำการ import text file จากนั้นกดปุ่ม Browse เพื่อเลือก text file ที่ได้สร้างไว้ จากนั้นกดปุ่ม Go เพื่อทำการ import text file
ยังมีต่ออีกเร็ว ๆ นี้ครับ

วิธีรักษาความปลอดภัยให้ระบบ wireless ของคุณ

วิธีรักษาความปลอดภัยให้ระบบ wireless ของคุณ


  ระบบรักษาความปลอดภัยของ Wireless นั้น เท่าที่ได้สืบค้นจากผลิตภัณฑ์ในตลาด ก็จะมีฟีเจอร์หลักๆ ซึ่งสามารถจัดกลุ่มได้ดังต่อไปนี้

Authentication


  เป็นเทคโนโลยีที่ปิดกั้นการเข้าใช้ระบบเครือข่าย โดยแนวคิดพื้นฐานคือหากมี Client ใดต้องการติดต่อกับระบบเครือข่าย จะต้องผ่านขั้นตอน Authentication นี้ก่อน โดยจะมีเซิร์ฟเวอร์ที่แยกตัวออกมาทำงานด้านนี้โดยเฉพาะ นั่นคือ Authentication Server โดย Authentication ในยุคต้น ๆ ของเทคโนโลยีนี้ จะเน้นไปที่เรื่องของ Remote Access ซึ่งเซิร์ฟเวอร์ที่คอยทำงานด้านนี้คือ RADIUS Server (Remote Access Dial In User Service) และในภายหลัง RADIUS Server ก็ได้ล้ำหน้าเข้ามาทำหน้าที่ในระบบ LAN และต่อเนื่องมาจนมารับหน้าที่ใน Wireless Network ในที่สุด
  ในหัวข้อของ Authentication นี้ จะโยงและแตกกระจายไปเป็นฟีเจอร์ย่อย ๆ อีกหลาย ๆ อย่าง เช่น การสร้างฐานข้อมูลของผู้ที่ได้รับอนุญาต, ความสามารถในการกำหนด Account แบบชั่วคราว, การดึงเอาฐานข้อมูลของ User จากระบบอื่น ๆ เช่น จาก Windows 2000 ADS มาเป็นฐานข้อมูลสำหรับทำ Authentication, ฯลฯ ยิ่งฟีเจอร์มากก็ยิ่งแพงครับ

Encryption
  คือกลไกที่จะคอยแจกจ่าย Encryption key ไปยัง Wireless Client แต่ละตัวหลังจากที่ได้ผ่านขั้นตอนของ Authentication แล้ว ซึ่งมักจะเข้าใจผิดกันว่านี่คือหน้าที่โดยตรงของ RADIUS Server แต่ในความเป็นจริงแล้ว นี่คือการหยิบยื่นหน้าที่อีกอย่างหนึ่งให้กับ RADIUS Server มากกว่า และเรียกชื่อเซิร์ฟเวอร์ตัวนี้ใหม่ว่า Wi-Fi RADIUS Server
Surveillance & Monitoring
  คืออีกฟีเจอร์หนึ่งที่เพิ่มขึ้นมาตอบสนองความต้องการของระบบรักษาความ ปลอดภัยใน Wireless network และยังช่วยให้ Wireless network มีพื้นที่ครอบคลุมที่สมบูรณ์มากขึ้นด้วย โดยส่วนใหญ่แล้ว ฟีเจอร์นี้จะทำงานประสานกับความสามารถที่มีมากับ Access Point เช่น
การที่ Access Point สามารถจะตอบสนองต่อการร้องของจาก Software เพื่อให้รายงาน MAC address ของ Client ทั้งหมดที่กำลังติดต่ออยู่
  หรือการที่ Access Point สามารถที่จะรายงานกลับมายังซอฟต์แวร์ได้ว่า Client แต่ละตัวที่ติดต่ออยู่ด้วยนั้น มีระดับสัญญาณประเมินเป็น SN Ratio (Signal-per-Noice) เท่าไหร่
  หรือหากเก่งกว่านั้น AP จะบอกได้ว่า Client connection ที่เกิดขึ้นได้ มีระยะเวลานานเท่าไหร่แล้ว โดยในฟีเจอร์นี้ จะแตกขยายออกไปเป็นฟีเจอร์ประกอบอื่น ๆ อีกมากมาย เช่น Environment data log เพื่อเก็บข้อมูลสถิติพฤติกรรมการใช้ Wireless ในแต่ละช่วงเวลา Alert / Alarm เพื่อรายงานสภาพวิกฤตก่อนที่จะเกิด หรือแจ้งเตือนเมื่อ Wireless network อยู่ในสภาพที่วิกฤตแล้ว


ข้อมูลจาก http://www.arip.co.th/

ระบบ Authentication Server แบบ แนวๆๆ

มันคือระบบ authen แบบ ที่ทำขึ้นมาจากแนวคิด การนำหลักการ  ของ iptables  มาประยุกต์ ทำให้ สามารถ ระบุ ip แบบ static ip อีกทั้งยังใช้ dhcp มาทำการแจก ip ได้ พร้อมทั้งยังทำ Vlan เข้ามาช่วย เหลือได้ อีกแนวทาง โดยที่ หลักการทำงานของมันจะ ใช้ระบบ สัญญาณ มา จัดการ การทำงาน ในการ คิด เวลา จะต่ำได้สุด ที่ ทุก 1 นาที ถ้าน้อยกว่านี้ อาจจะ คาดเคลือนๆ ซึ่ง ข้อดีของ ระบบ นี้ มาด้วยกัน หลากหลายอย่าง
1. สามารถทำ ระบบ Authen ได้โดย ง่าย (  ปรับ ให้ใช้งานหรือไม่ใช้งานก็ได้ )
2. สามารถ ระบุ ทางออกของ Output LAN ได้หลาย ทาง ( จะเรียกว่า ระบบ Multi NAT )
    2.1 โดย ที่ ยังสามารถที่จะ ระบุ ได้อีกว่า จะให้ Output LAN สามารถทำการ Authen ได้หรือไม่
    2.2 ยังสามารถที่จะจัดการ Forward port ไปยัง ขา ของฝ่ง Multi NAT ได้อีกด้วย
3. ระบบ Multiple WAN Load Balancer  คือ สามารถทำการเชื่อมต่อได้มากกว่า 1 ISP มากสุดที่ทำการเชื่อมต่อในตอนนี้คือ 16 เส้น (ISP)
4.
ระบบการจัดการเป็นแบบ TEXT File ทำให้การ ตรวจสอบการใช้งาน ระบบ Query ทำงานได้ เร็ว แต่ ข้อมูลจะต้อง ห้าม ผิดผลาด
5. ระบบ Split แยกเน็ตแยกเกมส์ สามารถ นำหลักการนี้มาใช้ งานในกรณี PFMultiwan Authen เรียกสั้นๆ ว่า
  PF-Authen  หรือ PF spot ก็แล้วแต่จะเรียก

   <  ทำการดาวโหลด ไฟล์ ได้ที่นี่เลยครับ  PFMULTIWAN V1 >

ขั้นตอนการ ลง PFMultiwan Authen Server
 หลังจากทำการโหลด ตัวไฟล์มาแล้ว







จะขึ้น มาดัง รูปด้าน ล่าง นี้นะครับ ให้ทำการตั้งค่า กันก่อน


พอตั้งค่าเสร็จแล้ว ให้ไปที่ putty shell จากนั้น พิมพ์ pfserver  แล้วกดเลข 9 ครั้ง หนึ่ง ระบบจะทำการ รี Script ทั้งหมด เพื่อให้ใช้งาน
ได้ทันที แต่ถ้าจะให้ เวิร์ค จะต้องรีบูต ซัก ครั้งหนึ่ง ก่อน


สิ้นสุด ขั้นการการ ลง ตัว PFMultiwan + Authen Server กันแล้ว
จัดการทำการ อัพเดต ระบบ โดยกดเลข 8 เพื่อทำการ อัพเดต  หลังจากอัพเดตแล้ว จะสามารถใช้งานส่วนของ Authentication Mode ได้
จากนั้น มาดู วิธการใช้งาน PF authen กันต่อ
มาดูการ จัดการ สำหรับ ลีนุกซ์ตัวอื่นๆ กัน บ้างนะครับ





ดูจากรูปน่าจะทำได้ในระดับหนึ่ง นะครับซึ่งการทำงาน ค่อนข้าง ง่าย มากครับ ไม่ต้องสนใจ Mysql ไม่ต้องสนใจการ ทำ Table Field ต่างๆ
หรือเรื่องของ Chilli + coova + Radius ต่างๆ นะครับไม่ต้องสนใจมันเลยครับ  ซึ่ง ในการสนใจ ถ้า พัฒนา ในส่วนของเว็บได้ สามารถ นำ พวกนี้มา จัดการพัฒนามาใส่ เพิ่มได้เลยครับผม

มาดูวิดีโอการใช้งานแบบ คร่าวๆกัน นิดนะครับ เดี่ยวจะค่อยๆ เอามา อัพเพิ่ม ครับ
1. Video 1

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.