一个强制网络门户允许您通过网页强制认证,或重定向到指定网页。这通常用于热点网络,但也广泛用于企业网络,以便在无线或Internet访问上获得额外的安全层。
典型应用
- 访客网络
- 酒店和公共区域无线上网
- 其他需要的场景
区域管理
可以在每个接口上设置不同的区域,或者多个接口可以共享一个区域设置。每个区域可以使用不同的强制门户模板或与其他区域共享。
认证
通过HTTPS或仅限splash的门户网站进行安全身份验证,并将URL重定向到指定页面,可以使用不同的源来验证区域中的用户:
- LDAP [Microsoft Active Directory]
- Radius
- 本地用户管理
- 优惠券/门票
- 不认证(仅限启动画面)
- 多个(以上组合)
凭证管理
OPNsense的Captive Portal有一个简单的凭证创建系统,可以将凭证导出到csv文件,以便与您喜欢的应用程序一起使用。
超时和重连接
用户空闲一段时间后(空闲超时),可以终止连接和/或即使用户仍然处于活动状态(硬超时),也会在几分钟后断开连接。如果用户在空闲超时和/或硬超时内重新连接,则不需要登录,用户可以恢复其活动会话。
带宽管理
内置流量整形器可用于:
- 均匀分享带宽
- 优先考虑协议端口号和/或IP地址
门户旁路
可以将指定MAC和IP地址列为白名单,以绕过门户网站。
实时报告
集成了实时报告系统,提供:
- 带宽使用IP地址排名(流量图)
- 活跃的会话
- 优惠券剩余时间
基于类别的Web过滤
通过将强制门户与高速缓存代理相结合,可以利用类别Web过滤并为用户阻止某些内容,并通过启用高速缓存来减少带宽并缩短响应时间。另请参见:高速缓存代理
平台集成
通过集成的REST API,强制门户应用程序可以与其他服务集成。请参阅:使用API
设置访客网络
访客网络广泛用于允许客人在酒店,房车公园或企业中控制互联网访问。
注意:对于本示例,我们希望GUESTNET接口与您的实际访客网络交换机或接入点连接。本教程未说明如何设置无线网络。
高级
强制门户也可以与代理的基于类别的Web过滤相结合。本教程将介绍如何组合这两个功能。
先决条件
我们将使用全新的OPNsense安装开始配置,更新到最新的补丁版本(在我们的示例中为16.1.5_1)。本示例的防火墙需要3个网络端口(LAN / WAN / GUESTNET)。
第1步 – 配置接口
对于访客网络,我们将添加一个新接口。转到接口-> 分配并使用 添加新接口。点击保存。新接口将被称为OPT1,单击左侧菜单中的[OPT1]来更改设置。
选择启用接口,并填写以下数据:
描述 | GUESTNET | 接口的描述性名称 |
阻止专用网络 | 不选 | |
阻止bogon网络 | 不选 | |
IPv4配置类型 | 静态IPv4 | |
IPv6配置类型 | 没有 | |
MAC地址 | (留空) | |
MTU | (留空) | |
MSS | (留空) | |
速度和双工 | 默认 | |
静态IPv4地址 | 192.168.200.1/24 | |
IPv4上游网关 | 没有 |
点击保存,然后点击应用更改。
第2步 – 配置DHCP服务器
转到服务-> DHCPv4->,然后单击GUESTNET选项卡。
- 填写以下内容为(其他选项保留默认设置):
启用 | 选中 | 在GUESTNET上启用DCHP服务器 |
范围 | 192.168.200.100-192.168.200.200 | |
DNS服务器 | 192.168.200.1 | 提供带租约的DNS |
网关 | 192.168.200.1 | 提供租约的网关 |
单击保存。
第3步 – 添加防火墙规则
转到防火墙 – >规则,添加新规则。
现在添加以下规则(按执行顺序排列):
1.允许DNS
允许访客访问DNS转发器。规则内容(保留所有其他选项默认):
操作 | 放行 | 允许此流量 |
接口 | GUESTNET | GuestNet接口 |
协议 | TCP / UDP | |
源 | GUESTNET 网络 | |
目标 | GUESTNET 地址 | |
目标端口范围 | DNS / DNS | 从DNS到DNS |
类别 | GuestNet Basic Rules | 用于分组规则的类别 |
描述 | Allow DNS |
单击保存。
2.允许强制门户登录
操作 | 放行 | 允许此流量 |
接口 | GUESTNET | GuestNet接口 |
协议 | TCP | |
源 | GUESTNET网络 | |
目标 | GUESTNET地址 | |
目标端口范围 | 8000/10000 | |
类别 | GuestNet Basic Rules | 用于分组规则的类别 |
描述 | Allow Captive Portal Login |
单击保存。
3.阻止本地网络
操作 | 阻止 | 阻止此流量 |
接口 | GUESTNET | GuestNet接口 |
协议 | 任何 | |
源 | GUESTNET网络 | |
目标 | LAN | |
类别 | GuestNet Basic Rules | 用于分组规则的类别 |
描述 | Block Local Networks |
单击保存。
4.阻止访问防火墙
操作 | 阻止 | 阻止此流量 |
接口 | GUESTNET | GuestNet接口 |
协议 | any | |
源 | GUESTNET网络 | |
目标 | GUESTNET地址 | |
类别 | GuestNet Basic Rules | 用于分组规则的类别 |
描述 | Block Firewall Access |
单击保存。
注意:这些规则用于阻止访问我们的本地LAN网络和访客访问防火墙。如果您有多个本地网络,则需要使用多个规则阻止它们中的每一个,或者使用更大的子网来覆盖它们。
第4步 – 创建强制门户
转到服务 – >强制门户 – >管理
要添加新区域,请按表单右下角的 。
注意:当使用多个接口与强制网络门户时,每个接口可以有自己的区域,或者多个接口可以共享区域。
本示例的设置如下:
启用 | 选中 | |
接口 | GUESTNET | 删除默认值并添加GUESTNET |
使用认证 | (留空) | 删除任何默认设置 |
空闲超时 | 0 | 禁用空闲超时 |
强制超时 | 0 | 没有硬超时 |
并发用户登录 | 不选 | 用户只能登录一次 |
SSL证书 | none | 使用普通的http |
主机名 | (留空) | 用于重定向登录页面 |
允许的地址 | (留空) | |
自定义模板 | none | 使用默认模板 |
描述 | Guest Network | 选择区域的说明 |
保存并应用
第5步 – 创建模板
模板功能是OPNsense强制门户解决方案最强大的功能之一,它非常容易使用。让我们创建一个自定义登录页面,单击选项卡模板,然后单击右下角的下载图标()。
现在下载默认模板,我们将使用它来创建自己的模板。解压缩模板zip文件,文件如下所示:
可以修改模板的大多数文件,有些是默认文件不能修改。上传后,将忽略对exclude.list中列出的文件所做的任何更改。目前这些包括bootstrap java脚本和一些字体。
启用强制门户后,默认屏幕如下所示:
让我们对模板进行以下修改:
- 将徽标更改为company-logo.png
- 删除顶部的导航栏
- 从标记中删除高度和宽度
- 添加欢迎文本
- 建立公司网站的链接
找到以下部分:
并改为:
将公司徽标复制到图像目录。现在压缩模板目录并单击模板选项卡上的 上传新模板。
Download the example Template (full)
输入模板名称,在这里我们使用Company。点击上传
要在GUESTNET接口上启用强制网络门户,只需单击“ 应用”。
第6步 – 限制访客带宽
在本示例中,我们将为访客网络的Internet访问保留10Mbps的下载和1Mbps的上传带宽。这个带宽将在连接的客户端之间平均分配。
注意:通过均匀分享,我们的意思是如果10个用户同时尝试使用尽可能多的带宽,那么每个人都会得到1/10。因此,在本例子中,每个客户端设置为1Mbps下载带宽。
转至:Firewall->Traffic Shaper->Settings(防火墙 – >流控 – >设置)。
单击表单右下角的 ,为下载创建管道,并输入以下详细信息:
启用 | 选中 |
带宽 | 10 |
单位 | Mbit / s |
掩码 | 目标 |
描述 | pipe_10Mbps_down |
单击保存更改。并为上传流量添加另一个管道。
启用 | 选中 |
带宽 | 1 |
单位 | Mbit / s |
掩码 | 目标 |
描述 | pipe_1Mbps_up |
单击保存更改。
创建流量整形器规则。单击规则选项卡,然后按 执行操作。
首先切换高级模式(表单的左上角),然后填写以下详细信息(其他设置保留默认值):
序列 | (保留默认值) |
接口 | WAN |
接口2 | GUESTNET |
方向 | 进 |
目标 | pipe_10Mbps_down |
描述 | Limit Guests download to 10Mbps |
单击保存更改。
序列 | (保留默认值) |
接口 | WAN |
接口2 | GUESTNET |
方向 | 出 |
目标 | pipe_1Mbps_up |
描述 | Limit Guests upload to 1Mbps |
单击保存更改。
现在单击“ 应用”来应用更改。
第7步-测试GuestNet
将您的PC或笔记本电脑连接到访客网络并启动您喜欢的浏览器。输入要浏览的地址,您将看到我们在上一步中使用模板创建的登录表单。单击登录并开始浏览。
要测试您的流量带宽,请访问速度测试站点,例如http://www.speedtest.net/ 。测试的结果应如下图所示:
注意:请记住,在此测试中我们只有一个连接的客户端,因此所有预留带宽都可供我们的客户使用。
皇家酒店示例
这一节我们将实施皇家酒店访客网络解决方案。先按照上面1-7的步骤选择您想要为客人使用的模板。
第8步 – 添加凭证服务器
转到:System->Access->Servers(系统 – >访问- >服务器),然后单击页面右上角的添加服务器。
填写:
描述性名称 | Vouchers | 凭证服务器的名称 |
类型 | 优惠券 |
单击“ 保存”。
第9步 – 创建优惠券
返回强制门户并选择优惠券(服务 – >强制门户 – >凭证)。单击表单右下角的“ 创建凭证 ”。
让我们为客人创造1天的优惠券:
输入有效期(1天),凭证数量和组名称(Wifi day pass)。例如,我们创建了10张优惠券。单击Generate(生成)。
将生成一个名为wifi day pass.csv的文件。该文件的内容如下所示:
username,password,vouchergroup,validity
"IgJw@Pqf","MLi Sb7Ak#","Wifi day pass","86400"
" ?f[@i[","!m*)e(@;F,","Wifi day pass","86400"
"bbtK9mBk","f/jCDL3:)b","Wifi day pass","86400"
"iD%L[jLJ","I#FoZ#g!AY","Wifi day pass","86400"
" 4bA\E[I","CNavt@0ck ","Wifi day pass","86400"
" ,fg/\Sv","#22iIL-iQA","Wifi day pass","86400"
":;Pc\N#s","Y\HuG9vAN$","Wifi day pass","86400"
"00nLb=0Q","0*C_\_Nb_x","Wifi day pass","86400"
"PA$J0YHF","kp!q%9;m)g","Wifi day pass","86400"
"a,mCxbya","LcnCb#g/di","Wifi day pass","86400"
内容如下:
Username | 访客需要登录的用户名 |
password | 客人需要登录的密码 |
vouchergroup | 您创建的组的名称 |
validity | 优惠劵在几秒钟内有效的时间 |
注意:出于安全原因,优惠劵的纯文本密码不会存储在防火墙上。
通过将cvs数据与word、open office或任何其他dtp / text编辑器合并,此文件可填写在访客凭证(在纸上)。
例如:
注意:激活优惠券后,无论用户是否登录或注销,都将使用该时间。对于“使用时间”的解决方案,可以通过设置FreeRADIUS进行记帐来处理。
第10步 – 凭证认证
通过更改区域设置启用凭证身份验证。转到选项卡区域,然后单击旁边的铅笔图标选择访客网络。
将原来身份验证栏的留空字段,改为Vouchers。
完成后,单击“ 保存更改”,然后单击“ 应用”以应用新设置。
现在,用户将看到登录表单作为模板的一部分:
检查凭证状态
您可以通过转到强制网络门户的凭证页面(服务 – >强制门户 – >凭证)来检查凭证的有效性和活动状态,并选择正确的数据库(在我们的示例中为Wifi day pass )。
注意:状态有效意味着它已激活且仍然有效。
高级功能 – 会话弹出窗口
让我们创建一个会话弹出窗口,这样用户就可以看到有关会话和注销的一些细节。我们可以使用OPNsense的内置api来调用。
使用以下api调用(对于区域ID 0):
/api/captiveportal/access/status/0/
此api调用的响应如下所示(对于活动会话):
{"userName":"IgJw@Pqf",
"macAddress":"10:dd:b1:bc:75:46",
"acc_session_timeout":14095,
"authenticated_via":"Vouchers",
"packets_out":2834,
"bytes_in":512869,
"last_accessed":1457527526,
"zoneid":0,
"sessionId":"npd5bd6SIVQeMfIbWBdong==","
startTime":1457526930.1719,
"bytes_out":1322351,
"ipAddress":"192.168.200.100",
"packets_in":3181,
"clientState":"AUTHORIZED"}
你可以点击下面的链接下载完整的演示模板:
Download the example Template (with popup)
该演示包括一个名为session_popup.html的新文件,其中包含显示凭证上剩余时间和注销按钮的所有逻辑。以及对index.html页面的简单更新,以便在成功登录时调用弹出窗口。后者看起来像这样(用一点上下文显示):