I decide to install Coovachilli on Ubuntu 10.04 because OS boots very fast.
Requirement applications for Captive portal solution
CoovaChilli 1.2.4
FreeRadius
MySQL
1. Install Ubuntu 10.04 and choose package LAMP ,DNS, Openssh .
1.1 Modify the network configuartion file. nano /etc/network/interfaces |
iface eth0 inet static
address 10.10.10.3
netmask 255.255.255.240
gateway 10.10.10.1
auto eth1
1.2 Uncomment in /etc/sysctl.conf: nano /etc/sysctl.conf |
net.ip4.ip_forward=1
2. Install Freeradius and edit
2.1 Setup freeradius apt-get install freeradius freeradius-mysql |
2.2 create DB "radius" mysqladmin -p create radius
mysql -u root -p radius < /etc/freeradius/sql/mysql/schema.sql -p mysql -u root -p radius < /etc/freeradius/sql/mysql/nas.sql mysql -u root -p use radius; GRANT ALL PRIVILEGES ON radius.* TO 'radius'@'localhost' IDENTIFIED BY 'xxxxxxxx'; FLUSH PRIVILEGES; quit |
2.3 แก้ไขไพล์ sql.conf เพื่อใช้เชื่อมต่อกับฐานข้อมูลที่เพิ่งสร้างขึ้นมา nano -w /etc/freeradius/sql.conf |
server = "localhost"
login = "radius"
password = "xxxxxxxx"
แล้วเอา # หน้า readclient =yes ออก
nano /etc/freeradius/radiusd.conf |
ให้เอา comment ที่หน้า 2 บรรทัดนี้ออก
modules {
….
$INCLUDE sql.conf
$INCLUDE sql/mysql/counter.conf
2.4 แก้ไขไพล์ client.conf เพื่อให้ Coova-chilli และ Daloradius มาทำงานร่วมกับ freeradius ได้ nano -w /etc/freeradius/clients.conf |
client 127.0.0.1 {
secret = Iloveradius
}
2.5 แก้ไขไพล์ default nano -w /etc/freeradius/sites-available/default |
ให้กด ctrl+w หาคำว่า authorize { เจอแล้วให้เลื่อนลงมาใส่ # ที่ file และเอา # ที่หน้า sql
authorize {
#file เติม # เข้าไป
sql เอา # ออก
daily เอา # ออก และเพิ่ม 3 บรรทัดข้างล่างต่อท้าย
noresetcounter
dailycounter
monthlycounter
}
ต่อมาก็หาคำว่า accounting { แล้วเอา # หน้า sql ออก
accounting {
sql # uncomment
}
ต่อมาก็หาคำว่า session { แล้วเอา # หน้า sql ออก
session {
sql #uncomment
}
2.6 เพิ่ม User เข้าไปในฐานข้อมูล Radius เสร็จ restart Freeradius แล้วทดสอบ User เลย mysql -u root -p INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('guest', 'Password','guest'); เพิ่มusername เข้าไปในฐานข้อมูล quit /etc/init.d/freeradius restart radtest guest guest 127.0.0.1 0 xxxxxxxx |
ถ้าทำสำเร็จ จะมีข้อความประมาณนี้ Access-Accept packet from host 127.0.0.1:1812, id=144, length=20
--------------------จบ Freeradius----------------
3. Build Coova แล้ว install และ config
3.1 ได้ลอง build package เองแล้วมันใช้ได้ ดีกว่าแบบที่เค้า Build มาให้ aptitude --assume-yes install dpkg-dev debhelper libssl-dev cd /tmp wget -c http://ap.coova.org/chilli/coova-chilli-1.2.4.tar.gz tar xzf coova-chilli*.tar.gz cd coova-chilli* dpkg-buildpackage -rfakeroot |
3.2 Install CoovaChilli: cd .. dpkg -i coova-chilli_*_i386.deb |
3.3 มาจัดการแก้ไข file ต่างๆ ใน coova cp /etc/chilli/defaults /etc/chilli/config |
3.4 สร้าง folder hotspot ขึ้น mkdir /var/www/hotspot cd /var/www/hotspot cp /etc/chilli/www/* /var/www/hotspot sed -i 's/1.0.0.1/192.168.0.1/g' /etc/chilli/www/ChilliLibrary.js ยาวเป็นบรรทัดเดียว sed -i 's/1.0.0.1/192.168.0.1/g' /var/www/hotspot/ChilliLibrary.js |
3.5 เข้าไปแก้ไข file chilli โดยเปลี่ยนค่าเป็น 1 nano -w /etc/default/chilli |
START_CHILLI=1
3.6 แก้ไข file /etc/chilli/config nano /etc/chilli/config |
HS_LANIF=eth1 # Subscriber Interface for client devices
HS_NETWORK=192.168.0.0 # HotSpot Network (must include HS_UAMLISTEN)
HS_NETMASK=255.255.255.0 # HotSpot Network Netmask
HS_UAMLISTEN=192.168.0.1 # HotSpot IP Address (on subscriber network)
HS_UAMPORT=3990 # HotSpot Port (on subscriber network)
HS_NASID=nas01
HS_UAMSECRET=uamsecret
HS_RADIUS=127.0.0.1
HS_RADIUS2=127.0.0.1
HS_RADSECRET=xxxxxxxx
HS_UAMALLOW=www.google.com,192.168.0.0/24
HS_UAMSERVER=192.168.0.1
HS_UAMFORMAT=https://\$HS_UAMSERVER/uam/
HS_UAMHOMEPAGE=http://\$HS_UAMLISTEN:\$HS_UAMPORT/www/coova.html
HS_UAMSERVICE=https://192.168.0.1/cgi-bin/hotspotlogin.cgi
HS_ANYIP=on # Allow any IP address on subscriber LAN
#
HS_MACAUTH=on # To turn on MAC Authentication
HS_MACPASSWD=XXXXXX #รหัสผ่านต้องเหมือนกับทีแก้ไขในไพล์/etc/chilli/functions
3.7 ติดตั้ง Firewall (เพิ่มข้อความข้างล่างในบรรทัดท้ายสุด) nano /etc/chilli/up.sh |
#แทรก หลังจาก . /etc/chilli/functions
iptables -F
iptables -t nat -F
#แล้วต่อท้ายด้วย ข้างล่างนี้
# may not have been populated the first time; run again
[ -e "/var/run/chilli.iptables" ] && sh /var/run/chilli.iptables 2>/dev/null
# force-add the final rule necessary to fix routing tables
iptables -I POSTROUTING -t nat -o $HS_WANIF -j MASQUERADE
iptables -P INPUT DROP
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I INPUT -p icmp --icmp-type 8 -s 0/0 -d 192.168.0.1 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -I OUTPUT -p icmp --icmp-type 0 -s 192.168.0.1 -d 0/0 -m state --state ESTABLISHED,RELATED -j ACCEPT
#SSH Accept from tun0
iptables -I INPUT -i tun0 -p tcp -m tcp --dport 22222 --dst 192.168.0.1 -j ACCEPT
iptables -I INPUT -i eth0 -s 10.10.10.3 -p tcp -m tcp --dport 22222 --dst 10.10.10.4 -j ACCEPT
#SNMP
iptables -I INPUT -p udp -s 0/0 --sport 1024:65535 -d 192.168.0.1 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT -p udp -i tun0 -d 192.168.0.1 --dport 161 -j ACCEPT
#iptables -t nat -I PREROUTING -i tun0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
#iptables -I INPUT -i tun0 -p tcp -m tcp --dport 3128 --syn -j ACCEPT
#iptables -t nat -I PREROUTING -p tcp -m tcp --dport 3128 -j DROP
#iptables -t nat -I PREROUTING -p tcp -m tcp --dport 8080 -j DROP
#iptables -t nat -I PREROUTING -p tcp -m tcp --dport 2121 -j DROP
iptables -t nat -I POSROUTING -o eth0 -j LOG
#squid Log
iptables -t nat -N logging
iptables -t nat -A PREROUTING -j logging
#iptables -t nat -A POSTROUTING -j logging
iptables -A INPUT -j LOG --log-level info --log-prefix "INPUT "
iptables -A OUTPUT -j LOG --log-level info --log-prefix "OUTPUT "
iptables -A FORWARD -j LOG --log-level info --log-prefix "FORWARD "
# HTTP:
iptables -t nat -A logging -p tcp --dport 80 -j LOG --log-prefix "HTTP: " \
--log-level info
# HTTPS:
iptables -t nat -A logging -p tcp --dport 443 -j LOG --log-prefix "HTTPS: " \
--log-level info
# SMTP:
iptables -t nat -A logging -p tcp --dport 25 -j LOG --log-prefix "SMTP: " \
--log-level info
# FTP:
iptables -t nat -A logging -p tcp --dport 21 -j LOG --log-prefix "FTP: " \
--log-level info
# IMAP:
iptables -t nat -A logging -p tcp --dport 143 -j LOG --log-prefix "IMAP: " \
--log-level info
# POP3:
iptables -t nat -A logging -p tcp --dport 110 -j LOG --log-prefix "POP3: " \
--log-level info
# MSN:
iptables -t nat -A logging -p tcp --dport 1863 -j LOG --log-prefix "MSN: " \
--log-level info
# JABBER:
iptables -t nat -A logging -p tcp --dport 5222 -j LOG --log-prefix "JABBER: " \
--log-level info
JABBERS
iptables -t nat -A logging -p tcp --dport 5223 -j LOG --log-prefix "JABBERS: " \
--log-level info
# ICQ/AIM
iptables -t nat -A logging -p tcp --dport 5190 -j LOG --log-prefix "ICQ/AIM: " \
--log-level info
# Yahoo
iptables -t nat -A logging -p tcp --dport 5050 -j LOG --log-prefix "YAHOO: " \
--log-level info
# IRC
iptables -t nat -A logging -p tcp --dport 6667 -j LOG --log-prefix "IRC: " \
--log-level info
# Gadu-Gadu
iptables -t nat -A logging -p tcp --dport 8074 -j LOG --log-prefix "GADU-GADU: " \
--log-level info
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 443 --syn -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 3990 --syn -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 4990 --syn -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 80 --syn -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 53 --syn -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 67:68 --syn -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 3306 --syn -j ACCEPT
iptables -A INPUT -i tun0 -j DROP
4. config Apapche2
4.1 ติดตั้ง SSL apt-get install libapache2-mod-auth-mysql |
4.2 สร้าง Certificate
apt-get install ssl-cert |
4.3 สร้าง folder ssl mkdir /etc/apache2/ssl |
4.4 ดูชื่อเครื่อง hostname -f |
4.5 เสร็จแล้วก็เอาชื่อ hostnameมาใส่ในการตอบคำถามข้างล่างนี้ make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem |
4.6 ติดตั้ง module ssl a2enmod ssl /etc/init.d/apache2 force-reload |
4.7 แก้ไขไพล์ hosts nano /etc/hosts |
127.0.0.1 localhost.local localhost
127.0.1.1 Authen.local Authen
192.168.0.1 Authen.local Authen
4.8 สร้างsite hotspot ก๊อบข้างล่างไปวางใน hotspot (ลบ. ออกด้วยนะ) nano -w /etc/apache2/sites-available/hotspot |
NameVirtualHost 192.168.0.1:443
<.VirtualHost 192.168.0.1:443>
ServerAdmin webmaster@domain.org
DocumentRoot "/var/www/hotspot"
ServerName "192.168.0.1"
<.Directory "/var/www/hotspot/">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
<./Directory>
Alias "/dialupadmin/" "/usr/share/freeradius-dialupadmin/htdocs/"
<.Directory "/usr/share/freeradius-dialupadmin/htdocs/">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
<./Directory>
<.Directory "/var/www/hotspot/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>
4.9 สั่งให้ hotspot ใน apache ทำงาน a2ensite hotspot |
4.10 จัดการเรื่อง Listen Ports ใน apche nano -w /etc/apache2/ports.conf |
แก้ไขให้เหลือตามข้างล่างเป็นพอ
Listen 443
Listen 80
nano -w /etc/apache2/apache2.conf |
ServerName 192.168.0.1 เพิ่มคำสั่งนี้ไว้บนสุดเลยครับ
4.11 เปิดไฟล์ default nano -w /etc/apache2/sites-available/default |
เพิ่มตรงบนสุด NameVirtualHost *:80
4.12 สร้างหน้า login ของ Hotspot cd /var/www/hotspot/ wget http://www.truesoft.co.th/wifi/uam.tgz tar xvf uam.tgz |
to Start chilli service that server reboots update-rc.d chilli defaults |
จบด้วยการ restart มาถึงตรงนี้ สามารถทดสอบได้แล้ว
5. ติดตั้ง Haserl Download haserl from http://haserl.sourceforge.net/.
sudo apt-get install gcc
tar xvf haserl-0.8.0.tar.gz
cd haserl-0.8.0/
./configure
make
make install
Edit /etc/chilli/wwwsh file
haserl=$(which haserl 2>/dev/null)
with
haserl=/usr/local/bin/haserl
6. Install Syslog-ng
apt-get install syslog-ng
cp /etc/syslog-ng/syslog-ng.conf /etc/syslog-ng/syslog-ng.conf.bak
nano /etc/syslog-ng/syslog-ng.conf
destination remote {
udp("192.168.20.104" port(514));
};
log {source(s_all); filter(f_messages); destination(remote); };
log {source(s_all); filter(f_kern); destination(remote); };
/etc/init.d/syslog-ng start
nano /etc/init.d/rc.capture
#!/bin/bash
tail -F /var/log/squid/access.log logger -t squid -p local3.info &
tail -F /var/log/radius/radacct/127.0.0.1/details logger -t radiusd -p local3.info &
chmod a+x /etc/init.d/rc.capture
ln -s /etc/init.d/rc.capture /etc/rcS.d/S88rccapture
nano /etc/logrotate.d/freeradius
/var/log/radius/radacct/127.0.0.1/details {
rotate 13
weekly
delaycompress
missingok
notifempty
compress
}
nano /etc/freeradius/modules/detail
ให้เปลี่ยนค่า detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d เป็น
detailfile = ${radacctdir}/%{Client-IP-Address}/details
ขั้นตอนการติดตั้ง NTP Server ที่เครื่อง Log Server เป็นดังนี้
1.ติดตั้ง ntp ด้วยสั่ง
apt-get install 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 192.168.0.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.สั่ง restart service ด้วยคำสั่ง
chkconfig ntpd on
/etc/init.d/ntp restart
5. ตรวจสอบ Remote Server ที่ต้องการใช้อ้างอิงฐานเวลา ใช้คำสั่งดังนี้
ntptrace
อ้างอิง
http://linux.xvx.cz/2010/03/debian-wi-fi-hotspot-using-coovachilli-freeradius-mysql-and-daloradius/http://www.itmanage.info/technology/linux/ubuntu/chillihospot/install_chillhotspot_ubutu_8_10.html