分类 wifidog服务器 下的文章

Wifidog初分析(二)

上一节介绍了wifidog 客户端,及网关协议。
三、认证服务端简介

服务端官方推荐的有两个,一个是authpuppy,还有一个是wifidog-auth。两个环境都已经搭建成功。

Authpuppy主要是一个authpuppy.core.php ,类似Linux的管理方式,中心是一个内核文件。扩展功能是以plugin插件的方式进行加载、卸载管理的。

优点:可管理性比较好,随用随加载;不用既可以卸载掉。

缺点:代码不易阅读。因要求易于管理,插件模块形式要求严格。对于小型功能来说浪费时间。

Wifidog-auth显得就是“全面”,理解起来稍微简单。

认证主要分为三块,ping保活、login认证、portal认证。代码可能有不同,但是有相同的协议,以及相同的回复内容。下面是wifidog与服务端通信协议的几个例子。

网关心跳(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"

一个典型的HTTP需求应该是:

GET /ping/?gw_id=001217DA42D2&sys_uptime=742725&sys_memfree=2604&sys_load=0.03&wifidog_uptime=3861 HTTP/1.0( k# O# X) };

User-Agent: WiFiDog 1.1.3_beta62 T. R"

Host: auth.ilesansfil.org

认证服务器认证协议

这个页面描述了当用户已经被认证并允许访问互联网时,为了认证用户和进程,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.% u) i D; j: i4 J' X) \/ P

6 - AUTH_VALIDATION_FAILED - User email validation timeout has occured and user/firewall is deleted7 A% n+ s. z3 O9 r

1 - AUTH_ALLOWED - User was valid, add firewall rules if not present! A" _/ B* a8 ~$ g

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: auth.ilesansfil.org

网关重定向浏览器

客户端浏览器在不同情况下会被重定向到其它页面:

初始化请求:

基于捕捉,客户端会被网关重定向到以下URL:

l login/?gw_address=%s&gw_port=%d&gw_id=%s&url=%s

例如:https://auth.ilesansfil.org/login/?gw_id=0016B6DA9AE0&gw_address=7.0.0.1&gw_port=2060

初始化请求之后

当请求被处理并且客户端已经被重定向到网关时

如果服务器回复AUTH_DENIED:注意你通常在标准认证服务器上看不到这样的提示。客户端将不会被重定向回网关。

l gw_message.php?message=denied

如果服务器回复AUTH_VALIDATION:

l gw_message.php?message=activate

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

l portal/?gw_id=%s

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

l gw_message.php?message=failed_validation

认证服务器重定向浏览器

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

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

本文章由http://www.wifidog.pro/2014/12/25/wifidog-%E5%88%86%E6%9E%90.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 整理编辑,转载请注明出处

DD-WRT刷机及wifidog配置等等总结

最开始想用openwrt,刷了一个,结果发现不会用,里面配置太复杂了,被wan lan搞晕了,一直无法联网,因为在公司路由器本来在一个局域网下,没办法请公司SA帮忙弄了哈,也没有搞定,换DDWRT吧,这个可是有中文界面的,顿觉亲了很多。

ddwrt确实方便很多了,不过一定要注意呀,因为我要用WIFIDOG,之前下了几个版本都没有wifidog的配置,好像可以自己装,没试过,因为最开始测试用的wiwiz,下载到路由器上以后,没法安装,最后直接下了dd-wrt.v24_nokaid_generic.bin这个版本的ddwrt,上面可以直接配置wifidog.org相当的方便。

wifidog认证服务用authpuppy.org,web服务配置(nginx)。

if (!-e $request_filename) {
    rewrite ^(.*) /index.php last;
}

ddwrt => services => hotspot

11.png

gateway id 这个很重要,认证服务需要这个。

服务器路径这个一定要注意哈,加/,这个最开始老是不对,研究了很久。发现原来路径里面少了一个/,导致无法访问到正确的认证接口,如果是路径的最后还要多加一个/哦。亲

认证服务配置

nodes页面里面加一个node,默认会有一个的啦。定义gw_id就是刚才ddwrt wifidog里面配置的那个。

然后去下载一个plugin,做验证的,apAuthLocalUserPlugin,就他了吧。安装以后里面可以配置,页面信息,注册等等。

现在客户端连接上你的WIFI,去测试下吧,应该可以了哦。亲。

下面说下自己开发wifidog服务端接口的问题。

我只实现了4个接口地址,不晓得其他的还有那些哈。E文看的不是很懂,需要的自己可以看http://dev.wifidog.org/wiki/doc/developer/WiFiDogProtocol_V1

/login 这个是连接的时候访问的登录接口 登录成功以后,返回一个302转向到http://gw_server:gw_port/wifidog/auth?token=你的token,这样子就可以了。至于是否需要用户名密码等等登录方法。看你自己咯

/auth 这个接口太重要,之前各种没法验证的原因都是因为没有访问到这个,路由器在刚才拿到login之后的token后,会再次访问这个接口,带上了一些其他参数如ip、MAC地址等等,当然也包括token,服务器端可以再次做验证,这个接口重要是的要返回给路由成功与否,结果如下:

Auth: Number

Number 如下:

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

自己猜内容,我都是猜的。反正我返回的1,就对了。

/ping 这个接口很简单。返回结果内容包含Pong字符串就可以了。

/portal 哦。这个还是有点重要哦,是认证通过以后,路由器自动定向的页面,当然如果你需要返回到用户之前的页面,在/login接口的时候,路由器传入了一个url的地址,那个是用户真的想访问的地址哈。

好吧,打完收工,

本文章由 http://www.wifidog.pro/2014/12/22/DD-WRT%E5%88%B7%E6%9C%BA%E5%8F%8Awifidog%E9%85%8D%E7%BD%AE.html 整理编辑,转载请注明出处

wifidog 小知识点

wifidog 用于无线热点的认证,它是下一代取代NoCat 的软件。
1)和NoCat相比,wifidog 网关协议它更小,有更少的依赖,并运行在嵌入式设备;在认证服务器端,它更多的是可定制的,并且是面向资本基础设施建设门户网站和社区的目的;实践方面,nocat 需要打开一个窗口来保持连接,而wifidog,不用。

2)那么wifidog是怎么工作呢?
网关协议使用防火墙规则来控制通过路由器的流量,当一个用户试图访问网络时,网关将会把浏览器导向认证服务器,在认证服务器上他们可以登录或注册,然后网关和认证服务器沟通是否允许用户访问网络。网关本身也会每隔X分钟向认证服务器发包,表明网关还在工作。细节可以参考wifidog 的流程图:
FlowDiagram.png

3)网关协议运行在具有Netfilter + iptables 的Linux机器上。认证服务器运行在任何支持PHP的Web服务器。当然网关协议和认证服务器可以同时安装在一个linux 机器上。

4)wifidog 认证是不区分有线无线的

5)wifidog 的网关协议和认证服务器都是可以修改的

6)确保ipt_mac.ko和ipt_mark.ko内核模块已经insmod,这些模块都是iptables 的可选部分,iptables这些部分默认不是打开的。

7)auth server交互可以使用xml或者json格式

本文章由 http://www.wifidog.pro/2014/12/18/wifidog-%E6%B3%A8%E6%84%8F%E7%82%B9.html 整理编辑,转载请注明出处