一、什么是PORAL协议
Portal协议提供了这样一种方式。当用户未认证时,控制用户只能访问某些特定的网络资源。当用户需要访问互联网更多资源的时候,必须进行认证。
它不需要用户安装特定的客户端,只需要通过浏览器,当用户没有认证时,通过HTTP重定向到特定的认证页面,引导用户完成认证的过程。并在此过程中开展广告、社区服务等个性化业务。
《华为公司宽带产品Portal协议标准(V2.0)》和《中移动PORTAL协议规范》。这两种标准,在协议上是一脉相承的。
华为的V1.0标准和CMCC的标准基本一样。华为的V2.0标准是在V1.0的标准上稍微有一部分改动。但是引入了报文验证字之后,V2.0标准与V1.0标准完全不兼容。
CMCC的标准还是保持跟华为V1.0标准一致。
本文用PYTHON实现的是华为PORTAL协议V2.0,并且在华为NE40E上测试通过
二、协议交互过程
具体的交互可以参考华为公司宽带产品Portal协议标准(V2.0),(https://wenku.baidu.com/view/df6bb9ffd0f34693daef5ef7ba0d4a7302766c8b.html)这是百度文库里面的,可以免费阅读,但下载需要收费。这里只是简单的说一下:
1、用户访问互联网,BAS当发现用户访问白名单之外的内容时,会把用户的HTTP请求重定向到预先配置的PORTAL WEB服务器。
2、用户的WEB上输入帐号和密码。交点击提交。
3、PORTAL 服务器收到用户的提交后,会按照PORTAL协议跟BAS进行如下交互:
3.1 PORTAL 服务器发送请求挑战REQ_CHALLENGE(CHAP才需要,PAP认证不需要,但本文的实现是使用CHAP的)给BAS。
3.2 BAS根据请求报文里面的用户IP生成相应的challenge,并通过ACK_CHALLENGE发回给PORTAL 服务器
3.3 PORTAL 服务器 接收BAS发过来的ACK_CHALLENGE,并使用该challenge,结合之前收到的用户名和密码,发送认证请求REQ_AUTH给BAS
3.4 BAS收到用户名和密码后,把这些信息发给配置的RADIUS服务器进行认证,并通过ACK_AUTH返回认证结果给PORTAL 服务器
3.5 PORTAL 服务器接收BAS发过来的ACK_AUTH,并发送AFF_ACK_AUTH进行确认
至此PORTAL认证完成,用户可以正常访问互联网。
三、BAS上的配置(以华为NE40E做为示例)
BAS上的配置稍微有点复杂,请参照华为数通的配置参考
//定义IP地址池
ip pool myippool bas local
gateway 2.2.2.1 255.255.255.0
section 0 2.2.2.2 2.2.2.254
dns-server 114.114.114.114
//定义用户组,在白名单里面可以引用这个用户组
user-group wlan
//定义白名单,不需要认证就可以访问的IP
acl number 6100
rule 1 permit ip source user-group wlan destination ip-address 1.1.1.1 0 //允许用户访问PORTAL WEB服务器
rule 1 permit ip source user-group wlan destination ip-address 114.114.114.114 0 //允许用户访问DNS
rule 15 deny ip source user-group wlan destination ip-address 116.8.0.1 0
//定义互联网资源
acl number 6101
rule 15 permit ip source user-group wlan
//定义流分类
traffic classifier wlan_pre_auth operator or
if-match acl 6100
traffic classifier wlan_pre_auth_2 operator or
if-match acl 6101
//定义流动作
traffic behavior http-redirect
http-redirect
traffic behavior permit
//定义全局策略
traffic policy Global_inbound_policy
classifier wlan_pre_auth behavior permit
classifier wlan_pre_auth_2 behavior http-redirect
//应用全局策略
traffic-policy Global_inbound_policy inbound
#
//配置认证前域
domain pre.gl
authentication-scheme default0 //认证前不计费,不认证
accounting-scheme default0
ip-pool myippool //之前配置的地址池
qos-profile B_4M inbound //进行适当的限速
qos-profile B_4M outbound
user-group wlan //配置用户组,这样可以在全局策略里使用基于用户的访问列表进行访问控制
idle-cut 10 1000 //配置空闲策略,以避免用户长期占用地址
web-server 1.1.1.1 //配置PORTAL服务器地址
web-server url http://1.1.1.1:8889 //这里面配置重定向的URL,这个URL的IP一定要在白名单里面,并且可以跟上面的PORTAL服务器地址不一样
http-hostcar enable
//配置全局WEB PORTAL服务
web-auth-server 1.1.1.1 port 50100 key simple yourpass
http-reply exclude destination-ip 1.1.1.1
//配置认证后的域
//先要配置RADIUS服务器
radius-server group myradius.gl
radius-se

本文介绍Portal协议的工作原理及其实现方法,包括协议交互流程、BAS设备配置及Python代码实现细节。适用于希望深入了解Portal协议及其应用的读者。
3267

被折叠的 条评论
为什么被折叠?



