佐须之男 发布的文章

Wifidog分析wifidog认证网关协议v1

网关心跳(Ping协议)
Wifidog将ping协议做为心跳机制向认证服务器发送当前状态信息。这可以实现为认证服务器每个节点的状态生成中央日志。
Wifidog客户端在conf文件中进行设置,目的是通过http定期启动thread(ping_thread.c)向认证服务器发送状态信息。信息格式如下:

http://auth_sever/ping/?    
gw_id=%s
sys_uptime=%lu    
sys_memfree=%u    
sys_load=%.2f    
wifidog_uptime=%lu

通过系统调用wifidog客户端收集的数据

Headers
HTTP/1.0\r\n" 
"User-Agent: WiFiDog %s\r\n" 
"Host: %s\r\n" 
"\r\n",

一个标准的HTTP需求应该是:

GET /ping/?gw_id=001217DA42D2&sys_uptime=742725&sys_memfree=2604&sys_load=0.03&wifidog_uptime=3861 HTTP/1.0
User-Agent: WiFiDog 1.1.3_beta6
Host: wifidog.pro

认证服务器认证协议
这个页面描述了当用户已经被认证并允许访问互联网时,为了认证用户和进程,wifidog网关和认证服务器之间的信息传送。
Wifidog客户端将定期的启动一个thread来报告每个用户的连接状况。目前它被用来报告每个用户输入/输出计数器,以显示用户依然在现,并允许认证服务器将不再连接的用户断开。
以下是发给每个在线用户的信息

auth_server:/auth/index.php?
stage=
ip=
mac=
token=
incoming=
outgoing=

注意:stage=计数器/登录,取决于是否是新客户端
即使输入输出变量会在所有信息中出现,但他们只对处于counter阶段的信息有效。其它情况下输入输出经常设置为0。
在做回复时,认证服务器会以有效身份或新用户信息,或者认证服务器错误提示形式进行回复。
回复格式如下:
Auth:

新用户状态为:

0 - AUTH_DENIED - User firewall users are deleted and the user removed.
6 - AUTH_VALIDATION_FAILED - User email validation timeout has occured and user/firewall is deleted
1 - AUTH_ALLOWED - User was valid, add firewall rules if not present
5 - AUTH_VALIDATION - Permit user access to email to get validation email under default rules
-1 - AUTH_ERROR - An error occurred during the validation process

注意:认识服务器错误一般不会改变防火墙或用户状态

标准的URL为:

GET /auth/?stage=counters&ip=7.0.0.107&mac=00:40:05:5F:44:43&token=4f473ae3ddc5c1c2165f7a0973c57a98&incoming=6031353&outgoing=827770 HTTP/1.0
User-Agent: WiFiDog 1.1.3_beta6
Host: wifidog.pro

网关重定向浏览器
客户端浏览器在不同情况下会被重定向到其它页面:
初始化请求:
基于捕捉,客户端会被网关重定向到以下URL:

login/?gw_address=%s&gw_port=%d&gw_id=%s&url=%s 
例如:https://wifidog.pro/login/?gw_id=0016B6DA9AE0&gw_address=7.0.0.1&gw_port=2060

初始化请求之后
当请求被处理并且客户端已经被重定向到网关时
如果服务器回复AUTH_DENIED:注意你通常在标准认证服务器上看不到这样的提示。客户端将不会被重定向回网关。

gw_message.php?message=denied 

如果服务器回复AUTH_VALIDATION:

gw_message.php?message=activate 

如果服务器回复AUTH_ALLOWED:这是门户重定向:

portal/?gw_id=%s 

如果服务器回复AUTH_VALIDATION_FAILED:注意你将不会在标准认证服务器看到此回复。客户端将不会重定向回网关。

gw_message.php?message=failed_validation

认证服务器重定向浏览器
基于成功登录,客户端将被重定向到网关。 http://" . $gw_address . ":" . $gw_port . "/wifidog/auth?token=" . $token

URL示例:http://192.168.1.1:2060/wifidog/auth?token=4f473ae3ddc5c1c2165f7a0973c57a98

本文章由 http://www.wifidog.pro/2015/04/01/Wifidog%E5%88%86%E6%9E%90wifidog%E8%AE%A4%E8%AF%81.html 整理编辑,转载请注明出处

Wifidog认证服务器安装

需要
PHP5
PHP5服务器。推荐Apache httpd服务器,用虚拟主机也不错。
必要的扩展:pgsql,dom和bmstring
可选的扩展:xml,gettext,mcrypt,mhash,xmlrpc
PEAR(PHP扩展与应用库)扩展:radius,Auth_RADIUS,Crypt_CHAP
PHP类库:Smarty,MagpieRSS,Phlickr
强烈建议安装选用项,以便激活认证服务器的所有特性。如果你不知道哪些已经安装,install.php将会进行检测它们并显示出对你有用的信息。最后一项将会通过install.php自动下载安装。
重要提示:认证服务器所需内存要大于PHP默认的8Mb。你需要在php.ini将其提高到32Mb或64Mb。如果你没进行此操作,也会安装成功,但不久就会用光内存。

PostgreSQL
正确配置PostgreSQL服务器。install.php脚本不会向PostgreSQL数据库服务器提供特殊的安全方式。系统管理员要做的是授予正确的数据库存取许可。

快速安装
1) 将Wifidog认证服务器软件源从CVS中撤出
2) 在人喜欢的浏览器中打开http://server.com/wifidog/install.php并按说明操作
3) 在config.php设置语言
4) 用管理员身份登录,填入网络信息,创建热点和目录

install.php
即使是install.php也无法尽其所能的来简化安装。但它能很快的给你一个门户,你可以做为管理员进行登录,自定义你的网络,热点,目录,用户等。
首先,你需要在浏览器中打开install.php。如果你尝试另一个门户网页,并且认证服务器没有预先设置好,那么你的浏览器将自动重新导向install.php。
1.jpg

按照网页上的说明创建wifidog用户和数据库。
第一次打开install.php,脚本会在/tmp/dog_cookie.txt文件中随机产生密码。这只是一种安全控制,用来防止选程用户用新安装的认证服务器做坏事。这个文件只是随机密码,不需要用户名。

版本
TODO文本
2.jpg

许可
这个页面是用来检测丢失的文件或许可。它能通过命令行给你一些解决这些问题的提示。但这些命令只是给你一些帮助,并不是用来解决这些问题。
如果许可正确将会出现“back/next”键。当你做出修改后点击“Refresh”键进行更新。
3.jpg

Smarty
认证服务器需要Smarty,你不能跳过此步进行安装….点击“NEXT”
4.jpg

MagpieRSS
可根据需求决定是否安装。但建议您安装它来激活认证服务器的特性。
5.jpg

Phlickr
可根据需求决定是否安装。但建议您安装它来激活认证服务器的特性。

Database access
TODO: screenshot+text
l 填写信息
l 测试连接

数据库安装
TODO: screenshot+text
l 创建DB模式
l 输入DB原始数据
l 如果需要,更新模式

选项
TODO: screenshot+text

管理帐户
TODO: screenshot+text
点击NEXT,你将被重新导向Wifidog门户网页

清除
将CONF_USE_CRON_FOR_DB_CLEANUP设置成false,或者将这行脚本写在/in/etc.cron.hourly

cd  && su apache -c 'php -f cron/cleanup.php'

或者在crontab,或者取决于你的cron
你也许需要在cron/cleanup.php中将

require_once('../include/common.php');

改成:

require_once(dirname(__FILE__).'/../include/common.php');

节点故障报告
此项可选。如果你需要此功能,你需要在crontab执行它,方法是:

*/1 * * * * (cd /var/www/wifidog-auth-prod/wifidog/cron/; /usr/local/bin/php -Cq ./page.php 2>/dev/null)

它将每分钟执行一次。我确信我们可以将路径设置在页面顶端的解释器(/usr/local/bin/php –Cq,这样更便于执行。

本文章由 http://www.wifidog.pro/2015/04/01/wifidog-auth-server-install.html 整理编辑,转载请注明出处

Wifidog安装网关协议

需求:
1) 熟悉GNU/Linux环境
2) 内核中编译了netfilter的GNU/Linux OS
3) Iptables
4) GNU C 编辑器。其它编辑器可能也适用,但我们没有测试,也不支持。
5) 可以从SourceForge得到最新的Wifidog TAR包

预安装
很多人会在这里遇到问题,所以我们大致陈述一下:
将Wifidog引入到环境之前先要确保一切都是正常运行

l 路由器须boot正确
l 路由器能正确调出界面
l 路由器须联网
l 正确设置DNS,并能正常运行
l 正确设置DHCP
l 装载ipt_mac.o内核模块
l 如果用NAT,路由器必须用iptables设置NAT/masquerading规则
l 获取WIFI的客户端必面能够绑定和联接到互联网
l 当路由器开始运行时,以上所有须自动运行

安装
Wifidog跟其它开源项目一样,使用标准的自动化工具,使得安装更加便捷。打开TAR包获取来自SVN的最新资源,然后按以下步骤:

./autogen.sh
make
make install

如果你没有用make install来安装,二进制文件会保存在src/wifidgo。

OpenWrt ipkg
mkdir ~/wifidog.openwrt
cd ~/wifidog.openwrt
wget http://downloads.openwrt.org/whiterussian/newest/OpenWrt-SDK-Linux-i686-1.tar.bz2
tar -jxvf OpenWrt-SDK-Linux-i686-1.tar.bz2
svn checkout https://dev.wifidog.org/svn/trunk/wifidog
cd wifidog
./autogen.sh
make ipk OPENWRTSDK=~/wifidog.openwrt/OpenWrt-SDK-Linux-i686-1

如果没有错误,你的包应该保存在~/wifidog.openwrt/OpenWrt-SDK-Linux-i686-1/bin/packages

配置
编辑/etc/wifidog.conf并依照说明操作,一切OK。

首次运行Wifidog
按照以下命令启动Wifidog:
Wifidog –f –d 7

测试:
当客户端获取WIFI后,用浏览器打开你喜欢的网页。
监测运行当中的Wifidog的output。

本文章由 http://www.wifidog.pro/2015/04/01/wifidog%E5%AE%89%E8%A3%85-3.html 整理编辑,转载请注明出处

Wifidog流程wifidog网关协议 V2结构

线程

主程序

  • 启用“status”或者“autheserv”线程
  • 等待状态线程在初始化网络和拒绝客户端之前,成功的下载配置
  • 一旦被初始化,等待连接到它的节点
  • 用以前的方法处理流量(访问登录页面…获取标识,用认证服务器测试标识,提供防火墙规则)

状态线程

  • 连接认证服务器并且每五分钟(默认)发送一次状态
  • Wiifdog uptime
  • System uptime
  • System free memory
  • System load average
  • System network interface list(ifconfig –a).(需要选择wifidog将要使用的接口)

http客户端线程
  当一个新的连接被初始化时,启用此线程。如果有80个人连接到认证服务器,同时就会有80个线程被启用。最好是有个threads pool,但99%的情况都没用,并且会花费很多时间在代码和调试上。

命令行的选项

用所需的数值设置:--auth Authserver’s hostname –lan LAN interface

当wifidog初始化他的config,它应该看到一些选项,如“这是连接登录页面的URL”…

  • 全球化宽带设置
  • 登录页面URL
  • 门户页面URL
  • 计时器

协议的JOSN
如何创建JOSN:

struct json_object *status_object = json_object_new_object();

json_object_object_add(status_object, "wifidog_version", json_object_new_string(VERSION));

json_object_object_add(status_object, "protocol_version", json_object_new_double(2.0));

json_object_object_add(status_object, "node_id", json_object_new_string(node_id));

json_object_object_add(status_object, "fetch_config", json_object_new_boolean(1));
       
struct json_object *node_status_object = json_object_new_object();

json_object_object_add(node_status_object, "wifidog_uptime", json_object_new_int(25));

json_object_object_add(node_status_object, "sys_uptime", json_object_new_int(get_sys_uptime()));

json_object_object_add(node_status_object, "sys_loadavg", json_object_new_double(get_sys_loadavg()));

json_object_object_add(node_status_object, "sys_memfree", json_object_new_int(get_sys_memfree()));

char * json = json_object_to_json_string(status_object);

回复了JOSN字符串

解析:

struct json_object * json_object = json_tokener_parse(the_string);

struct json_object * value_json_object = json_object_object_get(json_object, "node_id");

printf("%s\n", json_object_get_string(value_json_object));

这将在树结构的第一级检索“node_id”。

测试所需防火墙规则的运行(Linux)
这些命令行需要测试试我们所需的所有模块:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT

iptables -D INPUT -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT

iptables -t nat -A PREROUTING -p tcp --dport 9999 -j REDIRECT --to-ports 2060

iptables -t nat -D PREROUTING -p tcp --dport 9999 -j REDIRECT --to-ports 2060

如果运行,我们可以继续操作。我确信还有许多尝试,但这只是个开始。

防火墙规则(Linux)
我们曾使用MARKs来标记流量是已知,未知或是在验证。
现在流量就简单的是已知或未知,指定拒绝规则应该被发送为“拒绝acl规则”。
我们应该尝试停止使用MARKs,因为我们只有255个。
这是我的经验,不全面但还是发布一下:

iptables -t filter -N wd_lan2wan

iptables -t filter -N wd_lan2wan_fromauth 

iptables -t filter -N wd_lan2wan_clients

iptables -t filter -N wd_lan2wan_defaults

iptables -t filter -N wd_incoming_stats

iptables -t filter -I FORWARD 1 -i LAN_INTERFACE -o WAN_INTERFACE -j wd_lan2wan

iptables -t filter -I FORWARD 1 -j wd_incoming_stats

iptables -t filter -A wd_lan2wan -j wd_lan2wan_clients

iptables -t filter -A wd_lan2wan -j wd_lan2wan_defaults

iptables -t nat -N wd_redirect

iptables -t nat -I PREROUTING 1 -j wd_redirect

iptables -t filter -A wd_lan2wan -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

iptables -t filter -A wd_lan2wan_defaults -p tcp --dport 53 -j ACCEPT

iptables -t filter -A wd_lan2wan_defaults -p udp --dport 53 -j ACCEPT

iptables -t filter -A wd_lan2wan_defaults -d AUTHSERV_HOSTNAME -j ACCEPT

iptables -t filter -A wd_lan2wan_defaults -j REJECT

iptables -t filter -A wd_incoming_stats -d 192.168.1.10 -j RETURN

iptables -t filter -A wd_lan2wan_clients -s 192.168.1.10 --match mac --mac-source 01:02:03:04:05:06 -j ACCEPT

iptables -t nat -I wd_redirect 1 -s 192.168.1.10 --match mac --mac-source 01:02:03:04:05 -j ACCEPT

我只添加一个规则来允许客户端,但我们需要计算出这些数据。如果我们能够有两个规则,这样会比较规整,但如果想避免使用REDIRECT规则的话,我们将要在相同的热点来MARK流量。我们能够做到,但需要像以前一样能够获得“magic number”MARK才行。

本文章由 http://www.wifidog.pro/2015/03/31/wifidog%E6%B5%81%E7%A8%8Bwifidog%E5%88%86%E6%9E%90.html 整理编辑,转载请注明出处