入网门户(一)
- 入网门户区域
- 常见的入网门户方案
- 区域配置选项
pfSense的入网门户功能在允许访问Internet之前将用户重定向到在防火墙上托管的网页。 在此页面中,用户可以在授予访问权限之前被强制进行身份验证,或者执行简单的点击操作。入网门户最常见的用途是用于无线热点,或者在允许从无线客户端访问内部网络之前进行额外的验证。 如果需要,它也可以用于有线客户端。 入网门户配置在系统服务>入网门户菜单下。
限制
pfSense入网门户在使用中有一些限制。包括:
不支持IPv6
目前,入网门户还不支持IPv6。
无法逆向入口
一个反向门户,要求对来自互联网进入本地网络的流量进行认证是目前无法实现。
入网门户区域
入网门户区域为不同的接口集定义不同的门户。 例如,局域网和无线可以使用一个门户,而会议室则可以获得一个单独的门户页面。 每个区域都有单独的HTML页面设置、身份验证、允许的地址等。 必须先创建区域,然后才能修改其设置。
注意
一个区域可以有多个接口,但一个接口只能是一个区域的成员。尝试将同一接口添加到多个区域将导致严重错误。
管理入网门户区域
入网门户区域在系统服务>入网门户菜单下进行管理。在此显示区域列表,并且可以从该列表添加、编辑或删除区域。
要创建新的入网门户区域
- 导航至系统服务> 入网门户
- 单击 添加
- 输入一个区域名称,它只能包含字母、数字、数字和下划线。不能使用空格和其他特殊字符
- 如果需要,输入描述说明
- 单击保存并继续,然后转到该区域的门户设置
要编辑现有区域,请在区域行的末尾单击
。要删除现有区域,请在区域行的末尾单击
,并确认该操作。常见的入网门户方案
以下是使用入网门户的一些基本常见场景。
无需认证的门户配置
对于无需认证的简单入网门户,可以:
- 创建一个新的区域
- 选中启用入网门户
- 选择一个接口
- 按门户网站页面中所述上传带有门户内容的HTML页面,无需验证
- 点击保存
其他配置选项可以按区域配置选项中的详细说明进行添加
使用本地身份验证或凭证的门户配置
使用本地认证设置入网门户:
- 创建一个区域
- 选中启用入网门户
- 选择一个接口
- 将认证方法设置为本地用户管理/凭证
- 上传HTML认证页面。
其他配置选项可以按区域配置选项中的详细说明进行添加。然后在用户管理(用户管理和认证)中配置本地用户。
要使用凭证,请前往凭证标签并在创建凭证。有关凭证的更多信息,请参阅凭证。
使用RADIUS认证的门户配置
使用RADIUS身份验证设置入网门户:
-
- 配置RADIUS服务器以允许来自防火墙的请求
- 创建一个区域
- 选中启用入网门户
- 选择一个接口
- 将认证方法设置为RADIUS认证
- 在主认证源下填写主RADIUS服务器的设置
阅读下一节以获取有关特定配置选项的信息。
区域配置选项
本节介绍每个入网门户配置选项。 在系统服务>入网门户下创建了入网门户区域后,即可使用这些选项。 这些选项都为每个区域独立工作。 例如,区域中指定的允许IP地址仅影响该区域:
- 接口:确定将为此入网门户区域激活的接口。这不能是WAN接口。如果它是实际的网桥(例如,网桥0)并且具有分配的IP地址,它就可以使用这个网桥接口。
- 并发连接:指定每个IP地址到门户网站服务器的最大并发连接数。 默认值是4,这对大多数环境都是足够的。 此限制旨在防止单个主机耗尽防火墙上的所有资源,无论是无意的还是故意的, 否则这会成为一个问题。一个例子是感染蠕虫的主机, 发出的数千个连接将导致入网门户页面重复生成,如果主机未经过身份验证,就会产生太多的负载,从而导致防火墙无法响应。
- 空闲超时:以分钟为单位指定,之后闲置的用户将被断开连接。用户可以立即重新登录。
- 强制超时:以分钟为单位指定,这将在指定的时间段后强制注销用户。 如果用户没有注销,则应该输入强制超时、空闲超时或两者,以确保及时删除会话,因为大多数用户可能不会注销。 如果用户凭据仍然有效(对于本地帐户,未过期,并且对于RADIUS身份验证,用户仍可以成功验证到RADIUS),则用户将能够在强制超时后立即重新登录。
注意:如果设置了超时值,则超时值必须小于DHCP租用时间,否则对于已切换到不同设备的IP地址,入网门户会话可保持活动状态。 设置较低的超时将确保门户会话在租约重新分配给新客户端之前结束。
- 直通信用:这些信用为设备提供了一段宽限期,然后他们必须通过门户进行认证。 例如,一台设备可以在一天内连接3次而无需看到门户页面,但除此之外,他们需要登录。 通过将强制超时设置为诸如1小时的值,在需要认证之前,客户端实际上将被限制为三小时的访问。 默认情况下,这是禁用的,所有客户端都会显示入口登录页面,并且必须登录。
注意:为了有效,请设置强制超时和/或空闲超时。
- 每个MAC地址允许的直通信用:特定MAC地址通过门户连接的次数。一旦用完,客户端只能使用有效凭证登录,直到下面指定的等待期限过期。
- 恢复直通信用等待期:在使用第一个客户后,客户将其可用直通信用恢复到原始计数的小时数。如果启用直通信用,这必须在0小时以上。
- 尝试访问时重置等待时间:如果启用,如果在所有直通信用已经用尽的情况下尝试接入,等待时间将重置为原始时间。 这样可以防止反复尝试访问门户的人过快地获得开放访问权限。
- 注销弹出窗口:选中后,会向用户显示注销弹出窗口,允许客户端在空闲或强制超时发生之前明确断开连接。 不幸的是,由于大多数浏览器都有弹出了阻止程序,所以这个窗口可能不适用于大多数客户端,除非门户网站可以从其浏览器中的弹出窗口阻止中排除。
- 预认证重定向URL:顾名思义,该选项在用户认证之前将其重定向到指定的URL。 通常,这用于在本地或其他地方显示描述托管在服务器上的设备位置的自定义登录页面。该登录页面必须包含链接,该链接进而将用户重定向回到门户页面,例如:
http://x.x.x.x:8002/index.php?zone=somezone&redirurl=http%3A%2F%2Fsomesite.example.com
自定义入网门户页面必须在顶部有额外的代码才能正确处理此重定向。 在下面的示例代码中,身份验证重定向目标页面还必须将自己的URL放入其链接的redirurl ,以便登录页面出现。以下是代码:
<?phprequire_once("globals.inc"); $request_uri = urldecode(str_replace("/index.php?zone={$_REQUEST['zone']}&redirurl=", "", $_SERVER["REQUEST_URI"])); $portal_redirurl = urldecode("$PORTAL_REDIRURL$"); if(!stristr($portal_redirurl, $request_uri)) { Header("Location: $PORTAL_REDIRURL$"); exit; } ?>
- 认证后重定向URL:在验证或点击门户网站之后,用户将被重定向到此URL而不是他们最初尝试访问的网址。 如果此字段留空,用户将被重定向到用户最初尝试访问的URL。
- 用户并发登录:选中时,每个用户帐户只允许一次登录。最近的登录是允许的,并且该用户名下的任何以前的登录将被断开。这不是整个门户的总限制,而是每个帐户的限制。
- MAC过滤:设置时,禁用MAC地址过滤。 在MAC地址无法可靠确定的情况下,例如在使用门户的单独路由器后面存在多个子网时,这是非常必要的。 在这种情况下,路由器后面的所有用户都将显示路由器的MAC地址。 如果设置了此选项,则不会去确保客户端的MAC地址在登录到门户时保持不变。
注意:如果启用此选项,则不能使用RADIUS MAC身份验证。
- 直通MAC自动条目:在某些使用情况下,用户可能只需要对每台设备进行一次验证,然后再不会再次看到门户登录,除非他们更改了设备。设置直通MAC条目可以自动实现此目标。
- 通过MAC自动添加: 如果设置了此选项,则在用户成功通过身份验证后,会自动添加MAC直通条目。 除非手动删除条目,否则该MAC地址的用户将无需再次进行身份验证。 要删除直通MAC条目,请在直通MAC选项卡中手动登录并将其删除。注意如果启用此选项,则不能使用RADIUS MAC身份验证,并且不会显示注销窗口。
- 通过MAC自动添加用户名: 如果设置此选项,则认证期间使用的用户名将与直通MAC条目一起保存。要删除直通MAC条目,请在直通MAC选项卡中手动登录并将其删除。
- 每用户带宽限制:入网门户还可以选择性地对用户进行限速,以防止他们使用过多的带宽。 默认下载和默认上传字段定义用户带宽的默认值,以千比特/秒为单位指定。 这些值可以由RADIUS(从RADIUS服务器传回配置)为特定用户的不同限制覆盖。 如果字段为空或设置为0,则用户可能拥有无限的带宽。
认证
本部分允许配置身份验证。如果需要身份验证,则可以使用本地用户管理或RADIUS身份验证。
- 无认证:选中后,用户只需点击门户页面即可访问。表单仍然必须提交,但它不需要任何用户输入字段,只需提交一个提交按钮。
- 本地用户管理/凭证:此选项允许用户使用用户名和密码进行身份验证,但不能与RADIUS服务器进行身份验证。此模式下的入网门户用户在pfSense GUI中进行管理。在用户管理和认证中添加本地用户。此外,如果仅选中仅允许具有“入网门户登录”权限的用户/组,则要访问该门户,用户必须在其帐户上拥有入网门户特权或成为包含此特权组的成员。凭证是预先生成的访问代码,可以提供给用户以赋予短期访问权限。 凭证可用于本地用户认证之外或代替本地用户认证。
- RADIUS认证:选择此选项后,将显示RADIUS服务器选项,并且此区域中的入网门户用户将针对配置的RADIUS服务器进行验证
RADIUS身份验证选项
RADIUS是根据包含帐户信息的中央服务器对用户进行身份验证的一种方式。 RADIUS有许多实现方式,例如Windows服务器上的FreeRADIUS,Radiator和NPS。 对于那些具有Microsoft Active Directory网络基础结构的用户,可以使用RADIUS通过Microsoft NPS从Active Directory验证入网门户用户。 这在使用Windows Server的RADIUS身份验证中进行了描述。 可以启用RADIUS记费以将每个用户的使用信息发送到RADIUS服务器。 有关更多信息,请参阅RADIUS服务器的文档。
要使用RADIUS,请选择身份验证下的RADIUS身份验证,然后填写有关RADIUS服务器的数据。
RADIUS协议:控制RADIUS服务器可以使用哪种协议进行身份验证。可以使用的选择是:
- PAP (密码认证协议): 最不安全但最兼容的选项,PAP以纯文本格式发送密码。
- CHAP_MD5: 比PAP更安全,CHAP使用MD5并在传输过程中加密密码。虽然在线上比PAP更安全,但服务器端必须知道明文密码才能计算出挑战。
- MSCHAPv1 (Microsoft CHAP, Version 1): 一种Microsoft设计的CHAP变体,主要用于旧版Windows(NT 3.x至Windows 95)。有可用的程序可以轻松地从交换中捕获密码哈希。
- MSCHAPv2 (Microsoft CHAP, Version 2):在CHAP / MS-CHAP v1之上添加更多安全功能。
根据网络的布局和RADIUS服务器的位置,这些协议的相对安全性可能没有多大影响,但仍应予以考虑。
从RADIUS服务器传回配置
某些默认的入网门户设置可以被来自RADIUS服务器的回复属性覆盖。确切的属性可能因供应商而异,并且可能不受所有RADIUS服务器的支持。
- 用户带宽限制:从常用选项中为用户定义带宽,如WISPr-Bandwidth-Max-Up/WISPr-Bandwidth-Max- Down, 或ChilliSpot-Bandwidth-Max-Up/ChilliSpot-Bandwidth-Max-Down。
- 会话超时:Session-Timeout,它将在RADIUS服务器指定的时间后断开用户连接。
- 空闲超时: Idle-Timeout,它会在RADIUS服务器指定的时间后断开用户连接。
- 计费间隔时间:Acct-Interim-Interval, 它指示门户以指定的时间间隔发送临时记费更新信息。
- URL重定向:允许认证后重定向URL,由RADIUS服务器通过WISPr-Redirection-URL定义。
主要认证源
主/从RADIUS服务器使用登录表单auth_user
和auth_
上的主用户名和密码字段,例如:
<tr> <td align="right">Username:</td> <td><input name="auth_user" type="text" style="border: 1px dashed;"></td> </tr><tr> <td align="right">Password:</td> <td><input name="auth_pass" type="password" style="border: 1px dashed;"></td> </tr>
如果主RADIUS服务器关闭,则尝试使用从RADIUS服务器。
IP地址: | RADIUS服务器的IP地址或主机名 |
---|---|
端口: | 典型的RADIUS服务器的验证端口,通常为1812。 |
共享密钥: | RADIUS服务器上此防火墙的共享密钥。 |
辅助认证源
辅助认证源定义了一个完全独立的RADIUS主认证设置。 例如,主RADIUS源可以是传统的用户名和密码,而辅助可以是预付卡号或PIN。 与主认证源一样,可以定义主服务器和辅助服务器。
辅助身份验证源使用入网门户HTML中的表单字段auth_user2
和auth_pass2
,例如:
<tr> <td align="right">Username:</td> <td><input name="auth_user2" type="text" style="border: 1px dashed;"></td> </tr> <tr> <td align="right">Password:</td> <td><input name="auth_pass2" type="password" style="border: 1px dashed;"></td> </tr>
计费
RADIUS记费将会话信息发送回RADIUS服务器,指示用户的会话何时开始、结束以及它们传输了多少数据。
注意
并非所有RADIUS服务器都支持或配置为接受记费数据,因此在启用此功能之前,请确保RADIUS服务器已正确安装。
计费端口:配置RADIUS服务器接受计费数据包的端口(通常为1813)
计费更新:这配置了服务器支持哪种特定类型的计费。
- 不更新:与禁用记费同义,它不会将记费更新发送到服务器。
- 开始/结束:只会为用户会话发送开始和结束的记录。
- 开始/结束(FreeRADIUS):只会以与FreeRADIUS兼容的方式发送用户会话的开始和结束记录。
- 临时:在用户会话处于活动状态时,将发送开始和结束记录,并定期向服务器发送更新。 如果防火墙在不通知RADIUS服务器停止消息的情况下重新启动,虽然不会导致会话数据丢失,但会导致RADIUS服务器上的数据库使用量增加。
RADIUS 选项
这些选项可以调整RADIUS身份验证的行为方式。
- 重新验证:如果启用,则每分钟登录的每个用户都会将访问请求数据包发送到RADIUS服务器。 如果用户收到访问拒绝,则该用户立即与强制网络门户断开连接。 这允许主动终止来自RADIUS服务器的用户会话。 注意如果在RADIUS中定义了并发登录限制,则此选项可能无法正常工作,因为附加请求将失败,因为重新认证尝试将被视为第二个并发登录。
注意:如果重新认证与RADIUS记费相结合,则必须使用临时记费更新来跟踪会话期间的使用情况,否则RADIUS服务器将不知道用户是否超过限制,直到他们注销为止。
- RADIUS MAC认证:如果启用此选项,入网网络门户将尝试通过将其MAC地址作为用户名和输入到MAC认证密码的密码发送到RADIUS服务器来验证用户身份。 如果禁用MAC过滤,则不能使用此选项。
- RADIUS NAS IP属性:该字段控制在Calling-Station属性中发送到RADIUS服务器的内容。从下拉列表中选择要使用的接口/ IP地址。
- 会话超时:当启用使用RADIUS会话超时属性时,客户端将在从RADIUS会话超时属性检索到的时间量后断开连接。
- 类型:设置客户端行为的RADIUS供应商类型。 如果RADIUS类型设置为Cisco,则Access-Reque包的Calling-Station-Id值将设置为客户端IP地址,Called-Station-Id设置为客户端MAC地址。 默认行为是Calling-Station-Id =客户端MAC地址和Called-Station-Id=防火墙WAN IP地址。
- 计费风格:当启用Acct-Input-Octets和Acct-Output-Octets反转时,RADIUS计费数据包的数据计数将从客户端的角度来看,而不是NAS。Acct-Input-Octets 表示下载,Acct-Output-Octets表示上传。
- NAS标识符:防火墙的主机名默认作为NAS标识符发送。在此处指定NAS标识符以覆盖默认值
- MAC 地址格式:该选项更改RADIUS中使用的MAC地址格式。更改此以将RADIUS身份验证的用户名格式更改为以下某种样式:
- 默认:冒号分隔的数字对:00:11:22:33:44:55
- 单破折号:数字分成两组,中间用单个破折号分开:001122-334455IETF:
- 以连字符分隔的数字对:00-11-22-33-44-55Cisco:
- 由一个句点分隔的四位数组:0011.2233.4455
- 无格式:所有数字连同没有格式化或分隔符:001122334455
HTTPS 登陆
选中此框可以为门户页面使用HTTPS。如果启用,还必须选择SSL证书。
- HTTPS服务器名称:指定用于HTTPS的FQDN(主机名+域)。这必须与证书上的通用名称(CN)匹配,以防止用户在浏览器中接收证书错误。
- SSL证书:选择门户网站用于HTTPS登录的SSL证书。证书在证书管理中进行管理。
- 禁用HTTPS转发:选中时,尝试连接到端口443上的HTTPS站点不会重定向到门户。这可以防止用户收到无效的证书错误。用户必须尝试连接到HTTP站点,然后才会转发到门户。
HTML 页面内容
使用这些控件,可以上传自定义HTML页面,以便在用户重定向到门户网站时改变呈现给用户的页面外观。
自定义这些页面是可选的。 任何页面内容留空将使用内部默认值。
门户页面可能包含PHP代码,也可能包含其他资源,如图像和CSS文件。 有关在自定义门户页面中添加其他资源的更多信息,请参阅文件管理。
注意
由于自定义门户页面可以运行PHP,因此请确保正确保护页面中的代码,以便连接用户无法利用该代码。另外,请避免将此页面的权限授予不受信任的管理员。
在每个单独的部分中,可以使用显示的控件管理页面:
- 要上传新页面,请单击浏览并选择要上传的文件。当门户选项被保存时,文件将被复制。
- 要查看现有页面,请单击查看
- 要下载现有页面的副本,请单击下载
- 要清除自定义页面,请点击 恢复默认页面
门户页面内容
此控件用于呈现给用户的主要门户页面。根据门户的选定选项,使用以下示例之一作为自定义页面的基础。
没有认证的门户页面
这显示了可以在没有验证的情况下使用的门户页面的HTML:
<html> <head> <title>Welcome to our portal</title></head> <body> <p>Welcome to our portal</p> <p>Click Continue to access the Internet</p> <form method="post" action="$PORTAL_ACTION$"> <input name="redirurl" type="hidden" value="$PORTAL_REDIRURL$"> <input name="zone" type="hidden" value="$PORTAL_ZONE$"> <input name="accept" type="submit" value="Continue"> </form> </body> </html>
带有认证的门户页面
这是一个需要认证的示例门户页面:
<html><head> <title>Welcome to our portal</title> </head> <body> <p>Welcome to our portal</p> <p>Enter your username and password and click Login to access the Internet</p> <form method="post" action="$PORTAL_ACTION$"> <input name="auth_user" type="text"> <input name="auth_pass" type="password"> <input name="redirurl" type="hidden" value="$PORTAL_REDIRURL$"> <input name="zone" type="hidden" value="$PORTAL_ZONE$"> <input name="accept" type="submit" value="Login"> </form> </body> </html>
带有凭证的门户页面
以下是带有凭证的示例门户页面:
<html><head> <title>Welcome to our portal</title> </head> <body> <p>Welcome to our portal</p> <p>Enter your voucher code and click Login to access the Internet</p> <form method="post" action="$PORTAL_ACTION$"> <input name="auth_voucher" type="text"> <input name="redirurl" type="hidden" value="$PORTAL_REDIRURL$"> <input name="zone" type="hidden" value="$PORTAL_ZONE$"> <input name="accept" type="submit" value="Login"> </form> </body> </html>
认证错误页面内容
使用此控件,可选择上传自定义HTML页面,以便在发生认证错误时显示。 当用户输入错误的用户名或密码时,或者在RADIUS身份验证的情况下,可能发生无法访问的RADIUS服务器时,会发生身份验证错误。
默认情况下,这个错误页面就是登录页面。
注销页面内容
注销页面在登录后呈现给用户,并触发一个弹出窗口。默认代码使用JavaScript,以下列方式创建新窗口:
<html> <head><title>Redirecting...</title></head> <body> <span style="font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"> <b>Redirecting to <a href="<?=$my_redirurl;?>"><?=$my_redirurl;?></a>...</b> </span> <script type="text/javascript"> //<![CDATA[ LogoutWin = window.open('', 'Logout', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=256,height=64'); if (LogoutWin) { LogoutWin.document.write('<html>'); LogoutWin.document.write('<head><title>Logout</title></head>') ; LogoutWin.document.write('<body style="background-color:#435370">'); LogoutWin.document.write('<div class="text-center" style="color: #ffffff; font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">') ; LogoutWin.document.write('<b>Click the button below to disconnect</b><p />'); LogoutWin.document.write('<form method="POST" action="<?=$logouturl;?>">'); LogoutWin.document.write('<input name="logout_id" type="hidden" value="<?=$sessionid;?>" />'); LogoutWin.document.write('<input name="zone" type="hidden" value="<?=$cpzone;?>" />'); LogoutWin.document.write('<input name="logout" type="submit" value="Logout" />'); LogoutWin.document.write('</form>'); LogoutWin.document.write('</div></body>'); LogoutWin.document.write('</html>'); LogoutWin.document.close(); } document.location.href="<?=$my_redirurl;?>"; //]]> </script> </body> </html>
大多数浏览器都有弹出窗口阻止程序,它们很可能会阻止该注销窗口的出现,因此请研究使用类似代码创建JavaScript弹出窗口的其他可能方法。