OPNsense用户手册-强制门户

一个强制网络门户允许您通过网页强制认证,或重定向到指定网页。这通常用于热点网络,但也广泛用于企业网络,以便在无线或Internet访问上获得额外的安全层。

典型应用

  • 访客网络
  • 酒店和公共区域无线上网
  • 其他需要的场景

模板管理

OPNsense独特的模板管理器使您可以轻松设置自己的登录页面。同时它还提供其他功能,例如:

  • URL重定向
  • 自定义弹出窗口的选项
  • 自定义启动页面

区域管理

可以在每个接口上设置不同的区域,或者多个接口可以共享一个区域设置。每个区域可以使用不同的强制门户模板或与其他区域共享。

认证

通过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网络和访客访问防火墙。如果您有多个本地网络,则需要使用多个规则阻止它们中的每一个,或者使用更大的子网来覆盖它们。

1.允许访客网络

操作 放行 允许此流量
接口 GUESTNET GuestNet接口
协议 any
源 GUESTNET网络
目的地 any
目标端口范围 any
类别 GuestNet Basic Rules 用于分组规则的类别
描述 Allow Guest Network

单击保存,然后单击应用更改

完成后的规则列表应如下图所示:

../../_images/guestnet_fwrules.png

第4步 – 创建强制门户

转到服务 – >强制门户 – >管理

要添加新区域,请按表单右下角的 。

注意:当使用多个接口与强制网络门户时,每个接口可以有自己的区域,或者多个接口可以共享区域。

本示例的设置如下:

启用 选中
接口 GUESTNET 删除默认值并添加GUESTNET
使用认证 (留空) 删除任何默认设置
空闲超时 0 禁用空闲超时
强制超时 0 没有硬超时
并发用户登录 不选 用户只能登录一次
SSL证书 none 使用普通的http
主机名 (留空) 用于重定向登录页面
允许的地址 (留空)
自定义模板 none 使用默认模板
描述 Guest Network 选择区域的说明

保存并应用

第5步 – 创建模板

模板功能是OPNsense强制门户解决方案最强大的功能之一,它非常容易使用。让我们创建一个自定义登录页面,单击选项卡模板,然后单击右下角的下载图标(

下载
)。

../../_images/template_download.png

现在下载默认模板,我们将使用它来创建自己的模板。解压缩模板zip文件,文件如下所示:

../../_images/template_filelisting.png

可以修改模板的大多数文件,有些是默认文件不能修改。上传后,将忽略对exclude.list中列出的文件所做的任何更改。目前这些包括bootstrap java脚本和一些字体。

启用强制门户后,默认屏幕如下所示:

../../_images/default_login_no_authenticator.png
让我们使用新的徽标和欢迎文本来更改这个默认设置,例如:

../../_images/mycompany_login.png
使用编辑器打开index.html文件进行修改。

让我们对模板进行以下修改:

  1. 将徽标更改为company-logo.png
  2. 删除顶部的导航栏
  3. 从标记中删除高度和宽度
  4. 添加欢迎文本
  5. 建立公司网站的链接

找到以下部分:

并改为:

将公司徽标复制到图像目录。现在压缩模板目录并单击模板选项卡上的 上传新模板。

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/ 。测试的结果应如下图所示:

../../_images/cp-traffic-shaping.png

注意:请记住,在此测试中我们只有一个连接的客户端,因此所有预留带宽都可供我们的客户使用。

皇家酒店示例

这一节我们将实施皇家酒店访客网络解决方案。先按照上面1-7的步骤选择您想要为客人使用的模板。

第8步 – 添加凭证服务器

转到:System->Access->Servers(系统 – >访问- >服务器),然后单击页面右上角的添加服务器。

填写:

描述性名称 Vouchers 凭证服务器的名称
类型 优惠券

单击“ 保存”。

第9步 – 创建优惠券

返回强制门户并选择优惠券(服务 – >强制门户 – >凭证)。单击表单右下角的“ 创建凭证 ”。

让我们为客人创造1天的优惠券:

../../_images/create_vouchers.png
输入有效期(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编辑器合并,此文件可填写在访客凭证(在纸上)。

例如:

../../_images/cp_royalhotel_voucher.png

注意:激活优惠券后,无论用户是否登录或注销,都将使用该时间。对于“使用时间”的解决方案,可以通过设置FreeRADIUS进行记帐来处理。

第10步 – 凭证认证

通过更改区域设置启用凭证身份验证。转到选项卡区域,然后单击旁边的铅笔图标选择访客网络。

将原来身份验证栏的留空字段,改为Vouchers。

完成后,单击“ 保存更改”,然后单击“ 应用”以应用新设置。

现在,用户将看到登录表单作为模板的一部分:

../../_images/cp_voucher_login.png

检查会话

要检查活动会话,请转到服务 – >强制门户 – >会话 ,我们当前的会话如下所示:

../../_images/cp_active_sessions.png
您可以通过单击垃圾箱来删除活动会话。

注意:注意右上角的选择框,您可以在配置多个区域时选择正确的区域。

检查凭证状态

您可以通过转到强制网络门户的凭证页面(服务 – >强制门户 – >凭证)来检查凭证的有效性和活动状态,并选择正确的数据库(在我们的示例中为Wifi day pass )。

../../_images/cp_active_vouchers.png

注意:状态有效意味着它已激活且仍然有效。

高级功能 – 会话弹出窗口

让我们创建一个会话弹出窗口,这样用户就可以看到有关会话和注销的一些细节。我们可以使用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页面的简单更新,以便在成功登录时调用弹出窗口。后者看起来像这样(用一点上下文显示):

../../_images/captiveportal_popup.png

高级功能 – CLI会话状态

OPNsense有一个非常强大的CLI,对于调试目的特别有用。在本示例中,我们将使用cli列出所有活动会话的状态。

在cli提示符下输入以下内容(对于区域ID 0):

configctl captiveportal list_clients 0

输出内容如下:

上一篇
下一篇