分类 wifidog服务器 下的文章

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配置wifidog原理流程RADIUS协议特点及登陆过程

RADIUS协议特点
RADIUS协议具有灵活、安全、可扩展性好的特点,具体包括:通过网络传输的认证信息都经过加密,安全性高; 认证方式灵活,支持Unix Passwd、CHAP、挑战-回答认证等多种认证方式, 还支持认证转接(Authentication Forwarding);协议扩展性好,通过变长 的属性串(Attribute Pair)能够进一步扩展RADIUS协议。RADIUS的认证过程如下图:
1.jpg

如上图所示,NAS(Network Access Server,网络访问服务器)被看成RADIUS的客户端,当用户登录到NAS 时,客户端将用户提供的认证信息(如用户名和口令)发送给指定的RADIUS Server,并根据Server的回应作出相应的“允许/不允许登录”的决定。 RADIUS Server 负责接收认证请求并进行认证,然后将认证结果(包括连 接协议、端口信息、 ACL 等授权信息)发送回RADIUS Client,Client根据 授权信息限制用户对资源的访问。 一个RADIUS Server可以作为另一个RADIUS Server的客户端要求认证(即认证转接),以提供灵活的认证方式。 RADIUS Server和Client之间传递的认证信息用一个事先设置的口令进行加密,防止敏感信息泄露。当用户成功的登录后,NAS会向RADIUS Server发送一个连接开始的记账信 息包,其中包括用户使用的连接种类、协议和其他自定义信息;当用户断开连接后,NAS会向RADIUS Server发送一个连接结束的记账信息包,RADIUS Server根据设置为用户记账。

RADIUS登录过程
 下面是一个典型的RADIUS登录过程:
  远程用户登录NAS;
  NAS发送“RADIUS Access-Request”到RADIUS Server,其中包括用户名、密码等信息;如果该用户使用“挑战-回答”认证,RADIUS Server 将发送包含挑战信息的“RADIUS Access-Challenge”消息,NAS将挑战信息显示给用户;
  用户将回答提交给NAS,NAS将发送第二个“RADIUS Access-Request”,Server 将根据此信息进行认证,这个过程类似于前面介绍过得CHAP认证方式;
  RADIUS Server 将根据事先设置的认证方式(CHAP、用户名口令、挑战应答等)认证该用户,并发回“RADIUS Access-Accept”;或拒绝该用户,并发回“RADIUS Access-Reject”消息;
  NAS通知Server开始Accounting,用户访问进程开始,当用户结束进程时,NAS通知Server结束Accounting进程。
  基于RADIUS协议的认证方式由于其安全、灵活、可扩展性等特点被广泛应用,其认证机制的实现包括了用户名+口令、基于对称加密、基于非对称加密等多种方式,可以根据实际的安全需求具体实施。

本文章由 http://www.wifidog.pro/2015/03/26/wifidog%E9%85%8D%E7%BD%AE%E6%B5%81%E7%A8%8B.html 整理编辑,转载请注明出处

wifidog服务器搭建建立免费的RADIUS认证服务器

RADIUS认证服务器(Remote Authentication Dial In User Service,远程用户拨号认证系统)是目前应用最广泛的AAA协议(AAA=authentication、Authorization、Accounting,即认证、授权、计费)。AAA协议的典型操作是验证用户名和密码是否合法(认证),分配IP地址(授权),登记上线/下线时间(计费),电信业窄带/宽带拨号都使用大型RADIUS认证服务器。而随着网络安全需求提高,中小企业的局域网集中用户认证,特别是使用VPDN专网的也逐渐需要建立自己的认证服务器以管理拨号用户。这些用户不需要使用昂贵的专业系统,采用PC服务器和Linux系统的Freeradius+MySQL可靠地实现。本文着重介绍RADIUS系统在VPDN拨号二次认证中的应用。

Freeradius的安装

  笔者采用FC4 for x86_64系统上的freeradius-1.1.2,在中档PC服务器上运行,系统运行稳定可靠。Linux FC4自带Freeradius和MySQL,不过实测不理想。FC4 MySQL对中文支持不好,而freeradius则仅支持其自带MySQL。所以,在编译MySQL时要加入选项“--with-charset=gb2312”以支持中文字符编码。编译Freeradius时可使用缺省选项。在64位Linux系统上编译前配置时需要加入选项“—with-snmp=no”,因为与库文件snmp相关的库对64位支持有问题,最新的FC7也许没有这些问题。Freeradius提供了MySQL建库脚本——db-MySQL.sql,不过建nas库有1个语法错误,将“id int(10) DEFAULT ‘0’;”中的“DEFAULT ‘0’”去掉即可正常建立Radius库。

Freeradius的设置

  简单少数用户可使用Freeradius缺省的users文件配置用户,根据文件制定的规则和用户工作。安装完毕后启动Radius服务:/usr/loca

  l/sbin/radiusd –X。本机运行radtest test test localhost 0 testing123发认证请求,得到回应表示Radius服务器工作正常。

  Radius服务器缺省使用/usr/local/etc/raddb/users文件工件认证,简单易行,但仅适用于少数用户。如果管理几十个或更多用户,应使用数据库,对于少于一万用户而言,MySQL是合适选择。

MySQL认证的设置

  在配置文件radiusd.conf中,在authorize{}和accountingt{}设置中去掉sql前注释符。在sql.conf中设置MySQL的连接信息,用户/密码和地址,本机用localhost即可。www.linuxidc.com还需要在users中对DEFAULT用户做如下设置:Auth-Type = Local,Fall-Through = 1。这样,才可正确使用MySQL进行认证。

  在MySQL中设置用户的规则与users文件用户设置有对应关系。Radius认证是以Attribute = Value的形式提供认证和应答消息。在users文件中,与用户名位于同一行,以“,”分隔的各个属性是认证请求必须提供而且需要验证的属性。下面各行属性如IP地址等加入应答包中。在MySQL中不分组情况下,只要在radcheck表中加入密码,在radreply中加入应答信息如IP地址即可。

  实际使用时,往往使用username@domain形式用户进行认证。用文件方式时,可以通过设置剥离域名,只建立username认证即可。需要在radiusd.conf中加入一项realm domain { format=suffix… }域说明,并在proxy.conf中realm DEFAULT使用LOCAL认证。用MySQL认证时,缺省的sql.conf中使用带域名的全名进行认证。使用剥离域名的用户认证,注释掉缺省的sql_user_name = "%{User-Name}",开放原来注释掉的sql_user_name = "%{Stripped-User-Name:-%{User-Name:-DEFAULT}}"定义语句,则优先使用剥离域名的用户名进行认证。表中用户名一项只需写用户名即可,不需要域名。

  最后,打开防火墙是必要的。缺省Radius认证服务器使用UDP 1812端口认证,UDP1813端口计费,应该开放UDP包的进出。

Iptables –A OUTPUT –p udp –d 192.168.10.3 --sport 1812 –j ACCEPT

  Iptables –A INPUT –p udp –s 192.168.10.3 --dport 1812 –j ACCEPT

  其中192.168.10.3是认证客户端的地址,通常是LNS路由器,同理开放UDP 1813计费端口。

  CISCO路由器的设置

  CISCO 路由器是经典的RADIUS客户端,在VPDN拨号系统中LNS作为二次认证客户端。在clie

  nts.conf中定义客户端IP地址和共享密钥。对单网口的低级路由器来说,客户端的IP地址就是网口IP。对于中高级路由器来说,路由器缺省使用第一个网口IP作为客户端源IP,如果是不可路由的内网地址,则客户端无法收到认证应答包。要指定IP,使用如下语句:

  ip radius source-interface FastEthernet0/1

  其中FastEthernet0/1的IP指定作为认证客户端的源地址。一般做法是在VPDN-GROUP定义中使用source-ip 语句指定IP,不过重启路由器后必须重新设置RADIUS服务器才能生效。

  另一个关于CISCO设置是使用多个认证服务器。中高档路由器通常可支持不同的拨号接入。不同拨号接入使用不同的认证服务器。CISCO中使用不同的server-group实现。

  aaa authorization network aaa-radius1 start-stop group radius1

  aaa authorization network aaa-radius2 start-stop group radius2

  也可根据需要定义authentication/accounting使用的server-group。

  在每个接入的PPP Virtual-Template模板中,ppp可选择不同的server-group进行AAA认证。

  interface Virtual-Template1

  ppp authorization aaa-radius1

  ……

  interface Virtual-Template2

  ppp authorization aaa-radius2

  ……

  这样实现一个路由器作为多个使用不同RADIUS服务器的拨号LNS路由器功能。

  用户物理绑定的实现

  实现用户物理绑定,特定用户只能在特定的电话号码或端口号上发起连接才能认证成功,可以大大提高认证安全性。在窄带系统中,LAC在拨入接入服务器LAC进行一次认证时,就向RADIUS服务器提供主叫号码,二次认证时该属性就被提交给RADIUS服务器。如电话号码为1234567,用户拨号,请求中包含属性Calling-Station-Id = "1234567"。为了实现主叫号码绑定,首先在radiusd.conf配置文件中起用对主叫号码的检查,即checkval {}中的内容。在使用users文件认证时,在用户名定义的同一行内加入Calling-Station-Id = "1234567"即可。使用MySQL认证时,在radcheck表中加入“Calling-Station-Id,”+=”,”1234567””这条记录即可。

  对于ADSL宽带来说,不能使用电话号码绑定。不同宽带设备可提供不同的绑定方式。其实现要点也是必须在发出认证请求中包含其物理端口或其它物理信息,Radius服务器在字典定义该属性,在users文件或MySQL中加入约束值即可。

本文章由 http://www.wifidog.pro/2015/03/26/wifidog%E6%9C%8D%E5%8A%A1%E5%99%A8.html 整理编辑,转载请注明出处

wifidog认证服务器Wiwiz Auth API集成示例代码(PHP版)

<?php

$userkey = "8C447CEAC649C9CC";  // replace with your own user key

//****************************************************
// Gets incoming parameters
//****************************************************

$pTokencode = $_REQUEST["tokencode"];   // incoming parameter "tokencode"
$pSrvurl = $_REQUEST["srvurl"];     // incoming parameter "srvurl"

session_start();
if($pTokencode != null) 
    $_SESSION['tokencode'] = $pTokencode;
if($pSrvurl != null)
    $_SESSION['srvurl'] = $pSrvurl;
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Language" content="zh">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<title> Wiwiz Auth API Usage Sample </title>
</head>
<body>

<form method="post">

User Name: <input type="text" name="username" />
<br>

Password: <input type="password" name="pswd" />
<br>

<input type="submit" name="login" value="Login" />
<br>

<?php
if(isset($_REQUEST['login'])) { // if "Login" button is clicked

    //****************************************************
    // Step 1. Do your business. E.g. check user login ... 
    //****************************************************

    $loginSuccess = false;
    //
    // Do something you need.
    // e.g. verify the user
    //      ......
    //

    $loginSuccess = true; // assume login successful

    if($loginSuccess == false) {

        echo "Login Failed!";   // if user login failed, show an error message

    } else {

        //****************************************************
        // Step 2. Do the pre-auth by calling Wiwiz Auth API
        // IMPORTANT: Do this on your server side(ASP, C#, JSP/Servlet, PHP...), 
        //            but DO NOT do this on your client side (HTML/Javascript)
        //****************************************************

        // parameter "action" : REQUIRED!
        // set it to "1" to authenticate the user
        // set it to "0" to block the user
        $action = "1";

        // parameter "tokencode": REQUIRED!
        // set identical to the incoming parameter
        $tokencode = $_SESSION['tokencode'];

        // parameter "srvurl": REQUIRED!
        // set identical to the incoming parameter  
        $srvurl = $_SESSION['srvurl'];

        // parameter "endtime" : OPTIONAL
        // Format: yyyy-mm-dd hh:MM:ss  e.g. 2012-05-31 21:39:00
        // set this parameter to set the time to close the user's Internet connection 
        // Note: the value must be url-encoded.  
        $endtime = urlencode('2012-05-31 21:39:00');

        // parameter "postauth" : OPTIONAL
        // E.g. http://www.YourDomain.com
        // set this parameter to redirect to a specified URL after authenticated.
        // Note: the value should be url-encoded.  
        $postauth = urlencode("http://www.wiwiz.com");

        $parameters = "?wiwiz_auth_api=1&ver=1.0". // parameter "wiwiz_auth_api" and "ver". Fixed value
                "&tokencode=". $tokencode . // parameter "tokencode". See above
                "&userkey=". $userkey .     // parameter "userkey". Set your own User Key
                "&action=". $action .       // parameter "action". See above
                "&endtime=". $endtime .     // parameter "endtime". See above
                "&postauth=". $postauth;    // parameter "postauth". See above

        $verifycode = file_get_contents($srvurl . $parameters); // gets "verifycode" - the verification result from Wiwiz server side

        $userstring = $_REQUEST['username'];                    // sets the Track Data (Optional), e.g. username

        if (strpos ($verifycode, "ERR") === 0) {
            // if there is an error, show error code
            echo "Error: ". $verifycode;

        } else {
            // OK, now. do Step 3.

            //****************************************************
            // Step 3. Complete the Authentication by calling Wiwiz Auth API
            //****************************************************  
            $redirectUrl = $srvurl.     // use the value of incoming parameter "srvurl" as the redirection address
                    "?wiwiz_auth_api_login=1".  // parameter "wiwiz_auth_api_login"
                    "&tokencode=". $tokencode . // parameter "tokencode", set identical to the incoming parameter   
                    "&verifycode=". $verifycode .   // parameter "verifycode", the verification result from Wiwiz server side
                    "&userstring=". $userstring;    // parameter "userstring" (Optional), the Track Data set by the user

            ob_start();
            header("Location: ". $redirectUrl); // finally, do the redirection
            ob_flush();

//          echo "<script>location.href=\"". $redirectUrl ."\"</script>";

        }

    }
}
?>

</form>

</body>
</html>

本文章由 http://www.wifidog.pro/2015/03/20/wifidog%E8%AE%A4%E8%AF%81%E6%9C%8D%E5%8A%A1%E5%99%A8PHP%E7%89%88.html 整理编辑,转载请注明出处