chillispot server สำหรับ WIFI Authen Radius with Mysql

ที่มา http://mamboeasy.psu.ac.th/~wiboon.w/

 

 

 

  • eth0 คือ แลนการ์ดใบที่ 1 ต่อกับอินเทอร์เน็ต ได้รับแจก ip จาก dhcp server ในอินเทอร์เน็ต
  • eth1 คือ แลนการ์ดใบที่ 2 ต่อกับแอคเซสพอยต์ ได้รับแจก ip จาก chillispot server
  • แอคเซสพอยต์ได้รับแจก ip จาก chillispot server
  • ไคลเอนต์ที่มาต่อกับแอคเซสพอยต์ได้รับแจก ip จาก chillispot server ส่งต่อโดยแอคเซสพอยต์

1.   ติดตั้ง freeradius
yum install freeradius

chkconfig radiusd on

แก้ไขให้อ่านแฟ้ม /etc/shadow ได้
โดยแก้ไขแฟ้ม /etc/raddb/radiusd.conf

ทำการ comment ยกเลิกบรรทัดข้อความจากเดิม
user = radiusd
group = radiusd
ให้เป็น
#user = radiusd
#group = radiusd

เสร็จแล้วให้ restart ระบบ radiusd ด้วยคำสั่ง service radiusd start

2. เข้าไปสร้าง database และ user ชื่อ radius เพื่อให้ freeradius ใช้ฐานข้อมูล Mysql ในการ authentication ได้ ดังนี้
mysql -u root -p 1234
สร้าง database ชื่อ radius ดังนี้
CREATE DATABASE radius;
สร้าง user ที่มีสิทธิใน database ดังนี้
GRANT ALL PRIVILEGES ON radius.* to 'radius'@'localhost' IDENTIFIED BY '1234';
FLUSH PRIVILEGES;
ออกจาก mysql ด้วยคำสั่ง
quit
ใส่ database schema ด้วยคำสั่งดังนี้
mysql -uroot -p 1234 radius < /usr/share/doc/freeradius-1.1.7/examples/mysql.sql
ใส่ข้อมูลตัวอย่าง โดยกลับเข้าไปใน mysql อีกครั้งด้วยคำสั่ง
mysql -uroot -p 1234
ดังตัวอย่างนี้
use radius;
INSERT INTO usergroup (UserName, GroupName) VALUES ('fredf', 'dynamic');
INSERT INTO usergroup (UserName, GroupName) VALUES ('barney', 'static');
INSERT INTO usergroup (UserName, GroupName) VALUES ('dialrouter', 'netdial');
INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('fredf', 'Password', 'wilma', '==');
INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('barney', 'Password', 'betty', '==');
INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('dialrouter', 'Password', 'dialup', '==');
INSERT INTO radgroupcheck (GroupName, Attribute, Value, Op) VALUES ('dynamic', 'Auth-Type', 'Local', ':=');
INSERT INTO radgroupcheck (GroupName, Attribute, Value, Op) VALUES ('static', 'Auth-Type', 'Local', ':=');
INSERT INTO radgroupcheck (GroupName, Attribute, Value, Op) VALUES ('netdial', 'Auth-Type', 'Local', ':=');
INSERT INTO radreply (UserName, Attribute, Value, Op) VALUES ('fredf', 'Idle-Timeout', '3600', ':=');
INSERT INTO radreply (UserName, Attribute, Value, Op) VALUES ('barney', 'Idle-Timeout', '3600', ':=');
INSERT INTO radreply (UserName, Attribute, Value, Op) VALUES ('dialrouter', 'Idle-Timeout', '900', ':=');
INSERT INTO radgroupreply (GroupName, Attribute, Value, Op) VALUES ('dynamic', 'Service-Type', 'Login-User', ':=');
INSERT INTO radgroupreply (GroupName, Attribute, Value, Op) VALUES ('static', 'Service-Type', 'Login-User', ':=');
INSERT INTO radgroupreply (GroupName, Attribute, Value, Op) VALUES ('netdial', 'Service-Type', 'Login-User', ':=');

3. ติดตั้งโปรแกรมเพิ่ม
yum install freeradius-mysql

แก้ไขไฟล์ /etc/raddb/sql.conf
บรรทัดที่ 20 แก้ไขให้เป็น
login = "radius"
password = "1234"
radius_db = "radius"

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

แก้ไขไฟล์ /etc/raddb/radiusd.conf
บรรทัดที่ 1261 เดิม #        $INCLUDE  ${confdir}/sql.conf
แก้ไขโดยการเอาคอมเมนต์ออก เป็น $INCLUDE  ${confdir}/sql.conf
บรรทัดที่ 1865 เดิม #sql
แก้ไขโดยการเอาคอมเมนต์ออก เป็น sql
บรรทัดที่ 2028 เดิม #sql
แก้ไขโดยการเอาคอมเมนต์ออก เป็น sql

ทดสอบการเข้าใช้งาน โดยใช้ user จาก mysql ดังนี้
radtest fredf wilma localhost 0 kradius
ได้ผลลัพธ์เป็น
Sending Access-Request of id 85 to 127.0.0.1 port 1812
        User-Name = "fredf"
        User-Password = "wilma"
        NAS-IP-Address = 255.255.255.255
        NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=85, length=32
        Idle-Timeout = 3600
        Service-Type = Login-User

ตอนนี้สามารถใช้ username ดังกล่าวจาก Mysql ในการเข้าใช้งานได้แล้ว

 

4.     ติดตั้ง package rpm ด้วยคำสั่งดังนี้
rpm -Uvh chillispot-1.1.0.i386.rpm

     แฟ้มที่เกี่ยวข้อง

o    /etc/chilli.conf
o    /var/www/cgi-bin/hotspotlogin.cgi
o    /var/www/html/welcome.html
o    /etc/firewall.iptables

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

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

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

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

 
5.     แก้ไขแฟ้ม /etc/chilli.conf ให้มีค่าดังตัวอย่างนี้
[หัวข้อ TUN parameters]
บรรทัดที่ 38 เดิม net 192.168.182.0/24
แก้ไขเป็น net 10.0.1.0/24

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

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

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

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

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

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

บรรทัดที่ 253 เดิม #uamlisten 192.168.182.1
แก้ไขเป็น uamlisten 10.0.1.1
 
6.     ให้คัดลอกแฟ้ม firewall.iptables ด้วยคำสั่ง
cp /usr/share/doc/chillispot-1.1.0/firewall.iptables /etc
 
7.     ให้คัดลอกแฟ้ม hotspotlogin.cgi ด้วยคำสั่ง
cp /usr/share/doc/chillispot-1.1.0/hotspotlogin.cgi /var/www/cgi-bin/
 
8.     แก้ไขแฟ้ม /var/www/cgi-bin/hotspotlogin.cgi ให้มีค่าดังตัวอย่างนี้
บรรทัดที่ 27 เดิม #$uamsecret = "ht2eb8ej6s4et3rg1ulp";
แก้ไขโดยให้เอาเครื่องหมาย# ออก เป็น $uamsecret = "ht2eb8ej6s4et3rg1ulp";

บรรทัดที่ 31 เดิม #$userpassword=1;
แก้ไขโดยให้เอาเครื่องหมาย# ออก เป็น $userpassword=1;
 
9.     สร้างแฟ้ม /var/www/html/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://10.0.1.1:3990/prelogin">Click here to login</a></H3>
<p>
<p>Enjoy.
</center>
</body>
</html>

     ก่อนที่จะสตาร์ท chillispot ให้ไปทำการคอนฟิกแอคเซสพอยน์/ไวร์เลสเราเตอร์ ให้พร้อมใช้งาน โดยทำตามเอกสารของแต่ละรุ่น ความต้องการคือ ให้ทำ factory defaults แล้วกำหนดให้มันจะต้องรับ dhcp ip จาก chillispot และตัวมันเองจะต้องไม่ทำหน้าที่แจก ip รวมทั้งแก้ไข ESSID ตั้งชื่อใหม่ด้วย
10.     สั่งให้ firewall.iptables ทำงานด้วยคำสั่งว่า
sh /etc/firewall.iptables
          สั่งให้ chillispot ทำงานด้วยคำสั่งว่า
service  chilli  start
Starting chilli:                                     [  OK  ]
11.   ตรวจสอบการทำงานของ chiilispot ว่าสร้างอินเทอร์เฟส tun0 พร้อมใช้งานและมีเลข IP เป็น 10.0.1.1 โดยที่อินเทอร์เฟส eth1 จะไม่มี IP ใด ๆ ส่วน eth0 ก็เป็นเลข IP ที่รับจากเน็ตที่เซิร์ฟเวอร์นี้ต่ออยู่เหมือนเดิม ดังตัวอย่าง
รันคำสั่ง ifconfig จะได้ผลลัพธ์ดังนี้
eth0      Link encap:Ethernet  HWaddr 00:04:E2:24:DE:32
          inet addr:192.168.1.2  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::204:e2ff:fe24:de32/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:847253 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:89766 dropped:0 overruns:0 carrier:169976
          collisions:0 txqueuelen:1000
          RX bytes:495145717 (472.2 MiB)  TX bytes:0 (0.0 b)
          Interrupt:11 Base address:0x8000
eth1      Link encap:Ethernet  HWaddr 00:50:04:B8:6A:4A
          inet6 addr: fe80::250:4ff:feb8:6a4a/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:381 errors:0 dropped:0 overruns:0 frame:0
          TX packets:381 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:48850 (47.7 KiB)  TX bytes:184386 (180.0 KiB)
          Interrupt:10 Base address:0xe000
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:95 errors:0 dropped:0 overruns:0 frame:0
          TX packets:95 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:23879 (23.3 KiB)  TX bytes:23879 (23.3 KiB)
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.0.1.1  P-t-P:10.0.1.1  Mask:255.255.255.0
          UP POINTOPOINT RUNNING  MTU:1500  Metric:1
          RX packets:319 errors:0 dropped:0 overruns:0 frame:0
          TX packets:369 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:33964 (33.1 KiB)  TX bytes:175949 (171.8 KiB)
12.   ให้จดเลข Mac address ของโน้ตบุ๊คที่จะนำมาทดสอบการเชื่อมต่อกับ chillispot
และรันคำสั่งตรวจสอบว่าโน้ตบุ๊คได้ IP Address จาก chillispot ดังนี้
tail -f /var/log/messages
จะได้ผลลัพธ์แสดงคล้าย ๆ ตังอย่างข้างล่างนี้
Jan 24 11:12:38 localhost chillispot[12822]: ChilliSpot 1.1.0. Copyright 2002-2005 Mondru AB. Licensed under GPL. See http://www.chillispot.org for credits.
Jan 24 11:12:38 localhost kernel: ADDRCONF(NETDEV_CHANGE): tun0: link becomes ready
Jan 24 11:12:38 localhost kernel: eth1:  setting full-duplex.
Jan 24 11:12:47 localhost chillispot[12822]: chilli.c: 3509: New DHCP request from MAC=00-0D-ED-56-13-96
Jan 24 11:12:47 localhost chillispot[12822]: chilli.c: 3479: Client MAC=00-0D-ED-56-13-96 assigned IP 10.0.1.2
Jan 24 11:14:42 localhost chillispot[12822]: chilli.c: 3509: New DHCP request from MAC=00-13-02-69-41-FA
Jan 24 11:14:42 localhost chillispot[12822]: chilli.c: 3479: Client MAC=00-13-02-69-41-FA assigned IP 10.0.1.3
Jan 24 11:15:12 localhost chillispot[12822]: chilli.c: 3759: Successful UAM login from username=chilli IP=10.0.1.3
โดยที่ 10.0.1.2 จะเป็น IP ของแอคเซสพอยน์ และ 10.0.1.3 จะเป็น IP ของโน้ตบุ๊คตัวแรกที่เชื่อมต่อ

13.   ถึงขั้นตอนนี้เป็นอันเปิดใช้ระบบ chillispot แบบ web login ได้แล้ว

แก้ไขแฟ้ม /etc/rc.local เพื่อให้ firewall.iptables และ chilli มีผลทำงานด้วยเมื่อรีบูตเครื่องใหม่
เพิ่มบรรทัด
sh /etc/firewall.iptables
service chilli start

# Transparent proxy

$IPTABLES -t nat -A PREROUTING -i tun0 -p tcp -m tcp -d 192.168.1.0/24 --dport 80 -j RETURN
$IPTABLES -t nat -A PREROUTING -i tun0 -p tcp -m tcp -d 172.16.0.0/12 --dport 80 -j RETURN
$IPTABLES -t nat -A PREROUTING -i tun0 -p tcp -m tcp -d 10.0.0.0/8 --dport 80 -j RETURN
$IPTABLES -t nat -A PREROUTING -i tun0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080

แสดงความคิดเห็น

เนื้อหาของข้อมูลนี้ถูกรักษาเป็นความลับและไม่แสดงต่อสาธารณะ
CAPTCHA
กรุณาป้อนคำตอบ เพื่อพิสูจน์ว่าท่านเป็นมนุษย์ มิใช่ Spam Bot
4 + 10 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.

Calendar

ล็อกอิน

สมาชิกใหม่

  • ปัตตานี
  • sadis
  • Jameball
  • andy99
  • pook