จากที่ได้ไปเข้าร่วมโครงการที่ทางภาควิชาวิศวกรรมคอมพิวเตอร์จัดขึ้นในหัวข้อ WiFi and Network Management ในระหว่างวันที่ 2-6 มิ.ย. 2557 เวลา 8.30-17.30 น. โดยมี พี่อมตวิทย์ คำแหง จากภาควิชาวิศวกรรมคอมพิวเตอร์มาเป็นวิทยากร โดยมีเนื้อหา ดังนี้

–> วันแรก

– เริ่มต้นจากวิทยากรอธิบายรายละเอียดของโครงการ และจุดประสงค์ต่างๆ โดยรายละเอียดซอฟต์แวร์และระบบปฏิบัติการที่ต้องใช้ก็จะมีดังนี้

รายละเอียดระบบปฏิบัติการณ์และซอฟต์แวร์ที่ใช้ทำ WIFI Hotspot Management มีดังนี้

– Ubuntu Server 14.04 LTS
– Mysql Server
– Chillispot 1.0
– Syslog-ng 3.5
– Apache 2.4.7
– PHP 5.5.9

WiFi Hotspot Chart

จากนั้นเตรียมเครื่อง เพื่อใช้เป็นเครื่อง server จำลอง โดยติดตั้งโปรแกรม Oracle Virtual Box ไว้ในเครื่อง และติดตั้ง Ubuntu Server และ Windows 7 อีกตัวไว้ในโปรแกรม Virtual Box

โดยเริ่มจาก

1. ติดตั้ง Ubuntu Server 14.04 LTS เครื่องให้บริการ WIFI Hotspot

ดาวน์โหลดไฟล์อิมเมจ Ubuntu Server ได้ที่ http://releases.ubuntu.com/14.04/ จากนั้นเริ่มติดตั้งตามขั้นตอนด้านล่าง

1.1 บู๊ท PC ด้วยแผ่นซีดี ubuntu ที่เตรียมไว้
1.2 หน้าต่าง Language ให้เลือกภาษา English
1.3 หน้าต่าง ubuntu ให้เลือก Install Ubuntu Server
1.4 ระบบจะทำงานต่อ ให้รอจนได้หน้าต่างว่า Choose language ให้คงค่าเดิมคือ English แล้วกดแป้น Enter
1.5 หัวข้อ “Choose a country, territory or area:” ให้เปลี่ยนไปเลือกเป็น other แล้วกดแป้น Enter ได้หน้าต่างใหม่ที่หัวข้อ “Choose a country, territory or area:” ให้เปลี่ยนเลื่อนไปหา — Asia — เลือก Thailand แล้วกดแป้น Enter
1.6 เลือก locale เป็น united states
1.7 ถึงขั้นตอนหน้า keyboard ให้เลือก NO
1.8 หัวข้อ “Keyboard layout:” ให้คงค่าเดิมคือ Thailand แล้วกดแป้น Enter และ ให้คงค่าเดิมคือ Alt+Shift ไว้เหมือนเดิม แล้วกดแป้น Enter
1.9 หัวข้อตั้งค่า IP Address เครื่องที่ติดตั้งมีระบบ DHCP อยู่ ระบบจะจัดการให้อัตโนมัติ หากไม่มีก็ให้เลือก Configure Network Manually
1.10 ระบบแจ้งให้ตั้งค่า Hostname
1.11 ระบบแจ้งให้ตั้งค่า  Domain ถ้าไม่มีก็พิม localhost
1.12 สร้างชื่อผู้ดูแลเครื่องและตั้งค่า  username and password
1.13 หัวข้อให้เข้ารหัส Home Driectory เลือก No ก็ได้
1.14 หัวข้อ Time Zone ระบบแจ้งเป็น Asia/Bangkok เลือก Yes
1.15 หัวข้อ Partition Disk ก็เลือกเต็มพื้นที่ Disk ในการติดตั้ง
1.16 หัวข้อการแบ่ง Partition ให้ระบบจัดการแบ่งให้ เลือก Yes
1.17 หัวข้อการตั้งค่า Proxy สำหรับเชื่อมต่อ Internet ให้ว่างไว้ กด Enter
1.18 หัวข้อการอับเดทอัตโนมัติของ  Ubuntu เลือก No
1.19 ติดตั้งโปรแกรมเพิ่มเติม ในที่นี้เลือกติดตั้ง OPEN SSH Server สำหรับ remote เข้าใช้งาน
1.20 ตั้งตั้ง grub boot loader เลือก Yes และรอการติดตั้งเป็นอันเสร็จสมบูรณ์

2. ปรับแต่งเครื่อง Server ให้พร้อมใช้งาน หลังจากติดตั้งเสร็จก็จะมาปรับแต่งให้พร้อมกับการใช้งาน ดังวิธีการด้านล่างนี้

2.1 เทียบเวลาในเครื่องให้ตรงกับสากล

– ด้วยคำสั่ง sudo ntpdate pool.ntp.org

– หากต้องการให้ตั้งเทียบเวลาอัตโนมัติทุกวัน ให้สร้างแฟ้มชื่อ /etc/cron.daily/update-time มีข้อมูลว่า
#!/bin/bash
/usr/sbin/ntpdate pool.ntp.org

แก้ไขให้แฟ้มนี้สามารถ execute ด้วยคำสั่ง sudo chmod +x /etc/cron.daily/update-time
แล้วสั่งให้ cron ทำงานใหม่ด้วยคำสั่ง sudo service cron restart
หากไม่ตั้งเทียบเวลาทุกวัน นาฬิกาจะเดินผิดพลาดไปวันละประมาณ 2 วินาที

2.2 ทำการ update package ของ Ubuntu ล่าสุด
– ด้วยคำสั่ง sudo apt-get update
– และตามด้วยคำสั่ง sudo apt-get upgrade

2.3 การปรับแต่งค่าของ Network Interface
– สามารถเข้าไปแก้ไขได้ที่ไฟล์  /etc/network/interfaces ข้อมูลประมาณดังตัวอย่าง
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.99
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1 8.8.8.8

2.4 ปรับแต่งกำหนดสิทธิ์ user
– ทดลองสร้างผู้ใช้งานระบบเพิ่มชื่อ ustaff ด้วยคำสั่ง sudo adduser ustaff
– กำหนดรหัสผ่านสำหรับเข้าใช้งาน จากนั้นกด Enter ผ่านตลอดและกด Y
– ผู้ใช้งาน ustaff มีจะสิทธิ์เพียงแค่ใช้งานระบบพื้นฐานทั่วไป หากต้องการสิทธิ์เป็น root ให้ไปแก้ไขไฟล์ /etc/sudoers
– เพิ่มข้อความ ustaff ALL=(ALL:ALL) ALL
– ทดสอบ login โดยใช้ ustaff และทดสอบใช้คำสั่ง sudo su เพื่อเปลี่ยนเป็น root

2.5 ปรับแต่งสิทธิ์การเข้าใช้งานผ่าน SSH
– ทดสอบกำหนดสิทธิ์การเข้าใช้งาน SSH ทาง Port 22 โดยอนุญาติเฉพาะผู้ใช้งาน ustaff เท่านั้น
– เข้าไปแก้ไขไฟล์ /etc/ssh/sshd_config เพิ่มข้อความลงยังบรรทัดล่างสุด
UsePAM yes
AllowUsers ustaff
– สั่งให้ SSH ทำงานใหม่ด้วย service ssh restart
– ทดสอบเข้าใช้งานด้วย ustaff และ ผู้ใช้งานอื่น ผลปรากฎสามารถเข้าใช้งานได้เฉพาะ ustaff เท่านั้น

3. ติดตั้ง Radius สำหรับเป็นโปรแกรมที่ใช้ในการจัดการแอคเค้าท์และ Mysql Server สำหรับเป็นโปรแกรมจัดเก็บฐานข้อมูล เพื่อใช้ในการตรวจสอบสิทธิ ตามมาตรฐาน IEEE 802.1X

ezradius_1

3.1 ติดตั้งด้วยคำสั่ง sudo apt-get install freeradius freeradius-utils freeradius-mysql

3.2 ทดสอบการทำงานของ radius สามารถทำงานได้หรือไม่ โดยแก้ไขไฟล์ /etc/freeradius/users และเพิ่มท้ายไฟล์ดังนี้

“testradius”     Cleartext-Password := “hello”
Reply-Message = “Hello, %{User-Name}”

3.3 สั่งให้ freeradius ทำงานใหม่ด้วยคำสั่ง service freeradius restart

3.4 ทดสอบการทำงานด้วยคำสั่ง radtest testradius hello 127.0.0.1 0 testing123 จะได้ข้อความประมาณนี้

Sending Access-Request of id 31 to 127.0.0.1 port 1812
User-Name = “testradius”
User-Password = “hello”
NAS-IP-Address = 192.168.0.12
NAS-Port = 0
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=31, length=39
Reply-Message = “Hello, testradius”

3.5 ขั้นตอนการทำงานของ configuration ของ freeradius

– แฟ้ม /etc/freeradius/radiusd.conf  เป็นที่ปรับค่าของระบบต่างๆ

– หากเป็น freeradius 2.x จะมีการแยกแฟ้มย่อยออกไปจาก /etc/freeradius/radiusd.conf
ไปอยู่ที่ /etc/freeradius/sites-available/default  และ /etc/freeradius/modules

– หากเป็น freeradius 1.x ทุกอย่างจะกระจุกตัวในแฟ้ม /etc/freeradius/radiusd.conf

– เมื่อ radius server ได้รับการติดต่อจากผู้ใช้ radius client
วิธีการตรวจสอบคุณสมบัติของผู้ใช้อยู่ในส่วนที่ชื่อ authorize {…}
ภายใน authorize {…} นี้ ประกอบด้วยชื่อ modules ตรวจสอบต่างๆ

– หากคุณสมบัติไม่ตรง ปรกติแล้วระบบก็จะรีบดีดออกมาพร้อมแจ้ง reject
แต่เราสามารถกำหนดให้ไปตรวจสอบต่อกับ authorize modules
เรียงลำดับอันถัดๆไปที่เหลืออื่นๆได้อีก

– หากคุณสมบัติผ่าน ก็จะเข้าขั้นตอนตรวจสอบรหัสผ่านของผู้ใช้ว่าถูกต้องหรือไม่
โดย authorize modules จะเลือก modules ที่ต้องการเอง จากส่วนที่ชื่อ authenticate {…}

– หากรหัสผ่านถูกต้อง ก็จะเข้าสู่ส่วนของ postauth {…}
เป็นการตรวจสอบทิ้งท้ายก่อนส่งคืนค่ากลับให้แก่ radius client ที่ติดต่อมา

– การบันทึกประวัติใช้งานอยู่ในส่วน accounting {…}

– modules ทุกตัวที่ใช้งาน จะต้องได้รับการประกาศไว้ก่อนแล้ว
หากเป็น freeradius 2.x จะแยก modules ออกเป็นแฟ้มย่อยๆอยู่ที่ directory ชื่อ /etc/freeradius/modules
หากเป็น freeradius 1.x จะมี modules อยู่ในแฟ้ม /etc/freeradius/radiusd.conf พื้นที่ส่วนของชื่อ modules {…}

3.6 ติดตั้ง MySQL Server สำหรับเป็นฐานข้อมูล ด้วยคำสั่ง sudo apt-get install mysql-server
– ขณะติดตั้งระบบจจะถามข้อมูลเกี่ยวกับรหัสผ่านของ Mysql แนะนำให้ใส่เหมือนกันทุกครั้ง

3.7 ติดตั้ง phpMyAdmin สำหรับเป็นเครื่องมือเข้าจัดการฐานข้อมูล จำเป็นต้องติดตั้ง Apache2 และ PHP5
– ติดตั้งด้วยคำสั่ง sudo apt-get install apache2 php5 php5-common php5-gd php-pear php-db libapache2-mod-php5 php5-mysql

3.8 ติดตั้ง phpMyAdmin ด้วยคำสั่ง sudo apt-get install phpmyadmin
– เลือกสนับสนุนการทำงานบน apache2 โดยกด space bar ให้ขึ้นเครื่องหมาย * และเลือก OK
– ขณะติดตั้งระบบจะถามข้อมูลเกี่ยวกับรหัสผ่านของการใช้งานโปรแกรมและ MySql แนะนำให้ป้อนเหมือนกับรหัสผ่านของ Mysql Server
– ทดสอบเข้าใช้งาน phpMyAdmin ได้โดยเข้าไปที่ http://ip address/phpmyadmin

3.9 เพิ่มฐานข้อมูล radius เข้าไปยัง MySql Server
– ใช้คำสั่ง mysql -u root -p ระบบจะถามรหัสผ่าน Mysql ให้ใส่ลงไปตามที่ตั้งค่าไว้
– สร้างฐานข้อมูลโดยใช้คำสั่ง CREATE DATABASE radius;
– ใช้คำสั่ง quit; เพื่อออกจากฐานข้อมูล

3.10 เพิ่มตารางลงในฐานข้อมูล radius โดยใช้คำสั่ง
– mysql -u root -p radius < /etc/freeradius/sql/mysql/schema.sql -p
– mysql -u root -p radius < /etc/freeradius/sql/mysql/nas.sql

3.11 ปรับแต่ง freeradius เพื่อใช้เชื่อมต่อฐานข้อมูล Mysql แก้ไขไฟล์ /etc/freeradius/sql.conf
(แนะนำให้สร้าง user จัดการฐานข้อมูล radius โดยเฉพาะ)
server = “localhost”
login = “radius”
password = “xxxxxxxx”
radius_db = “radius”
และเอา # หน้า readclients = yes ออก

3.12 แก้ไขไฟล์ /etc/freeradius/radiusd.conf หาข้อความตามบรรทัดด้านล่าง และเอาเครื่องหมาย # ด้านหน้าออก
modules {


$INCLUDE sql.conf
$INCLUDE sql/mysql/counter.conf

}

3.13 แก้ไชไฟล์ /etc/freeradius/sites-available/default หาข้อความตามบรรทัดด้านล่าง และเอาเครื่องหมาย # ด้านหน้า sql ออก
authorize {
#files
sql
dailycounter
monthlycounter
noresetcounter
}

accounting {
sql
}

session {
#radutmp ปิดการเช็ค session จากระบบ ให้เช็คจาก  sql เท่านั้น
sql
}

แก้ไขไฟล์ /etc/freeradius/sql/mysql/dialup.conf โดยเปิดการทำงานของ simultaneous ดังนี้

#######################################################################
# Simultaneous Use Checking Queries
#######################################################################

simul_count_query = “SELECT COUNT(*) \
FROM ${acct_table1} \
WHERE username = ‘%{SQL-User-Name}’ \
AND acctstoptime IS NULL”

3.14 สั่ง freeradius ให้เริ่มทำงานใหม่ด้วยคำสั่ง service freeradius restart

3.15 ทดสอบสร้าง user ผ่านทาง phpMyAdmin ดังตัวอย่าง

add-radius

radius1

3.16 ทดสอบการทำงานของ radius บนฐานข้อมูล MySql ด้วยคำสั่ง

– radtest user1 password 127.0.0.1 0 testing123

Sending Access-Request of id 142 to 127.0.0.1 port 1812
User-Name = “user1”
User-Password = “password”
NAS-IP-Address = 192.168.0.12
NAS-Port = 0
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=142, length=20

– กำหนด client secret ใหม่เพื่ออนุญาตให้ Chillispot สามารถ access มายัง Radius Server ได้เท่านั้นใน localhost โดยให้แก้ไฟล์ /etc/freeradius/clients.conf แก้ไขข้อความดังนี้

client localhost {
….
….
secret               = testing123          #ค่าต้องเหมือน chilli.conf ของ chillispot
….
….
}

–> ช่วงวันที่ 2

4. ติดตั้ง Chillispot ให้ทำหน้าที่เป็น Authentication Gateway ให้กับระบบ คือเมื่อเราเชื่อมต่อ Wi-Fi เรียบร้อยแล้ว และพอเข้าเว็บไซต์ระบบจะทำการส่งหน้าต่างให้เราป้อน username และ password ก่อนจึงจะใช้งาน Internet

4.1 ปรับแต่งค่าของ Network ทำการ Enable packet forwarding ด้วยการแก้ไขไฟล์ /etc/sysctl.conf ด้วยการเอาเครื่องหมาย # หน้าคำว่า net.ipv4.ip_forward=1 ออก เพื่อสั่งให้ packet forwarding ของ ipv4 ทำงาน

4.2 สั่งให้ ubuntu เริ่มทำงานใหม่ด้วยคำสั่ง reboot

4.3 เปิดการทำงานของ TUN/TAP โดยการเพิ่มคำว่า tun ต่อท้ายไฟล์ /etc/modules และ
– สั่ง Enable ด้วยคำสั่ง modprobe tun

4.4 ติดตั้ง chillispot โดยใช้คำสั่ง
wget http://www.chillispot.org/download/chillispot-1.1.0.tar.gz
dpkg -i chillispot_1.0_i386.deb

4.5 ปรับแต่งการตั้งค่า chillispot โดยแก้ไฟล์ /etc/chilli.conf ดังตัวอย่างด้านล่าง

net 192.168.182.0/255.255.255.0
dynip 192.168.182.0/24
radiusserver1 192.168.0.12 # หากเครื่อง Chillispot เป็นเครื่องเดียวกับเครื่อง Radius Server สามารถใส่ 127.0.0.1
radiusserver2 192.168.0.12 # หากเครื่อง Chillispot เป็นเครื่องเดียวกับเครื่อง Radius Server สามารถใส่ 127.0.0.1
radiussecret testing123 #ค่าต้องเหมือน clients.conf ของ freeradius
dhcpif eth1
uamserver http://192.168.0.12/welcome/go/  # หากเครื่อง Chillispot เป็นเครื่องเดียวกับเครื่อง Radius Server สามารถใส่ 192.168.182.1
uamhomepage http://192.168.0.12/welcome/login_page.html  # หากเป็นเครื่องเดียวกับเครื่อง Radius สามารถใส่ 192.168.182.1
uamsecret testsecret  #ค่าต้องเหมือน config.php ของ Web Login
coaport=3779
coanoipcheck

-สั่งให้ Chillispot ทำงานใหม่ด้วยคำสั่ง /etc/init.d/chilli start

4.6 ปรับแต่ง Firewall สำหรับ Chillispot
cd /etc/init.d
wget https://www.dropbox.com/s/0dfjhe8cpucf550/chilli.iptables
chmod a+x chilli.iptables
ln -s /etc/init.d/chilli.iptables /etc/rcS.d/S41chilli.iptables

4.7 ปรับปรุง firewall แก้ไฟล์ /etc/init.d/chilli.iptables

หากเครื่อง Chillispot เป็นเครื่องเดียวกับเครื่อง Radius Server ปรับแต่งให้ port 80 สามารถใช้งานจาก eth0 ได้
#Allow Port 80 to EXTIF Server (eth0)
$IPTABLES -A INPUT -i $EXTIF -p tcp -m tcp –dport 80 –syn -j ACCEPT

ข้อมูลตัวอย่าง iptables ทั้งหมด
IPTABLES=”/sbin/iptables”
EXTIF=”eth0″
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

#Allow Port 80 to EXTIF Server (eth0)
$IPTABLES -A INPUT -i $EXTIF -p tcp -m tcp –dport 80 –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

4.8 ทำการ Enable firewall script ด้วยคำสั่ง
/etc/init.d/chilli.iptables

4.9 ปรับแต่ง freeradius เพื่ออนุญาตให้ ip เครื่อง chillispot สามารถ access เครื่อง radius server ได้
ไปยังเครื่อง radius server และแก้ไฟล์ /etc/freeradius/clients.conf และเพิ่มข้อความต่อไปนี้

client 192.168.0.11 {  #หากเครื่อง Chillispot เป็นเครื่องเดียวกับเครื่อง Radius Server ก็ให้ใส่ ip เดียวกับ radius หรือใช้ secret ใน client localhost
secret               = testing123          #ค่าต้องเหมือน chilli.conf ของ chillispot
shortname        = private-network
}

สั่งงานให้ freeradius เริ่มทำงานใหม่ด้วยคำสั่ง service freeradius restart

4.10 ติดตั้ง Web Login สำหรับระบบ Chillispot Authentication Gateway โดย

1. อัพโหลดไฟล์ GoLogin PHP สำหรับใช้ในการ Login ของผู้ใช้งาน Internet  ไปยังเครื่องที่ให้บริการ Web Login 
      cd /var/www/html      
      wget https://www.dropbox.com/s/ta46x5un1lh2x1t/gologin.tar.gz      
      tar -zxvf gologin.tar.gz      
2. ปรับแต่ง config ของหน้า Login โดยแก้ไฟล์ /var/www/html/welcome/lib/config.php
      define(‘BASE_URL’, ‘http://192.168.0.12/welcome/go/’); #แก้ไข IP หรือ domain ให้ตรง   กับเครื่องที่ให้บริการ Web Login 
      define(‘UAMSECRET’, ‘testsecret’); #แก้ให้ตรงกับค่า  uamsecret ของ chillispot      
      define(‘USERURL’, ‘http://www.phuketadmin.org‘);  #เมื่อ Login ผ่านแล้วต้องการให้เปิดเว็บอะไร
3. ทดสอบการทำงานร่วมกับ Chillispot Authentication Gateway

จะมาเขียนต่อนะครับ…

Chayatorn Wattanachalee

ชยธร วัฒนชาลี Mr. Chayatorn Wattanachalee Learning Centre Information Technology Section, Prince of Songkla University, Phuket Campus. E-mail: chayatorn.w@phuket.psu.ac.th Tel: 0-7627-6514

More Posts - Website

ประสบการณ์ในการใช้ Zotero มาจัดการหนังสือส่วนตัวที่บ้าน
EBSCO Delivery Service I : Intro ที่เดียวหาได้ทุกฐานฯ

Leave a Comment