本文的目的是演示如何将基于Linux的计算机或笔记本电脑转变为无线热点,用户可以通过强制门户页面对其进行身份验证。 对于这个任务,主控制器软件将是CoovaChilli 。 该软件是酒店,餐馆,超市,公园和任何提供无线上网的地方的理想热点管理解决方案。
先决条件
- 一个Linux发行版。 在本文中,我将使用Fedora 20.稍后版本21/22应该可以正常工作。
- 开发库需要源程序包编译。
- 一个工作的MySQL服务器安装。
- 连接到互联网的有线网络设备。
- 能够运行sudo命令。
- 支持接入点模式的无线网络设备。 要查看您的无线设备是否支持AP模式运行:
sudo iw phy | grep -A 5 -i'支持的界面模式'| grep'*'
安装CoovaChilli依赖项
yum install libnl3-devel libtalloc-devel iptables
安装hostapd
Hostapd允许您的计算机作为接入点(AP)WPA / WPA2身份验证器。 其他功能包括Radius认证服务,虽然我们不会在这里使用。
大多数Linux发行版(包括Fedora)都具有预打包版本的hostapd,可以使用软件包管理软件进行安装。 例如在Fedora,CentOS和其他基于Red Hat的Linux发行版中,一个简单的命令将安装此软件包:
yum install hostapd
但是,要安装最新版本的hostpad,我们需要下载并编译源码。 这可以很容易地完成如下:
cd /usr/src
sudo git clone git://w1.fi/hostap.git
这将下载hostapd服务器守护程序和wpa_supplicant源。 我们对前者感兴趣,所以会改为hostapd来源:
cd hostap/hostapd
Hostapd没有'configure'命令,所以在我们编译hostapd之前,我们需要改变安装前缀。 更改默认安装目录的一种快速简单的方法是使用sed:
sed -i “s:export BINDIR ?= /usr/local/bin/:export BINDIR ?= /usr/sbin:g” Makefile
接下来,复制默认配置文件:
cp -v defconfig .config
我们需要更改配置文件中的一些默认值:
vim .config
取消注释以下选项:
CONFIG_LIBNL32=y # Use libnl 3.2 libraries
CONFIG_IEEE80211N=y # Enables IEEE 802.11n support
CONFIG_WNM=y # Enables Network Management support
CONFIG_IEEE80211AC=y # Enables IEEE 802.11ac support
CONFIG_DEBUG_FILE=y # Support for writing debug log to file
运行make和install:
make
sudo make install
要检查hostapd是否正确安装,请运行:
hostapd -v
以上命令将显示您的版本和积分
配置主机
使用示例文件创建hostapd配置文件:
sudo mkdir /etc/hostapd
sudo cp -v /usr/src/hostap/hostapd/hostapd.conf /etc/hostapd/
sudo vim /etc/hostapd/hostapd.conf
在hostapd.conf文件中更改以下参数:
driver=nl80211
interface=wlan0 # Change this to your wireless device
ssid=KAMPALA-3 # Change this to your SSID
hw_mode=g
channel=6 # Enter your desired channel
ieee80211n=1 # Enable IEEE 802.11n
wpa=1
wpa_passphrase=myverysecretpassword
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP
为hostapd套接字创建目录:
sudo mkdir /var/run/hostapd
如果软开关打开,将WiFi接口的状态设置为“UP”,取消阻止Wifi
sudo rfkill unblock wifi
sudo ip link set dev wlan0 up
测试并启动hostapd:
sudo hostapd -d /etc/hostapd/hostapd.conf
如果一切正常,则hostapd守护程序应该启动而不是退出。
接下来,创建一个systemd服务文件。 目前,大多数Linux发行版都使用systemd来控制服务:
sudo vim /etc/systemd/system/hostapd.service
[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
After=dnsmasq.service
[Service]
Type=forking
PIDFile=/var/run/hostapd.pid
ExecStartPre=/bin/mkdir -p /var/run/hostapd
ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf -P /var/run/hostapd.pid -B
[Install]
WantedBy=multi-user.target
启用服务启动时自动启动:
sudo systemctl enable hostapd.service
Freeradius
由于我们将要求客户端在访问Internet之前进行身份验证,因此需要安装半径服务器。 FreeRadius是一个基于开源的半径服务器。 它也可以使用您喜欢的Linux包管理器(如yum或apt)进行安装。 但是,由于我们要安装最新版本,我们将从源代码编译。
下载freeradius:
cd /tmp/
wget -c ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.9.tar.bz2
解压源并更改以安装位置:
sudo tar jxvf freeradius-server-3.0.9.tar.bz2 -C /usr/src/
cd /usr/src/freeradius-server-3.0.9
运行配置脚本,确保您使用正确的前缀和库路径进行安装:
sudo ./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc --localstatedir=/var/ --enable-fast-install=no
继续编译安装:
sudo make
sudo make install
如果遇到以下错误
mkdir:无法创建目录'/ etc / raddb /':文件存在
make:*** [/ etc / raddb /]错误1
运行以下操作来修复它:
rmdir /etc/raddb
make install && make install
添加radiusd组和用户:
sudo groupadd -r radiusd
sudo useradd -r -M -c "Radius Server User" -g radiusd radiusd -s /sbin/nologin
配置freeradius MySQL表
启动MySQL服务器如果没有运行。 如上所述,初始化过程是通过systemd,所以:
sudo systemctl -q is-active mysqld.service || sudo systemctl start mysqld.service
即使启动,确保服务启动:
sudo systemctl enable mysqld.service
创建半径数据库:
mysqladmin -u root -p[MYSQL_ROOT_PASSWORD] create radius
使用MySQL模式生成数据库表:
sudo cat /etc/raddb/mods-config/sql/main/mysql/schema.sql | mysql -u root -p[MYSQL_ROOT_PASSWORD] radius
创建MySQL radius用户并设置radius数据库的权限:
mysql -u root -p[MYSQL_ROOT_PASSWORD] radius
GRANT ALL PRIVILEGES ON radius.* to [FREERADIUS_DB_USER]@localhost IDENTIFIED by '[FREERADIUS_DB_PASS]';
配置SQL半径模块:
sudo vim /etc/raddb/mods-available/sql
取消注释或更改以下参数:
driver = "rlm_sql_mysql"
dialect = ”mysql”
server = "localhost"
port = 3306
login = "FREERADIUS_DB_USER"
password = "FREERADIUS_DB_PASS"
read_clients = yes
添加chillispot SQL计数器:
sudo vim /etc/raddb/mods-available/sqlcounter
在上面的文件末尾添加这一行:
$INCLUDE ${modconfdir}/sql/counter/${modules.sql.dialect}/chillispot.conf
下一个链接sql,sqlcounter到模块可用:
sudo ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled/sql
sudo ln -s /etc/raddb/mods-available/sqlcounter /etc/raddb/mods-enabled/sqlcounter
配置radius客户端
sudo vim /etc/raddb/clients.conf
将密码更改为FreeRadius MySQL数据库上面使用的密码:
secret = [FREERADIUS_DB_PASS]
配置半径服务器:
sudo vim /etc/raddb/radiusd.conf
在安全性部分下,将用户和组更改为在安装期间创建的名称:
user = radiusd
group = radiusd
allow_vulnerable_openssl = yes
IMPORTANT: Don't do this. You really should update to recent versions of OpenSSL
在实例部分(近线728)下,添加以下计数器模块:
chillispot_max_bytes
noresetcounter
在site-available下配置默认虚拟服务器:
sudo vim /etc/raddb/sites-available/default
授权部分:
评论以下内容:
#filter_username
取消注释以下内容:
auth_log
unix
更改以下内容:
'-sql' to sql
在授权部分末尾添加以下内容:
chillispot_max_bytes
noresetcounter
下一步在会计科下,取消注释以下内容:
radutmp
以下:
'-sql' to sql
下一步在会话部分下,取消注释以下内容:
radutmp
sql
接下来的“认证”部分,取消注释以下内容:
reply_log
更改以下内容:
'-sql' to sql
配置站点下可用的内部隧道请求虚拟服务器:
sudo vim /etc/raddb/sites-available/inner-tunnel
在授权部分下,更改以下内容:
'-sql' to sql
在授权部分末尾添加以下内容:
chillispot_max_bytes
noresetcounter
下一步在会话部分下,取消注释以下内容:
sql
接下来的“认证”部分,取消注释以下内容:
reply_log
更改以下内容:
'-sql' to sql
为Chillispot添加以下MySQL计数器:
sudo vim /etc/raddb/mods-config/sql/counter/mysql/chillispot.conf
sqlcounter chillispot_max_bytes {
counter_name = Max-Total-Octets
check_name = ChilliSpot-Max-Total-Octets
reply_name = ChilliSpot-Max-Total-Octets
reply_message = "You have reached your bandwidth limit"
sql_module_instance = sql
key = User-Name
reset = never
query = "SELECT IFNULL((SUM(AcctInputOctets + AcctOutputOctets)),0) FROM radacct WHERE username = '%{${key}}' AND UNIX_TIMESTAMP(AcctStartTime) + AcctSessionTime > '%%b'"
}
更改配置和日志目录的所有权:
sudo touch /var/log/radius/radutmp
sudo chown -R radiusd:radiusd /etc/raddb
sudo chown -R radiusd:radiusd /var/log/radius
在MySQL数据库中创建管理员用户:
echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[ADMIN_USER]', 'Cleartext-Password', '[ADMIN_PASSWORD]', ':=');" | mysql -u radius -p[FREERADIUS_DB_PASS] radius
启动半径进行初始化和测试
sudo /usr/sbin/radiusd -X
打开一个新的终端窗口来测试连接:
radtest [ADMIN_USER] [ADMIN_PASSWORD] 127.0.0.1 0 [FREERADIUS_DB_PASS]
如果您收到这样的消息,那么您将完成以下步骤的最小和所需的半径设置:
接收访问接受标识174从127.0.0.1:1812到0.0.0.0:0长度20
但在将半径留在一边之前,请为radius服务器创建一个systemd服务文件:
sudo vim /etc/systemd/system/radiusd.service
[Unit]
Description=FreeRADIUS high performance RADIUS server.
After=mysqld.service syslog.target network.target
[Service]
Type=forking
ExecStartPre=-/bin/mkdir /var/log/radius
ExecStartPre=-/bin/mkdir /var/run/radiusd
ExecStartPre=-/bin/chown -R radiusd.radiusd /var/log/radius
ExecStartPre=-/bin/chown -R radiusd.radiusd /var/run/radiusd
ExecStartPre=/usr/sbin/radiusd -C
ExecStart=/usr/sbin/radiusd -d /etc/raddb
ExecReload=/usr/sbin/radiusd -C
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
启用服务启动时自动启动:
sudo systemctl enable radiusd.service
安装Haserl
Haserl是CoovaChilli所包含的嵌入式微型计算机所需要的。
下载haserl:
cd /tmp
wget -c http://superb-dca2.dl.sourceforge.net/project/haserl/haserl-devel/haserl-0.9.35.tar.gz
升级tarball:
sudo tar zxvf haserl-0.9.35.tar.gz -C /usr/src/
cd /usr/src/haserl-0.9.35/
编译安装:
./configure --prefix=/usr –libdir=/usr/lib64
(确保更改为正确的库或所需的前缀)
make
sudo make install
安装CoovaChilli
CoovaChilli是一个基于开放源码的强制门户软件。 它是从已弃用的辣椒项目开始的。 完成coovachilli的安装和配置后,您将能够将WiFi热点客户端重定向到登录页面,即可以登录和访问Internet的强制门户。
下载coovachilli的最新资料:
cd /usr/src
sudo git clone https://github.com/coova/coova-chilli.git
配置和编译coova:
cd /usr/src/coova-chilli
sh bootstrap
./configure --prefix=/usr --libdir=/usr/lib64 --localstatedir=/var --sysconfdir=/etc --enable-miniportal --with-openssl --enable-libjson --enable-useragent --enable-sessionstate --enable-sessionid --enable-chilliredir --enable-binstatusfile --enable-statusfile --disable-static --enable-shared --enable-largelimits --enable-proxyvsa --enable-chilliproxy --enable-chilliradsec --with-poll
(确保更改为正确的库或所需的前缀)
make
sudo make install
配置CoovaChilli
所有配置文件位于:/ etc / chilli下。 您将需要创建一个具有您的站点修改的配置文件,如下所示:
sudo cp -v /etc/chilli/defaults /etc/chilli/config
sudo vim /etc/chilli/config
更改以下参数以匹配您的环境:
HS_WANIF=eth0 # WAN Interface toward the Internet
HS_LANIF=wlan0 # Subscriber Interface for client devices
HS_NETWORK=10.1.0.0 # HotSpot Network (must include HS_UAMLISTEN)
HS_NETMASK=255.255.255.0 # HotSpot Network Netmask
HS_UAMLISTEN=10.1.0.1 # HotSpot IP Address (on subscriber network)
HS_RADSECRET=[FREERADIUS_DB_PASS] # Set to be your RADIUS shared secret
HS_UAMSECRET=[FREERADIUS_DB_PASS] # Set to be your UAM secret
HS_ADMUSR=[ADMIN_USER]
HS_ADMPWD=[ADMIN_PASSWORD]
添加辣椒ipup.sh脚本。 这些脚本的目的是使系统作为路由器。 您也可以添加其他命令,例如设置网关。
sudo vim /etc/chilli/ipup.sh
#!/bin/sh
#
# Allow IP masquerading through this box
/usr/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
重要信息:将Internet设备更改为正确的设备。
使脚本可执行:
sudo chmod 755 /etc/chilli/ipup.sh
启用coovachilli,以便启动时启动:
sudo systemctl enable chilli
开始coovachilli:
sudo systemctl start chilli
测试您的专属门户
在开始测试之前,请确保您可以在本地首先访问互联网。
然后使用无线客户端,如智能手机或笔记本电脑,打开您喜欢的网络浏览器。 转到您选择的任何网址/网站。
如果您按照上述步骤操作,则将被重定向到专用门户页面,如下所示:
用户管理
要添加用户以便他们可以使用热点访问Internet,请为每个用户运行以下命令。 如果您愿意,您可以使用脚本自动化。
echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[LOGIN_NAME]', 'Cleartext-Password', '[LOGIN_PASSWORD]', ':=');" | mysql -u radius -p[FREERADIUS_DB_PASS] radius
这就是人!
跟着我在:@jzikusooka