Friday, March 9, 2007

ทำความรู้จักกับ CGI หลักการทำงาน และสิ่งที่ควรทราบเบื้องต้น ก่อนเริ่มใช้งาน

ก่อนการเริ่มต้นศึกษาและใช้งาน CGI เรามาดูความหมายของคำสองคำ ที่มักจะพบเห็นกันบ่อย ๆ ก่อน นั่นคือคำว่า CGI กับ Perl ที่จริงแล้ว สองคำนี้ อาจจะเรียกได้ว่ามีความหมาย เหมือนหรือคล้าย ๆ กันก็ได้ แต่ลองทำความเข้าใจในเบื้องต้นกันก่อนครับ

Perl ย่อมาจาก Practical Extraction and Reporting Language เป็นภาษาหนึ่งที่ถูกบัญยัติขึ้นโดยนาย Larry Wall ในปี 1986 ซึ่งเริ่มใช้สำหรับเขียนโปรแกรมในระบบยูนิกส์ ก่อนที่จะถูกพัฒนา ให้ใช้กับระบบปฏิบัติการอื่น ๆ ได้ เช่น WindowsNT Perl เป็นโปรแกรมภาษาที่เขียนอยู่ในรูปของ สคริปต์ ( Scripts Langeage ) และเก็บอยู่ในรูปของเท็กซ์ไฟล์ จึงทำให้ การแก้ไข และการทำความเข้าใจ ได้ง่ายกว่า ภายในไฟล์โปรแกรมนั้น จะประกอบไปด้วย คำสั่งของ Perl ซึ่งลักษณะของคำสั่ง และรูปแบบ การเขียนนั้น จะคล้าย ๆ กับภาษาซี แต่มีรูปแบบ ที่ง่ายกว่า และมีความยืดหยุ่นภายในตัวภาษาเอง Perl ถูกออกแบบมา ให้รองรับกับ การเขียนโปรแกรมบนเว็บ ( Web programming ) ซึ่งใช้สำหรับสร้าง CGI ( Common Gateway Interface ) สำหรับจัดการข้อมูลให้กับ Web เช่น การกรอกแบบสอบถาม ( Form ) หรือ การสร้างเว็บเพจใหม่ ( Dynamic Webpage ) เป็นต้น

การนำเอา CGI มาใช้ในการช่วยเพิ่มลูกเล่นต่าง ๆ ให้กับเว็บไซต์

ถ้าหากท่านเป็นคนหนึ่ง ที่เคยทำ หรือกำลังคิดจะทำเว็บไซต์ ลองนึกภาพไฟล์ข้อมูลของเว็บเพจ จะสังเกตุได้ว่า ชื่อนามสกุล ของไฟล์ต่าง ๆ มักจะลงท้ายด้วย .htm หรือ .html เสมอ ซึ่งนั่นคือไฟล์ประเภท html แบบธรรมดา ที่จะประกอบด้วยข้อมูลของ ตัวอักษร รูปภาพ เท่านั้น การใช้งาน html ธรรมดาแบบนี้ เหมือนกับการที่เราเขียน หรือสร้างหน้ากระดาษ ขึ้นมาและนำไปเก็บไว้ บนพื้นที่ทำเว็บไซต์ เพื่อที่จะให้ผู้อื่น ได้เข้ามาอ่านเท่านั้น ท่านเขียนอย่างไร ผู้อ่านก็จะเห็นอย่างนั้นเสมอ ข้อมูลจะไม่มีการแก้ไข หรือเปลี่ยนแปลงได้เอง จนกว่าท่านจะทำการแก้ไข และอัพโหลดข้อมูลของ ไฟล์ใหม่ขึ้นไปแทนที่ไฟล์เดิมนั้น

ในกรณีของการนำเอา CGI มาใช้งาน จะช่วยเพิ่มความแปลกใหม่ต่าง ๆ ลงบนหน้าเว็บเพจได้ เช่นการทำตัวนับ ที่จะเพิ่มตัวเลข เมื่อมีผู้เข้าชมเว็บเพจนั้น ตัวเลขบอกจำนวน จะเปลี่ยนไปเรื่อย ๆ หรือยกตัวอย่าง การทำเป็น กระดานสนทนาหรือเว็บบอร์ด ก็จะช่วยให้ผู้เข้าชมเว็บไซต์ รู้สึกว่า ข้อมูลต่าง ๆ มีการอัพเดท เปลี่ยนแปลงได้อยู่เสมอ ๆ ทั้งนี้ ขึ้นอยู่กับโปรแกรมหรือสคริปต์ ต่าง ๆ ที่จะทำการติดตั้งใส่เข้าไป นอกจากนี้ หากเป็นการใช้งาน CGI จะสังเกตุได้ว่า นามสกุลของไฟล์ .htm หรือ .html นั้น จะถูกเปลี่ยนไปเป็น .cgi หรือ .pl แทนครับ หากเข้าไปพบเว็บไซต์ไหนที่มีชื่อนามสกุลไฟล์แบบนี้ ก็แสดงว่าเว็บไซต์นั้น ใช้ CGI หรือ Perl ในการช่วยสร้างเว็บไซต์ครับ

หลักการทำงานของ CGI แบบเข้าใจง่าย ๆ

สำหรับท่านใด ที่อ่านแล้วยังไม่ค่อยเข้าใจเรื่อง CGI มากนัก ผมขออธิบาย แบบง่ายที่สุดเลยครับ คือ แทนที่ท่านจะสร้างไฟล์ สำหรับข้อมูล เว็บเพจ เป็นแบบธรรมดาเช่น index.html และนำไปเก็บไว้บน server เพื่อให้ผู้ชมเข้ามาเรียกอ่าน ก็เปลี่ยนเป็นการเขียนสคริปต์ CGI นำไปเก็บไว้บน server แทน เช่นเป็น index.cgi โดยเมื่อมีการเรียกหรือใช้งาน สคริปต์ที่เขียนไว้นี้ โปรแกรม จะทำการสร้างไฟล์ที่มีรูปแบบของ .html ขึ้นมา (ตามที่เราเขียนสคริปต์ไว้แล้ว เช่นเหมือนกับ index.html ทุกอย่าง) และส่งออกไปให้กับผู้ชมเว็บไซต์ ที่เข้ามาอ่านแทน index.html ครับ และเนื่องจากความยืดหยุ่นของ การใช้โปรแกรม ก็จะทำให้เราสามารถกำหนด หรือใส่ลูกเล่นต่าง ๆ เข้าไปในหน้าเว็บ ได้มากกว่า HTML ธรรมดานั่นเอง

สิ่งจำเป็นพื้นฐานในการใช้งาน CGI เพื่อทำเว็บไซต์

ก่อนอื่น หากคิดจะสร้างเว็บไซต์ โดยการนำเอา CGI มาช่วยใช้งาน จะต้องเลือกพื้นที่สำหรับทำเว็บไซต์ ที่รองรับการทำงานของ CGI/Perl ได้ด้วย โดยส่วนมาก หากเป็นบริการพื้นที่สร้างเว็บแบบเสียเงิน มักจะมีให้บริการ CGI ได้อยู่แล้ว แต่ถ้าหากเป็นพื้นที่ฟรีต่าง ๆ ก็ต้องอ่านรายละเอียดด้วย ว่าสามารถใช้งาน CGI ได้หรือไม่ ยกตัวอย่างพื้นที่ฟรีสำหรับทำเว็บ ที่รองรับ CGI ได้คือ http://www.hypermart.net, http://www.f2s.com หรือ http://www.se-ed.net ครับ ที่จริงแล้วยังมีอีกหลายที่ ที่สามารถใช้งาน CGI ได้ เอาเป็นว่า ก่อนสมัครก็ลองดูรายละเอียดที่เขามีให้บริการกันก่อนนะครับ

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

การใช้ Editor สำหรับแก้ไขโปรแกรมหรือสคริปต์ สาเหตุเนื่องจาก CGI เป็นรูปแบบหนึ่งของระบบ UNIX ซึ่งแม้ว่า เราจะมองเห็นเป็น Text File เหมือน ๆ กับไฟล์ธรรมดาทั่วไป แต่ที่จริงแล้ว จะมีรหัสของตัวอักษรบางอย่าง ไม่เหมือนกันกับ ไฟล์ธรรมดาทั่วไป ดังนั้น เราจะไม่สามารถใช้ โปรแกรม Notepad ที่มีมากับ Windows ในการแก้ไข สคริปต์ เหล่านี้ได้ จะต้องใช้โปรแกรมที่ออกแบบมา สำหรับใช้งานโดยเฉพาะ ที่นิยมใช้กันมากคือ EditPlus ครับ สามารถหา ดาวน์โหลด มาใช้งานได้จาก http://www.editplus.com โดยที่ การใช้งานทั่ว ๆ ไปก็ไม่มีอะไรแตกต่างไปจาก Notepad มากนักครับ

กฏกติกา มารยาท ของการใช้งาน CGI เพื่อทำเว็บไซต์

สิ่งที่ควรทราบและต้องระลึกไว้อยู่เสมอ ในการใช้งาน CGI ครับ

1. CGI จะสามารถทำงานได้บน server ที่รองรับ CGI หรือ Perl เท่านั้น
2. การแก้ไขสคริปต์ ต้องใช้โปรแกรมเฉพาะเช่น EditPlus จะใช้ Notepad ไม่ได้
3. การอัพโหลดไฟล์สคริปต์ ต้องใช้โปรแกรมพวก FTP และใช้ ASCII Mode เท่านั้น
4. นามสกุลของสคริปต์ จะใช้เป็น .cgi หรือ .pl ก็ได้
5. ทดลอง ฝึกเขียนหรือแก้ไขบ่อย ๆ แล้วจะเกิดความชำนาญเองครับ

ในส่วนนี้ ขอแนะนำและทำความรู้จักกับ CGI หรือ Perl ในเบื้องต้นแต่เพียงเท่านี้ก่อนครับ อาจจะอ่านแล้วยังไม่ค่อยเข้าใจมากนัก แต่ถ้าหากได้ทดลองทำจริง ก็จะพอมองภาพออกได้ ไม่ยากนักหรอกครับ

หัวข้อเรื่องอื่นที่เกี่ยวข้อง

Monday, February 26, 2007

ติดตั้ง Chillispot server สำหรับ WIFI แบบ web login

  1. เนื่องจาก chillispot จะเป็น dhcp server เอง ดังนี้นจะต้องเช็คว่าในเครื่องไม่มี dhcp server รันอยู่ ถ้ามีอยู่ก็หยุดดังนี้
    service dhcpd stop

  2. แก้ไขแฟ้ม /etc/sysctl.conf ให้มีค่าดังตัวอย่างนี้
    บรรทัดที่ 7 เดิม net.ipv4.ip_forward = 0
    แก้ไขเป็น net.ipv4.ip_forward = 1

  3. รันคำสั่ง echo "1" > /proc/sys/net/ipv4/ip_forward
    เพื่อให้มีผลทันที ให้ forward packet ทำตัวเป็นเราเตอร์ได้

  4. แก้ไขแฟ้ม /etc/sysconfig/network-scripts/ifcfg-eth1 ให้มีค่าดังตัวอย่างนี้
    DEVICE=eth1
    BOOTPROTO=none
    ONBOOT=yes
    TYPE=Ethernet
    DHCP_HOSTNAME=kthakon.radius.com


  5. แก้ไขแฟ้ม /etc/raddb/clients.conf ของโปรแกรม freeradius ให้มีค่าดังตัวอย่างนี้
    client 10.114.0.0/24 {
    ...
    บรรทัดที่ 35 เดิม secret = testing123
    แก้ไขเป็น secret = testing
    ...
    }

  6. รีสตาร์ท radiusd ใหม่ ด้วยคำสั่ง
    service radiusd restar
  7. ดาวน์โหลดโปรแกรม chillispot และติดตั้งผ่าน browser ด้วยการคลิกที่ลิงค์นี้
    ftp://ftp.psu.ac.th/pub/chillispot/chillispot-1.1.0.i386.rpm
    หรือ
    ดาวน์โหลดด้วยคำสั่ง wget ดังนี้
    wget ftp://ftp.psu.ac.th/pub/chillispot/chillispot-1.1.0.i386.rpm
    แล้วติดตั้ง package rpm ด้วยคำสั่งดังนี้
    rpm -Uvh chillispot-1.1.0.i386.rpm

  8. แฟ้มที่เกี่ยวข้อง
    • /etc/chilli.conf
    • /var/www/cgi-bin/hotspotlogin.cgi
    • /var/www/html/welcome.html
    • /etc/firewall.iptables
  9. แก้ไขแฟ้ม /etc/chilli.conf ให้มีค่าดังตัวอย่างนี้
    [หัวข้อ TUN parameters]
    บรรทัดที่ 38 เดิม net 192.168.182.0/24
    แก้ไขเป็น net 10.114.0.0/24

    [หัวข้อ Radius parameters]
    บรรทัดที่ 113 เดิม radiusserver1 rad01.chillispot.org
    แก้ไขเป็น radiusserver1 10.114.0.2

    บรรทัดที่ 120 เดิม radiusserver2 rad02.chillispot.org
    แก้ไขเป็น radiusserver2 10.114.0.2

    บรรทัดที่ 139 เดิม #radiussecret testing123
    แก้ไขเป็น radiussecret testing
    (ตรงกับ radius secret ในแฟ้ม /etc/raddb/clients.conf ของ freeradius)

    [หัวข้อ Universal access method (UAM) parameters]
    บรรทัดที่ 237 เดิม #uamserver https://radius.chillispot.org/hotspotlogin
    แก้ไขเป็น uamserver https://10.114.0.1/cgi-bin/hotspotlogin.cgi

    บรรทัดที่ 244 เดิม #uamhomepage http://192.168.182.1/welcome.html
    แก้ไขเป็น uamhomepage http://10.114.0.1/welcome.html

    บรรทัดที่ 248 เดิม #uamsecret ht2eb8ej6s4et3rg1ulp
    แก้ไขโดยให้เอาเครื่องหมาย# ออก เป็น uamsecret secretshilli
    (หรือแก้ไขเป็นรหัสใหม่ แต่ต้องเหมือนกับในแฟ้ม hotspotlogin.cgi ในข้อถัดไป)

    บรรทัดที่ 253 เดิม #uamlisten 192.168.182.1
    แก้ไขเป็น uamlisten 10.114.0.1

  10. ให้คัดลอกแฟ้ม firewall.iptables ด้วยคำสั่ง
    cp /usr/share/doc/chillispot-1.1.0/firewall.iptables /etc

  11. ให้คัดลอกแฟ้ม hotspotlogin.cgi ด้วยคำสั่ง
    cp /usr/share/doc/chillispot-1.1.0/hotspotlogin.cgi /var/www/cgi-bin/

  12. แก้ไขแฟ้ม /var/www/cgi-bin/hotspotlogin.cgi ให้มีค่าดังตัวอย่างนี้
    บรรทัดที่ 27 เดิม #$uamsecret = "ht2eb8ej6s4et3rg1ulp";
    แก้ไขโดยให้เอาเครื่องหมาย# ออก เป็น $uamsecret = "secretchilli";

    บรรทัดที่ 31 เดิม #$userpassword=1;
    แก้ไขโดยให้เอาเครื่องหมาย# ออก เป็น $userpassword=1;

  13. สร้างแฟ้ม /var/www/html/welcome.html ให้มีค่าดังตัวอย่างนีo Our Hotspot, Wireless Network.

    save เป็น code html นะครับอย่าลืม !

    TESTING ONLY



    Welcome to Our Hotspot, Wireless Network.


    You are connected to an authentication and restricted network access point.

    Click here to login



    Enjoy.

    Welcome to Our Hotspot, Wireless Network.
    ถ้าต้องการรูป chillispot.png ให้ดาวน์โหลดได้จาก ที่นี่ แล้วคัดลอกแฟ้มนี้ไปไว้ใน /var/www/html ด้วยคำสั่งดังนี้
    wget http://mamboeasy.psu.ac.th/~wiboon.w/images/stories/chillispot/chillispot.png
    cp chillispot.png /var/www/html

  14. ก่อนที่จะสตาร์ท chillispot ให้ไปทำการคอนฟิกแอคเซสพอยน์/ไวร์เลสเราเตอร์ ให้พร้อมใช้งาน โดยทำตามเอกสารของแต่ละรุ่น ความต้องการคือ ให้ทำ factory defaults แล้วกำหนดให้มันจะต้องรับ dhcp ip จาก chillispot และตัวมันเองจะต้องไม่ทำหน้าที่แจก ip รวมทั้งแก้ไข ESSID ตั้งชื่อใหม่ด้วย ตามเอกสารของพี่ wiboon
  15. สั่งให้ firewall.iptables ทำงานด้วยคำสั่งว่า
    sh /etc/firewall.iptables

  16. สั่งให้ chillispot ทำงานด้วยคำสั่งว่า
    service chilli start
    Starting chilli: [ OK ]
  17. ดุ IP
  18. [root@kthakon src]# ifconfig
    eth0 Link encap:Ethernet HWaddr 00:0D:61:E1:FB:28
    inet addr:10.114.0.2 Bcast:10.114.255.255 Mask:255.255.0.0
    inet6 addr: fe80::20d:61ff:fee1:fb28/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:12804 errors:0 dropped:0 overruns:0 frame:0
    TX packets:3548 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:4090246 (3.9 MiB) TX bytes:459774 (448.9 KiB)
    Interrupt:11 Base address:0xe000

    eth1 Link encap:Ethernet HWaddr 00:04:E2:D3:23:01
    inet6 addr: fe80::204:e2ff:fed3:2301/64 Scope:Link
    UP BROADCAST MTU:1500 Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:5 dropped:0 overruns:0 carrier:10
    collisions:0 txqueuelen:1000
    RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
    Interrupt:10 Base address:0x4000

    lo Link encap:Local Loopback
    inet addr:127.0.0.1 Mask:255.0.0.0
    inet6 addr: ::1/128 Scope:Host
    UP LOOPBACK RUNNING MTU:16436 Metric:1
    RX packets:3223 errors:0 dropped:0 overruns:0 frame:0
    TX packets:3223 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:3202251 (3.0 MiB) TX bytes:3202251 (3.0 MiB)

    tun0 Link encap:UNSPEC HWaddr E9-FE-3B-13-18-00-F4-3F-00-00-00-00-00-00-00-00
    inet addr:10.114.0.1 P-t-P:10.114.0.1 Mask:255.255.255.0
    UP POINTOPOINT RUNNING MTU:1500 Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:10
    RX bytes:0 (0.0 b) TX bytes:517 (517.0 b)

    [root@kthakon src]#

  19. เ นื่องจาก chillispot ต้องใช้พอร์ท 1812 และ 1813 ในการหน้าที่เป็น proxy radius จึงต้องแก้ให้ radius server คอยรับ request ที่พอร์ทหมายเลข 1645 และ 1646 แทน
    ให้แก้ไขแฟ้ม /etc/raddb/radiusd.conf
    บรรทัดที่ 207 แก้ port = 0 เป็น port = 1645

  20. เมื่อแก้ไขเสร็จแล้วให้รีสตาร์ทใหม่ด้วยคำสั่ง
    service radiusd restart
    ลองทดสอบด้วยคำสั่งตัวอย่าง
    radtest user1 wunca16 10.0.1.1:1645 0 mytestkey
    จะมีการแจ้งว่า Access-Accept ถูกต้องตามต้องการ

  21. แก้ไขแฟ้ม /etc/chilli.conf ให้มีค่าดังตัวอย่างนี้

    [หัวข้อ Radius parameters]
    บรรทัดที่ 127 เดิม #radiusauthport 1812
    แก้ไขเป็น radiusauthport 1645
    บรรทัดที่ 134 เดิม #radiusacctport 1813
    แก้ไขเป็น radiusacctport 1646
    บรรทัดที่ 139 ตรวจสอบว่าเป็น radiussecret mytestkey
    (ตรงกับ radius secret ในแฟ้ม /etc/raddb/clients.conf ของ freeradius)

    [หัวข้อ Radius proxy parameters]
    บรรทัดที่ 174 เดิม #proxylisten 10.0.0.1
    แก้ไขเป็น proxylisten 10.114.0.1
    บรรทัดที่ 180 เดิม #proxyport 1645
    แก้ไขเป็น proxyport 1812
    บรรทัดที่ 185 เดิม #proxyclient 10.114.0.0/24
    แก้ไขเป็น proxyclient 10.0.1.0/24
    บรรทัดที่ 191 เดิม #proxysecret testing123
    แก้ไขเป็น proxysecret testing

  22. แก้ไขแฟ้ม /etc/firewall.iptables
    ไปที่บรรทัดที่ 33 จะมีบรรทัดเดิมคือ
    $IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    เพิ่มใต้บรรทัดที่ 33 ดังตัวอย่างนี้
    $IPTABLES -A INPUT -i tun0 -p udp -m udp --dport 1812 -j ACCEPT
    และสั่งรันไฟร์วอลล์ใหม่
    sh /etc/firewall.iptables

  23. สั่งให้ chillispot อ่านแฟ้มคอนฟิกใหม่ด้วยคำสั่งว่า
    service chilli reload

  24. แก้ไข file /etc/firewall.iptables ดังนี้้
  25. #!/bin/sh
    #
    # Firewall script for ChilliSpot
    # A Wireless LAN Access Point Controller
    #
    # Uses $EXTIF (eth0) as the external interface (Internet or intranet) and
    # $INTIF (eth1) as the internal interface (access points).
    #
    #
    # SUMMARY
    # * All connections originating from chilli are allowed.
    # * Only ssh is allowed in on external interface.
    # * Nothing is allowed in on internal interface.
    # * Forwarding is allowed to and from the external interface, but disallowed
    # to and from the internal interface.
    # * NAT is enabled on the external interface.

    IPTABLES="/sbin/iptables"
    EXTIF="ppp0"
    INTIF="eth1"

    #Flush all rules
    $IPTABLES -F
    $IPTABLES -F -t nat
    $IPTABLES -F -t mangle

    #Set default behaviour
    $IPTABLES -P INPUT DROP
    $IPTABLES -P FORWARD ACCEPT
    $IPTABLES -P OUTPUT ACCEPT

    #Allow related and established on all interfaces (input)
    $IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    #Allow releated, established and ssh on $EXTIF. Reject everything else.
    $IPTABLES -A INPUT -i $EXTIF -p tcp -m tcp --dport 22 --syn -j ACCEPT
    $IPTABLES -A INPUT -i $EXTIF -j REJECT

    #Allow related and established from $INTIF. Drop everything else.
    $IPTABLES -A INPUT -i $INTIF -j DROP

    #Allow http and https on other interfaces (input).
    #This is only needed if authentication server is on same server as chilli
    $IPTABLES -A INPUT -p tcp -m tcp --dport 80 --syn -j ACCEPT
    $IPTABLES -A INPUT -p tcp -m tcp --dport 443 --syn -j ACCEPT
    $IPTABLES -A INPUT -i tun0 -p udp -m udp --dport 1812 -j ACCEPT

    #Allow 3990 on other interfaces (input).
    $IPTABLES -A INPUT -p tcp -m tcp --dport 3990 --syn -j ACCEPT


    #Allow ICMP echo on other interfaces (input).
    $IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

    #Allow everything on loopback interface.
    $IPTABLES -A INPUT -i lo -j ACCEPT

    # Drop everything to and from $INTIF (forward)
    # This means that access points can only be managed from ChilliSpot
    $IPTABLES -A FORWARD -i $INTIF -j DROP
    $IPTABLES -A FORWARD -o $INTIF -j DROP

    #Enable NAT on output device
    $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

    $IPTABLES -t nat -A PREROUTING -s 10.114.0.0/24 -p udp --dport 53 -j DNAT --to 10.114.0.1

********* THE END *************************

Sunday, February 25, 2007

Setup httpd-2.0.53 + Openssl-0.9.7g+php-5.0.4

1. Download file

เข้าไปที่ Directory ของ Program ที่เราเก็บไว้

cd /usr/local/src

หรือ Download จาก website โดยใช้ Command mod on Linux

wget http://www.openssl.org/source/openssl-0.9.7g.tar.gz
wget http://ftp.plusline.de/ftp.apache.org/httpd/httpd-2.0.53.tar.gz


2 Install Openssl

tar xvfz openssl-0.9.7g.tar.gz

cd openssl-0.9.7g

./config

make

make install


3 Configure And Install Apache2

cd /usr/local/src

tar xvfz httpd-2.0.53.tar.gz

cd httpd-2.0.53/

./configure --enable-ssl --with-ssl=/usr/local/ssl/ --enable-suexec --with-suexec-docroot=/usr/local --enable-cgi --enable-rewrite --enable-so --enable-logio --prefix=/usr/local/apache --enable-module=most --enable-shared=max --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc/httpd

ในบรรทัดเดี่ยวกัน

make

make install


mkdir /etc/httpd/ssl.crt

openssl genrsa -des3 -passout pass:asecretpassword -out /etc/httpd/ssl.crt/server.key.org 1024

openssl req -new -passin pass:asecretpassword -passout pass:asecretpassword -key /etc/httpd/ssl.crt/server.key.org -out /etc/httpd/ssl.crt/server.csr -days 3650


openssl req -x509 -passin pass:asecretpassword -passout pass:asecretpassword -key /etc/httpd/ssl.crt/server.key.org -in /etc/httpd/ssl.crt/server.csr -out /etc/httpd/ssl.crt/server.crt -days 3650

openssl rsa -passin pass:asecretpassword -in /etc/httpd/ssl.crt/server.key.org -out /etc/httpd/ssl.crt/server.key

mkdir /etc/httpd/ssl.key

mv /etc/httpd/ssl.crt/server.key /etc/httpd/ssl.key/server.key

chmod 400 /etc/httpd/ssl.key/server.key



4 Install PHP5

cd /usr/local/src

tar xvfz php-5.0.4.tar.gz

./configure --with-apxs2=/usr/sbin/apxs --with-mysql=/var/lib/mysql --enable-track-vars --enable-sockets --with-config-file-path=/etc --enable-ftp --with-zlib --with-openssl=/usr/local/ssl --enable-force-cgi-redirect --enable-exif --with-gd --enable-memory-limit --disable-debug --disable-rpath --disable-static --with-pic --with-layout=GNU --enable-calendar --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-trans-sid --enable-bcmath --with-bz2 --enable-ctype --with-db4 --with-iconv --enable-filepro --with-gettext --enable-mbstring --enable-shmop --enable-wddx --disable-xml --with-xmlrpc --enable-yp --with-zlib --without-pgsql --enable-dbx --enable-experimental-zts --without-mm --enable-gd-native-ttf --with-imap-ssl --enable-soap --enable-dbase

ในบรรทัดเดี่ยว


make

make install


cp /tmp/php-5.0.4/php.ini-dist /etc/php.ini



5 Configure Apache

# gedit /etc/httpd/httpd.conf

AddHandler cgi-script .cgi
AddHandler cgi-script .pl
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
AddType application/x-httpd-php .php .php5 .php4 .php3


Create /etc/init.d/httpd:

#!/bin/sh

case "$1" in
start)
/usr/sbin/apachectl startssl
;;
stop)
/usr/sbin/apachectl stop
;;
restart)
$0 stop && sleep 3
$0 start
;;
reload)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {startstoprestartreload}"
exit 1
esac


chmod 755 /etc/init.d/httpd

start your Apache at boot time do the following:

ln -s /etc/init.d/httpd /etc/rc2.d/S20httpd
ln -s /etc/init.d/httpd /etc/rc3.d/S20httpd
ln -s /etc/init.d/httpd /etc/rc4.d/S20httpd
ln -s /etc/init.d/httpd /etc/rc5.d/S20httpd
ln -s /etc/init.d/httpd /etc/rc0.d/K20httpd
ln -s /etc/init.d/httpd /etc/rc1.d/K20httpd
ln -s /etc/init.d/httpd /etc/rc6.d/K20httpd


/etc/init.d/httpd start



6 Test Your Configuration

netstat -tap

should show you that Apache2 uses the ports 80 (http) and 443 (https).

Now go to /usr/local/apache/htdocs and create a file called info.php with the following contents:





7 Install Zend Optimizer And IonCube Loader


IonCube Loader

Get the latest version of the ionCube Loader from http://downloads.ioncube.com/loader_downloads.

cd /usr/loca/src

wget http://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz

tar xvfz ioncube_loaders_lin_x86.tar.gz

cd ioncube/

mkdir /usr/local/lib/ioncube

mv ioncube_loader_lin_5.0.so /usr/local/lib/ioncube/

Now edit /etc/php.ini and add the line

zend_extension=/usr/local/lib/ioncube/ioncube_loader_lin_5.0.so right at the beginning:

[PHP]
zend_extension=/usr/local/lib/ioncube/ioncube_loader_lin_5.0.so



Zend Optimizer


cd /usr/local/src

tar xvfz ZendOptimizer-2.5.7-linux-glibc21-i386.tar.gz

cd ZendOptimizer-2.5.7-linux-glibc21-i386/data/5_0_x_comp/

mkdir /usr/local/lib/Zend

mv ZendOptimizer.so /usr/local/lib/Zend/

Edit /etc/php.ini and add two more lines to the [PHP] section of the file at the beginning so that it looks like this:



[PHP]
zend_extension=/usr/local/lib/ioncube/ioncube_loader_lin_5.0.so
zend_extension=/usr/local/lib/Zend/ZendOptimizer.so
zend_optimizer.optimization_level=15

Now restart Apache2:

/etc/init.d/httpd restart

cp /usr/local/src/php-5.0.4/libs/libphp5.so /usr/lib/httpd/modules/
edit /etc/httpd/conf/httpd.conf
delete the line:
LoadModule php5_module /usr/lib/httpd/modules/libphp5.so

/etc/init.d/httpd restart
test https://10.114.0.2/info.php

*********** THE END *****************

Monday, February 12, 2007

PHP Read File

PHP อ่าน File จะสั้นหน่อยนะครับ ได้ใช้งานได้ดีเลย

ใส่ เครื่องหมายเปิด code php ด้วยนะ < ? php

$lines = file('radius.txt');
ชื่อ file ที่จะอ่านนะครับ บม
$l_count = count($lines);
$str = "User-Name";
for($x = 0; $x< $l_count; $x++)
{
echo $lines[$x] ."
\n";

}
?> นี้ก็ปิด OK !

******************* The End ********************

๋JAVA Read Write File Form Process

Java ใช้ในการเขียน file และ อ่าน file นะครับ

import java.io.*;


class Test {
static public void main(String[] args) throws Exception {
System.out.println("Go radiusd -X...");
Runtime rt = Runtime.getRuntime();

Process ps = rt.exec("radiusd -X");
BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
FileOutputStream fos = new FileOutputStream("radius.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
FileOutputStream fof = new FileOutputStream("file.txt");
ObjectOutputStream oof = new ObjectOutputStream(fof);
String line = null;
int count = 0;

while (true) {
line= br.readLine();
if (line == null) break;

count++;
oos.writeUTF(count+ " " +line + "\n");
System.out.println(line);
String st = new String(line);

}
}
}

ขอขอบคุณ จุ่ย ที่ช่วยแนะนำ

************* The End *********************

Radius Attributes Supports

ChilliSpot supports the following radius attributes

Comment เกี่ยวกับรายละเอียดไปอ่านที่ web http://chillispot.org/features.html

Connection Terminating from RADIUS

Submenu level: /radius incoming

Description

This facility supports unsolicited messages sent from RADIUS server. Unsolicited messages extend RADIUS protocol commands, that allow to terminate a session which has already been connected from RADIUS server. For this purpose DM (Disconnect-Messages) are used. Disconnect messages cause a user session to be terminated immediately

Property Description

accept (yes | no; default: no) - Whether to accept the unsolicited messagesport (integer; default: 1700) - The port number to listen for the requests on

Notes

RouterOS doesn't support POD (Packet of Disconnect) the other RADIUS access request packet that performs a similar function as Disconnect Messages

Suggested RADIUS Servers

Description

MikroTik RouterOS RADIUS Client should work well with all RFC compliant servers. It has been tested with:

Supported RADIUS Attributes

Description

MikroTik RADIUS Dictionaries

Here you can download MikroTik reference dictionary, which incorporates all the needed RADIUS attributes. This dictionary is the minimal dictionary, which is enough to support all features of MikroTik RouterOS. It is designed for FreeRADIUS, but may also be used with many other UNIX RADIUS servers (eg. XTRadius).

Note that it may conflict with the default configuration files of RADIUS server, which have references to the Attributes, absent in this dictionary. Please correct the configuration files, not the dictionary, as no other Attributes are supported by MikroTik RouterOS.

There is also dictionary.mikrotik that can be included in an existing dictionary to support MikroTik vendor-specific Attributes.

Definitions
  • PPPs - PPP, PPTP, PPPoE and ISDN
  • default configuration - settings in default profile (for PPPs) or HotSpot server settings (for HotSpot)
Access-Request
  • Service-Type - always is "Framed" (only for PPPs)
  • Framed-Protocol - always is "PPP" (only for PPPs)
  • NAS-Identifier - router identity
  • NAS-IP-Address - IP address of the router itself
  • NAS-Port - unique session ID
  • Acct-Session-Id - unique session ID
  • NAS-Port-Type - async PPP - "Async"; PPTP and L2TP - "Virtual"; PPPoE - "Ethernet"; ISDN - "ISDN Sync"; HotSpot - "Ethernet | Cable | Wireless-802.11" (according to the value of nas-port-type parameter in /ip hotspot profile
  • Calling-Station-Id - PPPoE and HotSpot- client MAC address in capital letters; PPTP and L2TP - client public IP address; ISDN - client MSN
  • Called-Station-Id - PPPoE - service name; PPTP and L2TP - server IP address; ISDN - interface MSN; HotSpot - name of the HotSpot server
  • NAS-Port-Id - async PPP - serial port name; PPPoE - ethernet interface name on which server is running; HotSpot - name of the physical HotSpot interface (if bridged, the bridge port name is showed here); not present for ISDN, PPTP and L2TP
  • Framed-IP-Address - IP address of HotSpot client after Universal Client translation
  • Mikrotik-Host-IP - IP address of HotSpot client before Universal Client translation (the original IP address of the client)
  • User-Name - client login name
  • MS-CHAP-Domain - User domain, if present
  • Mikrotik-Realm - If it is set in /radius menu, it is included in every RADIUS request as Mikrotik-Realm attribute. If it is not set, the same value is sent as in MS-CHAP-Domain attribute (if MS-CHAP-Domain is missing, Realm is not included neither)
  • WISPr-Location-ID - text string specified in radius-location-id property of the HotSpot server
  • WISPr-Location-Name - text string specified in radius-location-name property of the HotSpot server
  • WISPr-Logoff-URL - full link to the login page (for example, http://10.48.0.1/lv/logout)

Depending on authentication methods (NOTE: HotSpot uses CHAP by default and may use also PAP if unencrypted passwords are enabled, it can not use MSCHAP):

  • User-Password - encrypted password (used with PAP authentication)
  • CHAP-Password, CHAP-Challenge - encrypted password and challenge (used with CHAP authentication)
  • MS-CHAP-Response, MS-CHAP-Challenge - encrypted password and challenge (used with MS-CHAPv1 authentication)
  • MS-CHAP2-Response, MS-CHAP-Challenge - encrypted password and challenge (used with MS-CHAPv2 authentication)
Access-Accept
  • Framed-IP-Address - IP address given to client. If address belongs to 127.0.0.0/8 or 224.0.0.0/3 networks, IP pool is used from the default profile to allocate client IP address. If Framed-IP-Address is specified, Framed-Pool is ignored
  • Framed-IP-Netmask - client netmask. PPPs - if specified, a route will be created to the network Framed-IP-Address belongs to via the Framed-IP-Address gateway; HotSpot - ignored by HotSpot
  • Framed-Pool - IP pool name (on the router) from which to get IP address for the client. If Framed-IP-Address is specified, this attribute is ignored

NOTE: if Framed-IP-Address or Framed-Pool is specified it overrides remote-address in default configuration

  • Idle-Timeout - overrides idle-timeout in the default configuration
  • Session-Timeout - overrides session-timeout in the default configuration
  • Port-Limit - maximal mumber of simultaneous connections using the same username (overrides te shared-users property of the HotSpot user profile)
  • Class - cookie, will be included in Accounting-Request unchanged
  • Framed-Route - routes to add on the server. Format is specified in RFC2865 (Ch. 5.22), can be specified as many times as needed
  • Filter-Id - firewall filter chain name. It is used to make a dynamic firewall rule. Firewall chain name can have suffix .in or .out, that will install rule only for incoming or outgoing traffic. Multiple Filter-id can be provided, but only last ones for incoming and outgoing is used. For PPPs - filter rules in ppp chain that will jump to the specified chain, if a packet has come to/from the client (that means that you should first create a ppp chain and make jump rules that would put actual traffic to this chain). The same applies for HotSpot, but the rules will be created in hotspot chain
  • Mikrotik-Mark-Id - firewall mangle chain name (HotSpot only). The MikroTik RADIUS client upon receiving this attribute creates a dynamic firewall mangle rule with action=jump chain=hotspot and jump-target equal to the atribute value. Mangle chain name can have suffixes .in or .out, that will install rule only for incoming or outgoing traffic. Multiple Mark-id attributes can be provided, but only last ones for incoming and outgoing is used.
  • Acct-Interim-Interval - interim-update for RADIUS client. PPP - if 0 uses the one specified in RADIUS client; HotSpot - only respected if radius-interim-update=received in HotSpot server profile
  • MS-MPPE-Encryption-Policy - require-encryption property (PPPs only)
  • MS-MPPE-Encryption-Types - use-encryption property, non-zero value means to use encryption (PPPs only)
  • Ascend-Data-Rate - tx/rx data rate limitation if multiple attributes are provided, first limits tx data rate, second - rx data rate. If used together with Ascend-Xmit-Rate, specifies rx rate. 0 if unlimited. Ignored if Rate-Limit attribute is present
  • Ascend-Xmit-Rate - tx data rate limitation. It may be used to specify tx limit only instead of sending two sequental Ascend-Data-Rate attributes (in that case Ascend-Data-Rate will specify the receive rate). 0 if unlimited. Ignored if Rate-Limit attribute is present
  • MS-CHAP2-Success - auth. response if MS-CHAPv2 was used (for PPPs only)
  • MS-MPPE-Send-Key, MS-MPPE-Recv-Key - encryption keys for encrypted PPPs provided by RADIUS server only is MS-CHAPv2 was used as authentication (for PPPs only)
  • Ascend-Client-Gateway - client gateway for DHCP-pool HotSpot login method (HotSpot only)
  • Mikrotik-Recv-Limit - total receive limit in bytes for the client
  • Mikrotik-Recv-Limit-Gigawords - 4G (2^32) bytes of total receive limit (bits 32..63, when bits 0..31 are delivered in Mikrotik-Recv-Limit)
  • Mikrotik-Xmit-Limit - total transmit limit in bytes for the client
  • Mikrotik-Xmit-Limit-Gigawords - 4G (2^32) bytes of total transmit limit (bits 32..63, when bits 0..31 are delivered in Mikrotik-Recv-Limit)
  • Mikrotik-Wireless-Forward - not forward the client's frames back to the wireless infrastructure if this attribute is set to "0" (Wireless only)
  • Mikrotik-Wireless-Skip-Dot1x - disable 802.1x authentication for the particulat wireless client if set to non-zero value (Wireless only)
  • Mikrotik-Wireless-Enc-Algo - WEP encryption algorithm: 0 - no encryption, 1 - 40-bit WEP, 2 - 104-bit WEP (Wireless only)
  • Mikrotik-Wireless-Enc-Key - WEP encruption key for the client (Wireless only)
  • Mikrotik-Rate-Limit - Datarate limitation for clients. Format is: rx-rate[/tx-rate] [rx-burst-rate[/tx-burst-rate] [rx-burst-threshold[/tx-burst-threshold] [rx-burst-time[/tx-burst-time] [priority] [rx-rate-min[/tx-rate-min]]]] from the point of view of the router (so "rx" is client upload, and "tx" is client download). All rates should be numbers with optional 'k' (1,000s) or 'M' (1,000,000s). If tx-rate is not specified, rx-rate is as tx-rate too. Same goes for tx-burst-rate and tx-burst-threshold and tx-burst-time. If both rx-burst-threshold and tx-burst-threshold are not specified (but burst-rate is specified), rx-rate and tx-rate is used as burst thresholds. If both rx-burst-time and tx-burst-time are not specified, 1s is used as default. Priority takes values 1..8, where 1 implies the highest priority, but 8 - the lowest. If rx-rate-min and tx-rate-min are not specified rx-rate and tx-rate values are used. The rx-rate-min and tx-rate-min values can not exceed rx-rate and tx-rate values.
  • Mikrotik-Group - Router local user group name (defines in /user group) for local users. HotSpot default profile for HotSpot users.
  • Mikrotik-Advertise-URL - URL of the page with advertisements that should be displayed to clients. If this attribute is specified, advertisements are enabled automatically, including transparent proxy, even if they were explicitly disabled in the corresponding user profile. Multiple attribute instances may be send by RADIUS server to specify additional URLs which are choosen in round robin fashion.
  • Mikrotik-Advertise-Interval - Time interval between two adjacent advertisements. Multiple attribute instances may be send by RADIUS server to specify additional intervals. All interval values are threated as a list and are taken one-by-one for each successful advertisement. If end of list is reached, the last value is continued to be used.
  • WISPr-Redirection-URL - URL, which the clients will be redirected to after successfull login
  • WISPr-Bandwidth-Min-Up - minimal datarate (CIR) provided for the client upload
  • WISPr-Bandwidth-Min-Down - minimal datarate (CIR) provided for the client download
  • WISPr-Bandwidth-Max-Up - maxmal datarate (MIR) provided for the client upload
  • WISPr-Bandwidth-Max-Down - maxmal datarate (MIR) provided for the client download
  • WISPr-Session-Terminate-Time - time, when the user should be disconnected; in "YYYY-MM-DDThh:mm:ssTZD" form, where Y - year; M - month; D - day; T - either "A" for AM, or "P" for PM; h - hour; m - minute; s - second; TZD - time zone in one of these forms: "+hh:mm", "+hhmm", "-hh:mm", "-hhmm"

Note that the received attributes override the default ones (set in the default profile), but if an attribute is not received from RADIUS server, the default one is to be used.

Rate-Limit takes precedence over all other ways to specify data rate for the client. Ascend data rate attributes are considered second; and WISPr attributes takes the last precedence.

Here are some Rate-Limit examples:

  • 128k - rx-rate=128000, tx-rate=128000 (no bursts)
  • 64k/128M - rx-rate=64000, tx-rate=128000000
  • 64k 256k - rx/tx-rate=64000, rx/tx-burst-rate=256000, rx/tx-burst-threshold=64000, rx/tx-burst-time=1s
  • 64k/64k 256k/256k 128k/128k 10/10 - rx/tx-rate=64000, rx/tx-burst-rate=256000, rx/tx-burst-threshold=128000, rx/tx-burst-time=10s
Accounting-Request

The accounting request carries the same attributes as Access Request, plus these ones:

  • Acct-Status-Type - Start, Stop, or Interim-Update
  • Acct-Authentic - either authenticated by the RADIUS or Local authority (PPPs only)
  • Class - RADIUS server cookie, as received in Access-Accept
  • Acct-Delay-Time - how long does the router try to send this Accounting-Request packet
Stop and Interim-Update Accounting-Request

Additionally to the accounting start request, the following messages will contain the following attributes:

  • Acct-Session-Time - connection uptime in seconds
  • Acct-Input-Octets - bytes received from the client
  • Acct-Input-Gigawords - 4G (2^32) bytes received from the client (bits 32..63, when bits 0..31 are delivered in Acct-Input-Octets)
  • Acct-Input-Packets - nubmer of packets received from the client
  • Acct-Output-Octets - bytes sent to the client
  • Acct-Output-Gigawords - 4G (2^32) bytes sent to the client (bits 32..63, when bits 0..31 are delivered in Acct-Output-Octets)
  • Acct-Output-Packets - number of packets sent to the client
Stop Accounting-Request

These packets will, additionally to the Interim Update packets, have:

  • Acct-Terminate-Cause - session termination cause (see RFC2866 ch. 5.10)
Change of Authorization

RADIUS disconnect and Change of Authorization (according to RFC3576) are supported as well. These attributes may be changed by a CoA request from the RADIUS server:

  • Mikrotik-Group
  • Mikrotik-Recv-Limit
  • Mikrotik-Xmit-Limit
  • Mikrotik-Rate-Limit
  • Ascend-Data-Rate (only if Mikrotik-Rate-Limit is not present)
  • Ascend-XMit-Rate (only if Mikrotik-Rate-Limit is not present)
  • Mikrotik-Mark-Id
  • Filter-Id
  • Mikrotik-Advertise-Url
  • Mikrotik-Advertise-Interval
  • Session-Timeout
  • Idle-Timeout
  • Port-Limit

Note that it is not possible to change IP address, pool or routes that way - for such changes a user must be disconnected first.

Attribute Numeric Values
Name VendorID Value RFC where it is defined
Acct-Authentic
45 RFC2866
Acct-Delay-Time
41 RFC2866
Acct-Input-Gigawords
52 RFC2869
Acct-Input-Octets
42 RFC2866
Acct-Input-Packets
47 RFC2866
Acct-Interim-Interval
85 RFC2869
Acct-Output-Gigawords
53 RFC2869
Acct-Output-Octets
43 RFC2866
Acct-Output-Packets
48 RFC2866
Acct-Session-Id
44 RFC2866
Acct-Session-Time
46 RFC2866
Acct-Status-Type
40 RFC2866
Acct-Terminate-Cause
49 RFC2866
Ascend-Client-Gateway 529 132
Ascend-Data-Rate 529 197
Ascend-Xmit-Rate 529 255
Called-Station-Id
30 RFC2865
Calling-Station-Id
31 RFC2865
CHAP-Challenge
60 RFC2866
CHAP-Password
3 RFC2865
Class
25 RFC2865
Filter-Id
11 RFC2865
Framed-IP-Address
8 RFC2865
Framed-IP-Netmask
9 RFC2865
Framed-Pool
88 RFC2869
Framed-Protocol
7 RFC2865
Framed-Route
22 RFC2865
Idle-Timeout
28 RFC2865
Mikrotik-Advertise-Interval 14988 13
Mikrotik-Advertise-URL 14988 12
Mikrotik-Group 14988 3
Mikrotik-Host-IP 14988 10
Mikrotik-Mark-Id 14988 11
Mikrotik-Rate-Limit 14988 8
Mikrotik-Realm 14988 9
Mikrotik-Recv-Limit 14988 1
Mikrotik-Recv-Limit-Gigawords 14988 14
Mikrotik-Wireless-Enc-Algo 14988 6
Mikrotik-Wireless-Enc-Key 14988 7
Mikrotik-Wireless-Forward 14988 4
Mikrotik-Wireless-Skip-Dot1x 14988 5
Mikrotik-Xmit-Limit 14988 2
Mikrotik-Xmit-Limit-Gigawords 14988 15
MS-CHAP-Challenge 311 11 RFC2548
MS-CHAP-Domain 311 10 RFC2548
MS-CHAP-Response 311 1 RFC2548
MS-CHAP2-Response 311 25 RFC2548
MS-CHAP2-Success 311 26 RFC2548
MS-MPPE-Encryption-Policy 311 7 RFC2548
MS-MPPE-Encryption-Types 311 8 RFC2548
MS-MPPE-Recv-Key 311 17 RFC2548
MS-MPPE-Send-Key 311 16 RFC2548
NAS-Identifier
32 RFC2865
NAS-Port
5 RFC2865
NAS-IP-Address
4 RFC2865
NAS-Port-Id
87 RFC2869
NAS-Port-Type
61 RFC2865
Port-Limit
62 RFC2865
Service-Type
6 RFC2865
Session-Timeout
27 RFC2865
User-Name
1 RFC2865
User-Password
2 RFC2865
WISPr-Bandwidth-Max-Down 14122 8 wi-fi.org
WISPr-Bandwidth-Max-Up 14122 7 wi-fi.org
WISPr-Bandwidth-Min-Down 14122 6 wi-fi.org
WISPr-Bandwidth-Min-Up 14122 5 wi-fi.org
WISPr-Location-Id 14122 1 wi-fi.org
WISPr-Location-Name 14122 2 wi-fi.org
WISPr-Logoff-URL 14122 3 wi-fi.org
WISPr-Redirection-URL 14122 4 wi-fi.org
WISPr-Session-Terminate-Time 14122 9 wi-fi.org


************** ช่วยกันดูหน่อยนะครับ บม *****************

Setup Chillispot for LinuxTLE7.0

Setup ChilliSpot

เราจะต้องมี lan gard 2 ใบ
eth0 ต่อกับ อินเตอร์เน็ต
eth1 ต่อกับเครื่อง AP

มี 2 File คือ .rpm กับ .tar.gz
(1)

Download http://www.chillispot.org/download/chillispot-1.0.tar.gz
tar xvfz chillispot-1.0.tar.gz -C /tmp
cd /tmp/chillispot-1.0
cd ..
./configure
make
make install
cp doc/chilli.conf /etc

(2)

Download http://chillispot.org/download.html

[root@RADIUS ~]# rmp -i chillispot-1.xxxxx .rpm

[root@RADIUS ~]# chkconfig chilli on

[root@RADIUS ~]# /etc/init.d/chilli start

Shutting down chilli: [ PASS ]
Starting chilli: [ PASS ]
[root@RADIUS ~]#


[root@RADIUS ~]# /etc/init.d/chilli status
chilli (pid 2753) is running...
[root@RADIUS ~]#

เป็นคำสั่งในการ kill process
[root@RADIUS ~]#kill -9 `ps -A | grep chilli | gawk '{ print $1 }'`

แก้ไข file chilli.conf
[root@RADIUS ~]#cd etc
[root@RADIUS ~]# grep chilli.conf

##############################################################################
#
# Sample ChilliSpot configuration file
#
##############################################################################

# TAG: fg
# Include this flag if process is to run in the foreground
#fg

# TAG: debug
# Include this flag to include debug information.
#debug

# TAG: interval
# Re-read configuration file at this interval. Will also cause new domain
# name lookups to be performed. Value is given in seconds.
#interval 3600

# TAG: pidfile
# File to store information about the process id of the program.
# The program must have write access to this file/directory.
#pidfile /var/run/chilli.pid

# TAG: statedir
# Directory to use for nonvolatile storage.
# The program must have write access to this directory.
# This tag is currently ignored
#statedir ./


# TUN parameters

# TAG: net
# IP network address of external packet data network
# Used to allocate dynamic IP addresses and set up routing.
# Normally you do not need to uncomment this tag.
net 10.114.0.0/24

# TAG: dynip
# Dynamic IP address pool
# Used to allocate dynamic IP addresses to clients.
# If not set it defaults to the net tag.
# Do not uncomment this tag unless you are an experienced user!
#dynip 10.114.0.0/24

# TAG: statip
# Static IP address pool
# Used to allocate static IP addresses to clients.
# Do not uncomment this tag unless you are an experienced user!
#statip 10.114.0.1


# TAG: dns1
# Primary DNS server.
# Will be suggested to the client.
# If omitted the system default will be used.
# Normally you do not need to uncomment this tag.
#dns1 10.114.0.1

# TAG: dns2
# Secondary DNS server.
# Will be suggested to the client.
# If omitted the system default will be used.
# Normally you do not need to uncomment this tag.
#dns2 202.28.33.2

# TAG: domain
# Domain name
# Will be suggested to the client.
# Normally you do not need to uncomment this tag.
#domain 10

# TAG: ipup
# Script executed after network interface has been brought up.
# Executed with the following parameters:
#
# Normally you do not need to uncomment this tag.
#ipup /etc/chilli.ipup

# TAG: ipdown
# Script executed after network interface has been taken down.
# Executed with the following parameters:
#
# Normally you do not need to uncomment this tag.
#ipdown /etc/chilli.ipdown

# TAG: conup
# Script executed after a user has been authenticated.
# Executed with the following parameters:
#
# Normally you do not need to uncomment this tag.
#conup /etc/chilli.conup

# TAG: conup
# Script executed after a user has disconnected.
# Executed with the following parameters:
#
# Normally you do not need to uncomment this tag.
#conup /etc/chilli.condown


# Radius parameters

# TAG: radiuslisten
# IP address to listen to
# Normally you do not need to uncomment this tag.
radiuslisten 10.114.0.2

# TAG: radiusserver1
# IP address of radius server 1
# For most installations you need to modify this tag.
radiusserver1 10.114.0.2

# TAG: radiusserver2
# IP address of radius server 2
# If you have only one radius server you should set radiusserver2 to the
# same value as radiusserver1.
# For most installations you need to modify this tag.
radiusserver2 10.114.0.2

# TAG: radiusauthport
# Radius authentication port
# The UDP port number to use for radius authentication requests.
# The same port number is used for both radiusserver1 and radiusserver2.
# Normally you do not need to uncomment this tag.
radiusauthport 1645

# TAG: radiusacctport
# Radius accounting port
# The UDP port number to use for radius accounting requests.
# The same port number is used for both radiusserver1 and radiusserver2.
# Normally you do not need to uncomment this tag.
radiusacctport 1646

# TAG: radiussecret
# Radius shared secret for both servers
# For all installations you should modify this tag.
radiussecret testing

# TAG: radiusnasid
# Radius NAS-Identifier
# Normally you do not need to uncomment this tag.
#radiusnasid nas01

# TAG: radiusnasip
# Radius NAS-IP-Address
# Normally you do not need to uncomment this tag.
#radiusnasip 10.114.0.46

# TAG: radiuscalled
# Radius Called-Station-ID
# Normally you do not need to uncomment this tag.
#radiuscalled 00133300

# TAG: radiuslocationid
# WISPr Location ID. Should be in the format: isocc=,
# cc=,ac=,network=
# Normally you do not need to uncomment this tag.
#radiuslocationid isocc=us,cc=1,ac=408,network=ACMEWISP_NewarkAirport

# TAG: radiuslocationname
# WISPr Location Name. Should be in the format:
# ,
# Normally you do not need to uncomment this tag.
#radiuslocationname ACMEWISP,Gate_14_Terminal_C_of_Newark_Airport


# Radius proxy parameters

# TAG: proxylisten
# IP address to listen to
# Normally you do not need to uncomment this tag.
proxylisten 10.114.0.1

# TAG: proxyport
# UDP port to listen to.
# If not specified a port will be selected by the system
# Normally you do not need to uncomment this tag.
proxyport 1812

# TAG: proxyclient
# Client(s) from which we accept radius requests
# Normally you do not need to uncomment this tag.
proxyclient 10.114.0.1/24

# TAG: proxysecret
# Radius proxy shared secret for all clients
# If not specified defaults to radiussecret
# Normally you do not need to uncomment this tag.
proxysecret testing


# Remote configuration management

# TAG: confusername
# If confusername is specified together with confpassword chillispot
# will at regular intervals specified by the interval option query the
# radius server for configuration information.
# Normally you do not need to uncomment this tag.
#confusername conf

# TAG: confpassword
# If confusername is specified together with confpassword chillispot
# will at regular intervals specified by the interval option query the
# radius server for configuration information.
# Normally you do not need to uncomment this tag.
#confpassword secret


# DHCP Parameters

# TAG: dhcpif
# Ethernet interface to listen to.
# This is the network interface which is connected to the access points.
# In a typical configuration this tag should be set to eth1.
dhcpif eth1

# TAG: dhcpmac
# Use specified MAC address.
# An address in the range 00:00:5E:00:02:00 - 00:00:5E:FF:FF:FF falls
# within the IANA range of addresses and is not allocated for other
# purposes.
# Normally you do not need to uncomment this tag.
#dhcpmac 00:00:5E:00:02:00

# TAG: lease
# Time before DHCP lease expires
# Normally you do not need to uncomment this tag.
#lease 600


# Universal access method (UAM) parameters

# TAG: uamserver
# URL of web server handling authentication.
uamserver https://10.114.0.1/cgi-bin/hotspotlogin.cgi

# TAG: uamhomepage
# URL of welcome homepage.
# Unauthenticated users will be redirected to this URL. If not specified
# users will be redirected to the uamserver instead.
# Normally you do not need to uncomment this tag.
uamhomepage https://10.114.0.1/welcome.html

# TAG: uamsecret
# Shared between chilli and authentication web server
uamsecret secretchilli

# TAG: uamlisten
# IP address to listen to for authentication requests
# Do not uncomment this tag unless you are an experienced user!
#uamlisten 10.114.0.1

# TAG: uamport
# TCP port to listen to for authentication requests
# Do not uncomment this tag unless you are an experienced user!
#uamport 3990

# TAG: uamallowed
# Comma separated list of domain names, IP addresses or network segments
# the client can access without first authenticating.
# It is possible to specify this tag multiple times.
# Normally you do not need to uncomment this tag.
#uamallowed 10.114.0.0/24

# TAG: uamanydns
# If this flag is given unauthenticated users are allowed to use
# any DNS server.
# Normally you do not need to uncomment this tag.
uamanydns


# MAC authentication

# TAG: macauth
# If this flag is given users will be authenticated only on their MAC
# address.
# Normally you do not need to uncomment this tag.
#macauth

# TAG: macallowed
# List of MAC addresses.
# The MAC addresses specified in this list will be authenticated only on
# their MAC address.
# This tag is ignored if the macauth tag is given.
# It is possible to specify this tag multiple times.
# Normally you do not need to uncomment this tag.
#macallowed 00-0A-5E-AC-BE-51,00-30-1B-3C-32-E9

# TAG: macpasswd
# Password to use for MAC authentication.
# Normally you do not need to uncomment this tag.
#macpasswd password

# TAG: macsuffix
# Suffix to add to MAC address in order to form the username.
# Normally you do not need to uncomment this tag.
#macsuffix suffix


แก้ไข file firewall.iptables

#!/bin/sh
#
# Firewall script for ChilliSpot
# A Wireless LAN Access Point Controller
#
# Uses $EXTIF (eth0) as the external interface (Internet or intranet) and
# $INTIF (eth1) as the internal interface (access points).
#
#
# SUMMARY
# * All connections originating from chilli are allowed.
# * Only ssh is allowed in on external interface.
# * Nothing is allowed in on internal interface.
# * Forwarding is allowed to and from the external interface, but disallowed
# to and from the internal interface.
# * NAT is enabled on the external interface.

IPTABLES="/sbin/iptables"
EXTIF="ppp0"
INTIF="eth1"

#Flush all rules
$IPTABLES -F
$IPTABLES -F -t nat
$IPTABLES -F -t mangle

#Set default behaviour
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT

#Allow related and established on all interfaces (input)
$IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -i tun0 -p udp -m udp --dport 1812 -j ACCEPT

#Allow releated, established and ssh on $EXTIF. Reject everything else.
$IPTABLES -A INPUT -i $EXTIF -p tcp -m tcp --dport 22 --syn -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -j REJECT

#Allow related and established from $INTIF. Drop everything else.
$IPTABLES -A INPUT -i $INTIF -j DROP

#Allow http and https on other interfaces (input).
#This is only needed if authentication server is on same server as chilli
$IPTABLES -A INPUT -p tcp -m tcp --dport 80 --syn -j ACCEPT
$IPTABLES -A INPUT -p tcp -m tcp --dport 443 --syn -j ACCEPT

#Allow 3990 on other interfaces (input).
$IPTABLES -A INPUT -p tcp -m tcp --dport 3990 --syn -j ACCEPT

#Allow ICMP echo on other interfaces (input).
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

#Allow everything on loopback interface.
$IPTABLES -A INPUT -i lo -j ACCEPT

# Drop everything to and from $INTIF (forward)
# This means that access points can only be managed from ChilliSpot
$IPTABLES -A FORWARD -i $INTIF -j DROP
$IPTABLES -A FORWARD -o $INTIF -j DROP

#Enable NAT on output device
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
$IPTABLES -t nat -A PREROUTING -s 10.114.0.0/24 -p udp --dport 53 -j DNAT --to 10.114.0.1
$IPTABLES -t nat -A PREROUTING -s 10.114.0.0/24 -p tcp --dport 25 -j DNAT --to 10.114.0.1

สร้าง file welcone.html ที่ /var/www/html


Welcome to Our Hotspot, Wireless Network.



TESTING ONLY



Welcome to Our Hotspot, Wireless Network.


You are connected to an authentication and restricted network access point.

Click here to login



Enjoy.




แล้วลองบราวดูครับ

รายละเอียดภายในยังไม่แน่ใจเท่าไหร่ว่ามันเกี่ยวข้องกับส่วนไหนบ้าง
ถ้ารู้ก็ช่วยเพิ่มเติมหน่อยนะ

คำสั่งในการ Run Debug Mode
chilli --debug --fg


******************* The End **********************
*