Wifidog只认证无线方案

昨天有网友提到我们的固件只限定于br-lan认证,而
不能够单独限定无线,而不限定有线。
目的:在启用wifidog认证的情况下,解决只认证无线用户,不认证有线用户
方案:将无线、或有线接口从原来的br-lan桥上拆下来,单做一个接口,然后wifidog配置上只配置受限的接口!
做法:首先,在lan配置中去掉"VLAN接口"eht0.0,如图所示:

保存,切记是保存!后我们新建一个接口”AA“,进行如图所示配置:保存。

设置完成后再对AA进行物理设置,如图:

设置完成后同样进行保存。进行下一步设置。选择 ”系统“->"管理权”,根据需要选择SSH的管理权,如选用有线进行连接则进行如图所示设置:

最后我们看下防火墙的情况。

网络防火墙:

确定无误之后保存并应用配置。现在就可以单独限制无线进行认证了。如果不关闭AA接口的DHCP服务,可能会引起无线无法自动获取IP。

本文章由 http://www.wifidog.pro/2015/02/09/wifidog%E8%AE%A4%E8%AF%81%E6%97%A0%E7%BA%BF.html 整理编辑,转载请注明出处

DD-Wrt WiFiDog用自建服务器进行WEB认证

首先准备一台刷好DD-Wrt的路由器,进行基本的的联网配置,保证能够正确的连接上网,申请个WEB空间并绑定域名,然后可以安装配置wifidog了.
去WiFidog网站下载认证服务器网站文件,点Download,提示已启用新网址http://www.authpuppy.org,请这个网址下载,点Download,选择 authpuppy-1.0.0-stable.tgz (md5, sig)下载,把下载下来的文件解压,传到你申请的服务器的网站根目录,创建一个mysql或PostgreSQL数据库,建议用PostgreSQL,我用mysql安装没成功,在浏览器中打开http://你的域名/web,运行安装向导,点Let's Go开始,检查文件目录权限,点Next继续,Db type选择数据库类型,Db server填你的数据库地址默认localhost,Db name填你创建的数据库名称,Db username Dbpassword 填入你登陆的数据库用户名密码,然后继续会创建数据表,输入管理员账号密码,然后完成了,如果无法创建请检查数据库配置,认证服务器就安装完成了,下一步就可以配置了.

打开http://你的域名/web打开管理登陆页面,点Administrative login输入管理员账号登陆.Server configuration进行服务器配置,Site name填入服务器的名称,Main url填入一个链接,这个链接是认证页面logo所链接的页面,不是认证网关地址,Show administrative login link?显示管理登陆链接,Show network login link显示用户登录链接,Show node and connection information显示连接信息链接,Support link用户支持的链接,Support text用户支持信息,Logo选择网站logo图片,Email from给用户发送邮件的发件人,不填会影响用户自主注册的认证邮件发送,Name from发件人,Connection expiry登陆后连接超时时间,Available languages可用的语言列表,设置好后 save保存.

User创建管理管理员账号与客服账号
Manage nodes管理节点,new新建.然后新窗口打开路由器的管理页面,服务-热点,wifidog-启用

wifidog认证服务器        路由器            说明

Name                    Web服务器名        服务器名称

gw id                   网关ID            节点网关ID

Description                               节点描述         

Deployment status                         运行状态选ln planning

Address civic number等                    联系地址的信息

                        鉴权服务器主机名   你申请的域名 例yourdomain.com

                        鉴权服务器SSL启用  禁用

                        鉴权服务器HTTP端口 80

                        鉴权服务器路径     /web/    注意/

然后都保存应用

Manage plugins可以增加各种插件,以增加功能,View all available plugins and updates,显示所有插件,安装apAuthLocalUserPlugin 插件,并配置,可以进行免费注册账号认证上网

现在用路由器打开网址就会提示登陆,Signup for a free account创建用户账号,需要选择邮件验证,验证后可登陆上网

通过安装其他插件以实现认证上网.

本文章由 http://www.wifidog.pro/2015/02/09/wifidog-web-1.html 整理编辑,转载请注明出处

wifidog相关的AC、AP以及ACL

做WIFI实施部署,涉及几个概念:AP、AC、无线路由器、认证,简单说来:
AP就是无线接入点。
无线路由器大致可以理解为:AP+路由
AC是用来管理AP用的,可以对AP进行集中式管理。这在诸如连锁店、大公司部署需要支撑上百个接入点以及复杂的控制措施(例如多级认证,微·商白皮书中提到的全国漫游)等就需要AC。
AC最重要的职能是完成对接入设备的认证、授权、计费(AAA),一般采用Radius协议来完成。认证、授权的凭证包括终端的MAC地址等等信息(Radius系统一般放在云端,大家常用的宽带拨号上网的认证都是基于Radius认证)。
终端设备要接入网络,必须在AC的ACL(访问控制列表中)有对应的匹配项,对终端的标识包括MAC地址、IP等信息。

本文章由 http://www.wifidog.pro/2015/02/06/wifidog-ac.html 整理编辑,转载请注明出处

WIFIdog 协议分析与应用

WIFIdog 简单说就是用户在wifi环境下使用wifi交互登陆的方法

Wifidog Portal认证示例PHP脚本

转载自:http://talk.withme.me/?p=267#codesyntax_7

wifi 路由推荐使用海蜘蛛 3.3 wifi营销固件

这里路由简称 AP

验证服务器简称 AUTH SERVSER

AP 请求是使用$_GET 方法传递数据给AUTH SERVSER

请求参数

下面的参数获取为简写

    $stage = isset($_GET["stage"]) ? $_GET["stage"] : null;
    $ip = isset($_GET["ip"]) ? $_GET["ip"] : null;
    $mac = isset($_GET["mac"]) ? $_GET["mac"] : null;
    $token = isset($_GET["token"]) ? $_GET["token"] : null;
    $incoming = isset($_GET["incoming"]) ? $_GET["incoming"] : null;
    $outgoing = isset($_GET["outgoing"]) ? $_GET["outgoing"] : null;
    $gw_id = isset($_GET["gw_id"]) ? $_GET["gw_id"] : null;

实例

先介绍数据库的结构,我构建的数据库名是portal,表名是User,用于记录等录用用户的用户名、密码等的信息:

create database portal;
CREATE TABLE `User` (
`Username` varchar(255) NOT NULL,
`Password` text NOT NULL,
`Token` text,
`LoginTime` datetime DEFAULT NULL,
`Gw_address` text,
`Gw_port` text,
`Gw_id` text,
`Mac` text,
`Url` text,
PRIMARY KEY (`Username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

首先介绍的是登陆脚本,即上一篇文章介绍的LoginScriptPathFragment配置项配置的脚本(详细介绍见上一篇文章)。

auth.php,主要用于认证服务器验证路由网关提交的token。

<?php
    //首先获取URL传递过来的参数,包括stage、ip、mac、token、incoming、outgoing和gw_id.
    $stage = isset($_GET["stage"]) ? $_GET["stage"] : null;
    $ip = isset($_GET["ip"]) ? $_GET["ip"] : null;
    $mac = isset($_GET["mac"]) ? $_GET["mac"] : null;
    $token = isset($_GET["token"]) ? $_GET["token"] : null;
    $incoming = isset($_GET["incoming"]) ? $_GET["incoming"] : null;
    $outgoing = isset($_GET["outgoing"]) ? $_GET["outgoing"] : null;
    $gw_id = isset($_GET["gw_id"]) ? $_GET["gw_id"] : null;
    //mac和token是必需参数,不能为空,只有mac和token均不为空才有可能通过验证,缺失参数将不显示登录表单.
    if(!empty($mac) && !empty($token)){
        //mysql连接,相应的参数mysql_host、mysql_user和mysql_password需要换成你自己的参数.
        $con = mysql_connect(‘mysql_host’, ‘mysql_user’, ‘mysql_password’);
        //数据库连接失败,验证不通过.
        if(!$con){
            echo "Auth: 0";
        }
        else{
            //选择mysql数据库,如果你的数据库名不是portal,请自行更改.
            mysql_select_db(‘portal’, $con);
            //用户登陆成功后,会把用户的参数(ip、mac和系统自动生成的token等)记录到数据库,系统主要通过mac识别用户,当然这种方式在大规模系统中可能存在漏洞.
            $result = mysql_query("SELECT * FROM User WHERE Mac='".$mac."' AND Token='".$token."'");
            //如果token匹配,验证通过,否则验证失败.
            if(!empty($result) && mysql_num_rows($result) != 0){
                echo "Auth: 1";
            }
            else{
                echo "Auth: 0";
            }
        }
    }
    else{
        echo "Auth: 0";
    }
?>

接下来介绍的是登陆成功脚本,即上文介绍的PortalScriptPathFragment配置项配置的脚本(详细介绍见上一篇文章)。

portal.php,主要作用是告知用户登录成功,并跳转用户登录前访问的页面。

<?php
    //告知用户登陆成功.
    echo ‘登录成功’;
    //认证前用户访问任意url,然后被重定向登录页面,session记录的是这个“任意url”.
    $url = $_SESSION["url"];
    //跳转到登陆前页面.
    header("Location: ".$url);
?>

当然,这个脚本没有任何界面,为提升用户体验,你可以设计一个好的界面,显示登陆成功信息。

接下来介绍的是错误信息展示脚本,即上文介绍的MsgScriptPathFragment配置项配置的脚本,(详细介绍见上一篇文章)。

gw_message.php,主要作用是当认证过程出现错误的时候,向用户显示用户信息。

<?php
    $message = null;
    if(isset($_GET["message"])){
        $message = $_GET["message"];
    }
    echo $message;
?>

脚本非常简单,错误信息就在message参数中,告知用户即可。当然这个错误信息是英文的,如有需要,可以做做翻译,以提升用户体验。这个脚本同样没有任何界面,需自行设计。

接下来介绍的是心跳脚本,即上文介绍的PingScriptPathFragment配置项配置的脚本,(详细介绍见上一篇文章)。
ping.php,其主要作用是路由确认认证服务器仍然存活,没有死机,另外一个功能是认证服务器可以收集路由的负载等的信息。路由器会定时访问这个脚本,脚本必须回复Pong,否则将认为认证服务器失效而出错。

<?php
    echo ‘Pong’;
?>

最后介绍的是登陆脚本,即上文介绍的AuthScriptPathFragment配置项配置的脚本,(详细介绍见上一篇文章)。

login.php,主要作用是显示登录界面,用户登陆成功后,跳转到路由器网关的特定接口。

<?php
    //获取url传递过来的参数
    $gw_address = isset($_GET["gw_address"]) ? $_GET["gw_address"] : null;
    $gw_port = isset($_GET["gw_port"]) ? $_GET["gw_port"] : null;
    $gw_id = isset($_GET["gw_id"]) ? $_GET["gw_id"] : null;
    $mac = isset(isset($_GET["mac"]) ? isset($_GET["mac"] : null;
    $url = isset($_GET["url"]) ? $_GET["url"] : null;
    //gw_address、gw_port、gw_id和mac是必需参数,缺少不能认证成功.
    if(!empty($gw_address) && !empty($gw_port) && !empty($gw_id) && !empty($mac)){
        //参数初始化
        $post_username = null;
        $post_password = null;
        $error_message = null;
        //如果用户提交用户名和密码,进行验证
        if(isset($_POST["username"]) && isset($_POST["password"])){
            $post_username = $_POST["username"];
            $post_password = $_POST["password"];
            //mysql数据库连接,相应的参数mysql_host、mysql_user和mysql_password需要换成你自己的参数.
            $con = mysql_connect(‘mysql_host’, ‘mysql_user’, ‘mysql_password’);
            //数据库连接失败,展示错误信息
            if(!$con){
                $error_message = "数据库连接错误!".mysql_error();
                //login_view.php展示的是登陆表单(下文介绍),如有错误,展示错误信息.
                include("login_view.php");
            }
            else{
                //选择mysql数据库,如果你的数据库名不是portal,请自行更改.
                mysql_select_db(‘portal’, $con);
                //用户名和密码验证.
                $result = mysql_query("SELECT * FROM User WHERE Username='".$post_username."' AND Password='".$post_password."'");
                if(!empty($result) && mysql_num_rows($result) != 0){
                    //用户名和密码验证成功,生成随机token.
                    $token = "";
                    $pattern="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ";
                    for($i=0;$i<32;$i++){
                        $token .= $pattern{mt_rand(0,35)};
                    }
                    //把token等参数写入数据库,已被用于后续验证(上文提到的auth.php).
                    mysql_query("Update User SET Token='".$token."', LoginTime='".date("Y-m-d H:i:s")."', Gw_address='".$gw_address."', Gw_port='".$gw_port."', Gw_id='".$gw_id."', Mac='".$mac."', Url='".$url."' WHERE Username='".$post_username."'");
                    $error_message = mysql_error();
                    //把用户名和url存进session,以备后续使用.
                    session_start();
                    $_SESSION['username'] = $post_username;
                    $_SESSION['url'] = $url;
                    //登陆成功,跳转到路由网管指定的页面.
                    header("Location: http://".$gw_address.":".$gw_port."/wifidog/auth?token=".$token);
                }
                else{
                    //登录失败,显示错误信息.
                    $error_message = "用户名或密码错误!";
                    include("login_view.php");
                }
            }
        }
        else{
            include("login_view.php");
        }
    }
?>

Login_view.php登陆表单。

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="language" content="en" />
    <title>Portal Login</title>
</head>
<body>
    <form method="post" action="<?php echo "login.php?gw_address=$gw_address&gw_port=$gw_port&gw_id=$gw_id&mac=$mac&url=$url"; ?>">
        <label for="username">Username</label>
        <input type="text" id="username" name="username" value="<?php echo $post_username; ?>"/>
        <label for="password">Password</label>

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