分类 wifidog安装 下的文章

Wifidog初分析(一)

一、综述

wifidog是搭建无线热点认证系统的解决方案之一,他比nocat、nodog更适合互联网营销思路。常见的使用在openwrt系统上,它实现了路由器和认证服务器的数据交互,在路由器方(客户端)是用C 语言代码,通过wifidog程序和linux iptables防火墙实现接入用户的认证跳转和控制。在认证服务器方(服务端)是通过php(还有java版本的)实现用户的认证流程和管理。

优点:有开源代码,可以很方便的搭建认证系统。方便用户进行需求定制。

缺点:通过iptables方式实现,性能比较差,整体拉低了路由器的数据包处理速度,协议比较繁琐,对认证服务器的造成性能损耗比较大。

二、wifidog 结构分析

Wifidog 客户端代码简析:

├── libhttpd

│ ├── api.c

│ ├── httpd.h

│ ├── httpd_priv.h

│ ├── ip_acl.c

│ ├── Makefile.am

│ ├── protocol.c

│ ├── README

│ └── version.c

├── src

│ ├── auth.c

│ ├── auth.h

│ ├── centralserver.c

│ ├── centralserver.h

│ ├── client_list.c

│ ├── client_list.h

│ ├── commandline.c

│ ├── commandline.h

│ ├── common.h

│ ├── conf.c

│ ├── conf.h

│ ├── debug.c

│ ├── debug.h

│ ├── firewall.c

│ ├── firewall.h

│ ├── fw_iptables.c

│ ├── fw_iptables.h

│ ├── gateway.c

│ ├── gateway.h

│ ├── http.c

│ ├── httpd_thread.c

│ ├── httpd_thread.h

│ ├── http.h

│ ├── Makefile.am

│ ├── ping_thread.c

│ ├── ping_thread.h

│ ├── safe.c

│ ├── safe.h

│ ├── util.c

│ ├── util.h

│ ├── wdctl.c

│ ├── wdctl.h

│ ├── wdctl_thread.c

│ └── wdctl_thread.h

这是wifidog的部分源码。

下面再来看看wifidog的认证流程图:
1.png

认证的大致流程可以从上图中看到。下面结合代码的实现与图1来说下wifidog 的工作过程。

1、在网关上配置好wifidog.conf 后,运行wifidog程序。此时wifidog对wifidog.conf进行解析,并获取其中的配置选项。如:认证服务的地址或url 项Hostname 192.168.2.103 还有认证服务下的文件选项。如果为根目录下就是认证服务的处理程序,那么就设置为 Path /。Wifidog启动时会将这些参数读取,并保持在一个数组中,以供之后使用。然后调用iptables加入防火墙规则,阻止所以连接网关的用户上网。但是到达认证服务器的规则是打开的状态。

 0 ACCEPT     all  --  *      *       0.0.0.0/0            192.168.2.103

 55  2772 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80 redir ports 2060

小结:此节主要用到conf.* 解析配置文件,firewall.* fw_iptables.* 进行防火墙规则添加 。

2、程序运行起来后,当有用户进行外网访问时。根据②中的防火墙规则,会将HTTP请求的外部IP地址和端口通过NAT方式重定向至本地wifidog内嵌HTTP服务器的地址和端口上,并由内嵌HTTP服务器进行服务,而内嵌HTTP服务器的路径和回调处理。然后将具体的请求信息发送给认证服务器。代码不详谈,下面看个实例URL:

POST /authpuppy/web/login/?gw_address=192.168.2.1&gw_port=2060&gw_id=default&url=http%3A//quietmadman.blog.51cto.com/3269500/1384761 HTTP/1.1

当我访问时,wifidog 将我访问的url重定向到上述的url上。目的就是去服务端做认证。

可以看到这里有这几个参数信息:

gw_address,路由器的LAN地址

gw_port:为wifidog的监听端口

gw_id:路由器的标识名

mac:客户端设备的MAC地址

url:为客户端访问的原URL(以便于重定向)

3、接步骤2,wifidog发送上述的url给认证服务器。这里我们使用的认证服务器是authpuppy。安装了apAuthSplashOnlyPlugin 插件。该插件无需输入用户名、密码,但需要点击按钮方可上网,也算是无秘钥认证。

接下来说下抓包看到的认证过程:

POST /authpuppy/web/login/?gw_address=192.168.2.1&gw_port=2060&gw_id=default&url=http%3A//quietmadman.blog.51cto.com/3269500/1384761 HTTP/1.1

... ...

Referer: http://192.168.2.103/authpuppy/web/login/?gw_address=192.168.2.1&gw_port=2060&gw_id=default&url=http%3A//quietmadman.blog.51cto.com/3269500/1384761

Cookie: authpuppy=3oft24lljrish4731dibh2ji80

gw_id=default&gw_address=192.168.2.1&gw_port=2060&authenticator=apAuthSplashOnly&submit%5BapAuthSplashOnlyConnect%5D=Connect&apAuthSplashOnly%5Boptional_name%5D=HTTP/1.1 302 Found

... ...

Location: http://192.168.2.1:2060/wifidog/auth?token=8eb3aae0ade3492cad361443ac54b9dcb644dbb2

上述过程是wifidog给认证服务器发送请求认证的URL,服务器收到后回送一个带token值的url到网关上。此段处理在服务端。网关收到后再次发送信息给认证服务器,如下报文:

GET /wifidog/auth?token=8eb3aae0ade3492cad361443ac54b9dcb644dbb2 HTTP/1.1

... ...

HTTP/1.0 307 Redirect to portal

Server: Hughes Technologies Embedded Server

Location: http://192.168.2.103:80/authpuppy/web/portal/?gw_id=default

Date: Mon, 07 Jul 2014 15:16:00 GMT

... ...

GET /authpuppy/web/auth/?stage=login&ip=192.168.2.222&mac=64:27:37:e1:c3:d3&token=8eb3aae0ade3492cad361443ac54b9dcb644dbb2&incoming=0&outgoing=0&gw_id=default HTTP/1.0

... ...

网关GET到token后,陆续的向认证服务器发送相关认证信息。

这里主要是两大步骤:
1)通过调用 auth_server_request(&auth_response, REQUEST_TYPE_LOGIN, r->clientAddr, mac, token, 0, 0); 让 认证服务器 对该客户端的 token 进行校验;

2)根据 认证服务器 返回的 token 校验结果进行不同的处理(主要是对该客户端的防火墙过滤规则进行不同的设置),这里主要以 AUTH_ALLOWED 校验结果进行分析,这里主要是两个动作:

2).1,通过 fw_allow 函数调用对此客户端"放行";

2).2,返回重定向至 认证服务器的 portal 路径访问的响应

GET /authpuppy/web/portal/?gw_id=default HTTP/1.1

Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, /

Referer: http://192.168.2.103/authpuppy/web/login/?gw_address=192.168.2.1&gw_port=2060&gw_id=default&url=http%3A//quietmadman.blog.51cto.com/3269500/1384761

... ...

Host: 192.168.2.103

... ...

Location: http://quietmadman.blog.51cto.com/3269500/1384761

Wifidog返回信息到认证服务器的portal,portal返回给网关的信息如上。最后重定向到用户最初始访问的url上。

Wifidog 的client代码大致是这些。

本文章由 http://www.wifidog.pro/2014/12/25/wifidog%E5%88%86%E6%9E%90.html 整理编辑,转载请注明出处

WiFiDog 摘要

Wifidog被设计用于替换现有的强制网络门户解决方案,我们觉得不适合下一代社会群体的需求. 特别是, 开发商想为每个热点既个性化和社会各界的广泛内容, 没有弹出窗口, 任何客户端软件和集中管理. 主要作为替代目前使用NoCat门户. 很多其他厂商使用WiFiDog (尤其是在客户端) 作为其解决方案的基础.

主要特点

  1. 强制网络门户,它可以让业主热点与用户沟通 (通过内容分发系统).
  2. Wifidog网关是专为与运行在GNU / Linux服务器和嵌入式Linux设备, E.G. Linksys的WRT54G与OpenWRT的.
  3. 多种语言支持 (通过浏览器检测和用户选择) 与使用。
    英语
    法国人
    德语
    西班牙人
    意大利人
    希腊语
    葡萄牙 (还巴西)
    瑞典
    保加利亚语
    日本
    加泰罗尼亚语
  4. 维护客户端 (热点用户) 通过ping命令检查网络连接活动, 而不是一个JavaScript窗口 (像NoCat使用). 这使得PDA和手机等设备不支持JavaScript的连接.
  5. 支持不同类型的热点:
    1)飞溅Only模式: 用户被重定向到门户, 但不必为了使用服务登录
    2)正常模式: 用户是独一无二的,必须有为了有效的电子邮件地址开户.
  6. 用户可以直接从任何热点的创建工作帐户. 新用户注册上的任何热点, 创建自己的帐户,并授予使用 15 分钟,以确认电子邮件. 如果他们不这样做, 它们断开,必须重新注册.
  7. 通过双向的心脏跳动的热点/节点监控, 所以中央服务器总是知道哪些热点/节点都已启动, 无论动态DNS的, 防火墙, 等等.
  8. 报告和统计,包括:
    10 最高带宽的消费者
    10 最频繁的用户
    10 大多数移动用户
    Anoymised SQL数据导出 (学术研究)
    有多少用户实际使用的网络故障
    连接日志
    内容显示,通过单击报告
    在网络上使用图形 (每小时, 周日和月份)
    个人用户报告, 最流行的节点 (通过访问)
    网络状态信息
    节点的状态信息
    注册登录
    用户注册报告
  9. 自动创建节点 (如果在创建该节点的人具有相关权限,并启用该功能).

最期待的功能:

  1. 用户类
  2. 每级带宽限制
  3. 每个路由器的带宽限制
  4. 每班端口阻挡
  5. 根据一天中的时间应用策略

认证服务器 (当前)

  1. 特定于节点的内容特征. Wifidog-auth的有一个非常酷的本地内容架构.
    RSS feed支持 (可选, 用的magpierss), 每个节点有一个饲料 (URL存储在数据库中, 伟大工程, 但没有GUI来编辑它尚未) 和一个网络范围的RSS提要.
  2. 配置和集成
    无需设置任何路径在Web服务器的配置文件
    所有的路径都是从配置文件编辑
    快速设置: 网络名称, 网址, 默认的RSS, 和类似的数据从配置文件中设置, 并根据需要在整个系统中,将显示.
    可以导入所有的用户和密码从NoCat密码文件 [万维网] 更多信息].
  3. 发育
    演示页,让人们能够更容易地就可以破解
    数据库抽象层具有非常不错的调试功能 (只是真正的追加在通话结束,你会看到查询, 结果, 查询计划, 而受影响的行数. 移植到另一个数据库只需要移植一个文件. 目前使用的Postgres。)
  4. 用户管理 (最终用户)
    用户可以创建并激活帐户没有管理员干预. 该用户将被授予 15 签约以便检索和验证自己的电子邮件分钟后宽限期.
    用户可以请求服务器重新发送验证邮件
    用户可以更改自己的密码
    谁忘记了自己的用户名的用户可以把它邮寄给他们.
    谁失去了他们的密码,用户可以要求系统生成一个新的,并邮寄给他们.
    电子邮件必须是有效的,但不是为了保护用户的隐私展示.
    用户可以使用电子邮件或用户名登录
    强制执行 (礼貌) 重复的电子邮件地址不会在数据库中允许
  5. 日志和监控
    MAC地址记录 (在情况下,它是在你的国家的法律规定)
    重定向到中央服务器,以便允许连接的入口页上之前发送的原始URL
    多语言支持
    脚本和SQL执行时间分解. 已实施, 只需要由模板被打包到,也可以使用.
  6. 报表及统计

网关 (当前)

  1. 支持使用备份auth服务器,如果主之一不响应.
  2. 运行时查询界面
  3. 一个规则的跳, 一个跳出不合格, 一个跳出来接受
  4. 自动检测网络接口的IP地址, 而不是它的配置文件中分别指定.

规格

网站:http://dev.wifidog.org/
价格:免费
许可证:开源
操作系统:Linux的

本文章由 http://www.wifidog.pro/2014/12/25/wifidog.html 整理编辑,转载请注明出处

DD-WRT路由器搭建付费无线热点成功

之前搞定了路由器刷机为DD-Wrt,并实现了路由器无线中继和自动翻墙。今天搞定了使用此路由器搭建付费无线热点。没错,用的是Wiwiz。但是实现了两个功能:

一、自己的设备免认证;

二、未认证前的用户也可以用支付宝付款。

而上面这两个,都是Wiwiz高级版才能实现的功能。可是,高级版$15/月啊!于是,我折腾出一个免费的方法来实现上面这两个功能。如果你想跳过我长篇大论的新手入门内容,请直接拉到文章后半部的粗体部分。

Wiwiz是什么?

Wiwiz HotSpot Builder是一个有线/无线网络热点管理系统,利用它你可以为你的热点创建一个强制门户/强制认证页面(captive portal)。简单点说,就是共享你的网络有偿给大家使用的路由器软件。

官方提供的Wiwiz安装方式:

  1. 一个是直接在dd-wrt固件里的wifidog设置。

这个方法是官方不推荐的方法。官方的不推荐理由是:

– 如创建计费型热点后,热点使用者认证前无法访问Paypal或支付宝在线充值
– 不支持黑/白名单地址列表管理
– 无法打开非内网的用户自定义认证页面URL
– 访问控制中的免认证功能

而我今天实现的两个功能就是用此方法。:)

  1. 直接在支持dd-wrt的路由器上安装他们家的软件。

主要是下面三行命令

cd; wget http://dl.wiwiz.com/hsbuilder-util-latest-DD-WRT.tar.gz
cd /jffs; tar -zxf /tmp/root/hsbuilder-util-latest-DD-WRT.tar.gz
/jffs/usr/local/hsbuilder/hsbuilder_setup4dd-wrt.sh -dest /jffs setup

因为普通版限制太多,我顺便附上卸载的命令:

/jffs/usr/local/hsbuilder/hsbuilder_setup4dd-wrt.sh -dest /jffs uninstall

实现在Wiwiz免费版中设备免认证和支付宝付款

第一种方法其实就是直接在路由器上设置Wifidog参数。就相当于iPhone不越狱,什么软件都在AppStore下载。安全、稳定。

而第二种方法,Wiwiz提供的程序我看不懂,但是这种非原生软件加载到路由器内,我觉得会影响稳定,同时一些后门的东西也说不清楚。

我用的就是第一种方法,设置如下:

登录路由器-服务-热点,然后按如下设置:
1.jpg

网关ID填入你在Wiwiz创建的热点ID。
最关键的就在:信任的Mac列表和防火墙规则设置。

把你想免授权的MAC地址填进来吧~多个MAC地址用英文逗号隔开,MAC地址中间用冒号而不是-

然后我用的防火墙的规则是:

FirewallRuleSet global {
    FirewallRule allow tcp port 443
    FirewallRule allow udp port 53
    FirewallRule allow tcp to 110.75.0.0/16
    FirewallRule allow udp to 218.85.157.99
    FirewallRule allow tcp 121.207.0.0/16
    FirewallRule allow tcp 199.7.0.0/16
    FirewallRule allow tcp 123.150.173.239/32
}
FirewallRuleSet known-users {
    FirewallRule allow to 0.0.0.0/0
}

简要解释下:

全局防火墙global:所有人都可以连接支付宝可能涉及到的IP地址及DNS地址。其中我的DNS是218.85.157.99。这样,用户即使未验证成功,也可以访问支付宝进行付款。

而已经认证成功的用户known-users,就什么都可以访问啦。

此项方案的缺点是:

暂时只支持支付宝余额付款,因为我暂时没有把各大银行可能涉及到的IP加进来。银行实在太多了,而且各大银行都用的CDN,比较麻烦。有空再研究!

后记

其实,Wiwiz是采用Wifidog技术,而Wifidog技术是开源的。而Wiwiz对高级版和提款的手续费收的确实太狠了。

如果你懂Linux,完全可以自己搭建类似wiwiz的平台,搜索wifidog即可。主要要搭建两个系统:Gateway 和 Auth-Server。

本文章由 http://www.wifidog.pro/2014/12/24/ddwrt-%E6%90%AD%E5%BB%BA%E4%BB%98%E8%B4%B9%E6%97%A0%E7%BA%BF%E7%83%AD%E7%82%B9.html 整理编辑,转载请注明出处

Wifidog+Authpuppy认证页面的配置

路由器上用的是wifidog client,服务器后端管理用的是authpuppy。
首先,选择自己的操作系统,在http://www.authpuppy.org/doc/Main_Page网站里面,我的操作系统是Linux。然后到这个网站http://www.authpuppy.org/doc/Getting_Started去下载check_configuration.php 这个文件是检测你的电脑安装authpuppy需要哪些环境,下面是我配置好的环境。
1.jpg

然后到这个http://launchpad.net/authpuppy 下载authpuppy的源码,然后把解压后的authpuppy目录放到apache2的站点目录,我的是ubuntu12.10,安装后的apache2目录是/etc/apache2/sites-available/default,
打开的内容是

<VirtualHost *:80>
   ServerAdmin webmaster@localhost

   DocumentRoot /var/www/
   <Directory />
           Options FollowSymLinks
           AllowOverride All
   </Directory>
   <Directory /var/www/authpuppy/web/>
           Options Indexes FollowSymLinks MultiViews
           AllowOverride All
           Order allow,deny
           allow from all
   </Directory>

   ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
   <Directory “/usr/lib/cgi-bin”>
           AllowOverride None
           Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
           Order allow,deny
           Allow from all
   </Directory>
   ErrorLog ${APACHE_LOG_DIR}/error.log

   # Possible values include: Debug, info, notice, warn, error, crit,
   # alert, emerg.
   LogLevel warn

   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

由于刚开始什么都不懂,都不知道里面目录是什么意思,所以就挑几个来说明下

DocumentRoot /var/www 这个目录是apache2服务器的根目录,也就是说当你打开浏览器在地址栏输入127.0.0.1时,就是进入/var/www/这个目录里面

<Directory /var/www/>
           Options Indexes FollowSymLinks MultiViews
           AllowOverride All
           Order allow,deny
           allow from all
   </Directory>

这个是你在apache里面架设服务器的根目录,比如我架设的是authpuppy,当我一进入authpuppy是/var/www /authpuppy/web/这个目录下的文件,其他的也没什么好讲的。所以我们应该把authpuppy目录放在/var/www/这个目录下面。

接下来就是配置这个apache这个,这个是让我最头疼的地方,配置了好几天,才搞明白是怎么回事。
首先咱们来看下http://www.authpuppy.org/doc/Getting_Started这个里面的配置内容。

2.jpg

我一开始也没多想就直接复制和粘帖,结果安装到第三步就出错了。哦,忘了说怎么安装了,在浏览器的地址栏上输入127.0.0.1查看authpuppy的目录在哪,然后进入authpuppy里面web的目录,就会在网页上跳出安装页面。

再回过来说说apache怎么配置吧,先给大家看看我的配置文件

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  ServerName authpuppy.localhost
  ServerAlias authpuppy.test

  DocumentRoot /var/www/
  DirectoryIndex index.php

   <Directory /var/www/authpuppy/web/>
          Options Indexes FollowSymLinks MultiViews
          AllowOverride All
          Order allow,deny
          allow from all
  </Directory>

  Alias /sf /var/www/authpuppy/lib/vendor/symfony/data/web/sf
  <Directory “/var/www/authpuppy/lib/vendor/symfony/data/web/sf”>
          AllowOverride All
          Allow from All
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  # Possible values include: Debug, info, notice, warn, error, crit,
  # alert, emerg.
  LogLevel warn

  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

不知道大家有没发现这两个目录不一样
ErrorLog /var/log/apache2/authpuppy/error.log
CustomLog /var/log/apache2/authpuppy/access.log

我在我的电脑里面发现/var/log/apache2/里面没有authpuppy这个目录,后来我就把这两个目录改了,最后安装成功。当你见到如下图片的时候就说明你已经安装成功,接下来尽管next就行了。
3.jpg

现在authpuppy已经安装完了,先松一口气吧。

接下来我们就来配置wifidog.conf文件以实现和authpuppy相链接。
这是wifidog.conf文件

http://dev.wifidog.org/browser/trunk/wifidog/wifidog.conf

由于第一次接触路由,所以有几个地方先说明下,自己老是搞乱,给以后的新手留给经验。

最最重要的一点是,在这个配置文件里面第一格不能是空格,否则就会出错。

ExternalInterface br-lan 这个是lan口,这样才能连上路由,比如手机

GatewayInterface eth0.2 这个是wan口,通过这个与authpuppy server通信。所以主机的网卡要和wan同一网络,
我的wan口ip是192.168.2.200,要和Hostname同一网段,才能通信。

AuthServer {
Hostname 192.168.2.2
SSLAvailable yes
Path /authpuppy/web/
}
还有这个Path,一开始我是设置成 / 根目录,结果不行,出现了这个问题:
HTTP Response from Server: [HTTP/1.1 404 Not Found

后来设置成这个目录才可以。还有一点要注意的是Path的目录两边都要加/,不然也会出错。

本文章由 http://www.wifidog.pro/2014/12/24/wifidog-authpuppy%E8%AE%A4%E8%AF%81%E9%A1%B5%E9%9D%A2.html 整理编辑,转载请注明出处