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

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