与接入点分开的设备上强制门户

与接入点分开的设备上强制门户

我正在尝试为家庭 WiFi 设置一个身份验证系统,该系统与所使用的接入点/路由器无关。该身份验证系统将紧密遵循强制门户模型,但我认为(自定义)强制门户的细节并不重要。

为了实现这一点,我想在便宜的设备(如 Raspberry Pi)上托管强制门户和身份验证。但是,在他们进行身份验证后,我希望用户重新连接到不同的接入点。也就是说,Raspberry Pi 将仅有的执行身份验证步骤,但不会作为经过身份验证的用户的正常使用接入点。同样,理想情况下,这将适用于任何具有正常密码保护的 WiFi 网络的接入点/路由器。

以下是该项目所需的登录流程:

  1. 用户连接到支持 WiFi 的 Raspberry Pi
  2. 用户被引导至 Pi 上托管的强制门户网站并登录
  3. (假设身份验证成功)用户与 Pi 断开连接并连接到主接入点
  4. 用户现在可以正常浏览网页

有没有什么方法可以实现这种功能?我知道如何设置 Raspberry Pi 来充当两个都接入点和强制门户,但不仅仅是强制门户。

答案1

虽然使用“鲁布·戈德堡”类型的装置可以实现这一点,但实际上要安全地做到这一点并不可行。

我猜想这可以通过粗略地完成,通过在 PI 上定制一个 DHCP 路由器并提供一个较短的租约时间直到释放,并修改发放的 IP 地址(并​​且不在路由器上启用 DHCP) - 但随后你将面临一场巨大的战斗,确保这不能通过一些简单的静态寻址来绕过。

您可能能够通过路由器的协作在很大程度上实现类似的效果,以禁止除强制门户之外的任何设备将端口 DNS(端口 53 请求)发送到 WAN - 并使用 DHCP 分发强制门户 DNS,并让强制门户为自己提供 DNS 响应,直到用户被释放。不过,这可以通过简单的 VPN 或隧道来颠覆。

它比看起来要难得多(这是我在业余时间玩的东西 - 所以不多!),但取决于你的路由器,像“Wild Dog”这样的东西 - 它内置于现代版本的 DD-WRT - 为你工作 - 看起来路由器执行底层捕获,并将门户工作交给另一台设备。

答案2

鉴于 OpenBSD 在 Raspberry Pi 上运行,您可以使用 authpf 让每个用户使用公钥/密码验证其会话,并让这些经过验证的客户端通过防火墙 - 不过,它实际上最好直接在负责过滤的路由器上运行。请参阅https://www.openbsd.org/faq/pf/authpf.html,并通过 Google 查找实现的示例。

更加用户友好的选项是https://coova.github.io/CoovaChilli/ 它似乎正在积极维护,并支持 RADIUS。

答案3

同样,理想情况下,它可以与任何接入点/路由器配合使用

接入点处理 Wi-Fi(链路层),路由器处理 IP(网络层)。尽管它们通常组合在一个塑料盒中,但它们仍执行两种不同的功能。

因此,强制门户的理念是,数据包常规路径上的设备会拦截数据包并生成虚假的“重定向”响应,告知用户必须访问登录页面。重定向可以通过以下方式完成:

  • 默认网关(路由器),通过使用 iptables 拦截整个 TCP 连接(最常用方法);
  • DNS 服务器,通过返回指向“强制”服务器(不可靠且很容易绕过)的虚假 DNS 查找答复;
  • 接入点或交换机,通过重写数据包头,使数据包到达不同的网关(很稀少但技术上是可行的)…

无论如何,你的“强制门户”Raspberry插入到常规路径中。即使你使用“假 DNS 服务器”方法构建它(它处理很少的流量,但也很容易绕过),至少您需要重新配置主路由器以通过 DHCP 提供您的 Raspberry 的 IP 地址。

(而且许多廉价的无线路由器实际上不允许你配置那 – 我想你必须关闭常规 DHCP 服务,并且完全从 Raspberry 提供 DHCP 服务。)


简而言之,不,我不相信可以通过这种方式实现“即插即用”强制门户设备。


事实上,从安全角度来看,它存在重大问题。如果它如果 Raspberry Pi 可以简单地连接并以某种方式拦截每个人的流量,而无需路由器配置……那么任何带有恶意软件的恶意客户端也可以简单地连接并拦截每个人的流量。

相关内容