代理身份验证:IP 白名单还是用户名和密码?

ProxyCompass 知识库

代理身份验证:IP 白名单还是用户名和密码?

代理身份验证用于检查你的应用程序是否有权使用代理服务。通常,仅知道代理的地址和端口还不够:服务还需要区分获准的客户端与其他能够连接到它的系统。这样,购买的代理就只能由你授权的客户端使用。

两种常见方法依据不同的信息进行检查。采用 IP 验证时,代理检查连接来自哪里;采用用户名和密码验证时,应用程序提供访问凭据。前者把访问权限绑定到网络地址,后者则可以让应用程序在转移到其他网络后继续保有访问权限。服务也可以要求同时满足这两个条件。

这项选择会影响连接方式、可用的应用程序,以及工作环境变化后的情况。它是选择代理配置时需要单独考虑的一部分:身份验证不会决定出口 IP 属于数据中心还是住宅网络,也不会决定它是静态还是轮换的。它决定的是谁有权使用提供该 IP 的服务。

图中使用相同的两个客户端 IP,比较 IP 白名单与有效凭据的作用。IP 访问仅允许列表中的来源连接;不绑定 IP 的密码访问则允许这两个来源在凭据有效时连接。

两种身份验证方法的工作方式

IP 验证:允许特定连接来源访问

采用 IP 验证时,你需要把客户端地址添加到服务商的允许访问列表中,这个列表通常称为白名单或允许列表。连接到达时,代理会将其源 IP 与该列表进行比较。如果地址匹配,且满足服务的其他访问条件,应用程序就能使用代理,无须另外发送代理用户名和密码。

对于互联网代理,相关地址通常是你所在网络的公网出口 IP。它是应用程序连接代理时使用的来源地址,而不是代理随后向网站呈现的出口 IP。购买静态代理不会让你的家庭网络连接也变成静态:这两个地址属于连接路径的不同部分。

因此,只要获准的来源保持不变,访问就很方便。程序可以重启,其他获准设备也可以通过该网络连接,无须各自使用代理密码。如果出口 IP 发生变化,原有权限不会自动覆盖新地址。IP 验证指南介绍了如何确定正确的源地址并管理允许访问列表。

用户名和密码:由应用程序提供访问权限凭据

采用用户名和密码验证时,服务商会提供使用代理所需的凭据。应用程序通过受支持的代理协议发送这些凭据。浏览器可能会提示用户输入;脚本则可以从配置中读取并提供,无须显示登录窗口。

当凭据是唯一的身份验证要求时,访问权限就可以随应用程序在不同网络之间迁移。同一套可用配置能够继续从新的源 IP 建立连接。当任务执行地点的变化比代理设置的变化更频繁时,这种方式很有用。

这些凭据用于与代理建立连接。它们不一定是服务商控制面板的登录密码,也不会让你自动登录目标网站。目标网站仍会执行自己的登录和访问规则。用户名和密码验证指南介绍了连接字段、支持的客户端以及凭据格式。

IP 验证与用户名和密码验证的比较

下表分别说明这两种方法。这里的密码访问指不附加 IP 限制的访问方式;组合验证将在后文介绍。

实际使用中的差别 IP 验证 用户名和密码
访问依据 连接必须来自获准的源 IP。 应用程序必须提供有效的代理凭据。
应用程序设置 无须代理凭据,但仍须使用正确的代理协议、地址和端口。 应用程序必须支持代理所用的凭据交换方式。
转移到其他网络 新的来源必须已获准访问,或被添加到列表中。 相同凭据可以在新网络中继续使用。
多个应用程序 通过同一个获准网络出口连接的应用程序,共享该 IP 的访问权限。 每个应用程序都必须发送服务认可的凭据;如果规则允许,多个应用程序可以使用同一组凭据。
代理地址泄露后会暴露什么 在未获准的网络中,仅有地址和端口无法通过源 IP 检查。 包含有效凭据的完整配置可能使其他网络中的客户端获得访问权限。
需要维护的内容 获准的源地址,以及使用这些地址的网络路径。 访问凭据,以及已配置为发送这些凭据的应用程序。

两种方法都不会决定服务提供的出口 IP 数量。一个获准的客户端 IP 或一组凭据可能允许访问多个代理。它们都不会赋予这些代理无限连接数,也不会使其出口地址成为某个客户的独享地址。

如何根据应用程序和网络进行选择

先检查应用程序是否能使用所提供的验证方法

如果应用程序支持所提供的代理身份验证方式,就可以使用凭据。如果它无法发送凭据,可以考虑从获准来源通过 IP 方式访问。同时,应用程序也必须支持相应协议。

程序支持某种代理协议,并不表示它支持该协议的每一种身份验证选项。仅有地址和端口字段,不能证明程序能够发送用户名和密码。例如,Chrome 内置的 SOCKS5 支持不包含 SOCKS5 用户名和密码验证。凭据正确也无法弥补客户端缺少这项功能的问题。

如果所需应用程序支持提供的协议,却无法发送凭据,IP 验证可以成为可行的连接方式。但这仍然要求源地址获准访问。如果该地址经常变化,改用 IP 访问虽然解决了凭据问题,却仍须管理源地址变化。你可能需要改用支持所需验证方式的客户端,或使用稳定的网络出口。

因此,购买前有价值的检查应当具体到:这个应用程序能否通过这种身份验证方法使用这个代理协议?在另一个浏览器或命令行工具中连接成功,并不能回答这个问题。

再考虑配置中哪些因素经常变化

不同程序可以共享一个稳定的公网源 IP。当任务转移到其他网络时,不绑定 IP 的凭据可以随任务一起迁移。

IP 验证适合网络出口稳定且可控的任务。出口获准访问后,更换其后方运行的程序,无须向每个新进程分发代理凭据。服务的访问设置始终关联任务所使用的网络。

凭据适合执行地点会变化的任务。如果任务迁移到其他服务器,或新工作进程从不同网络启动,只要服务接受不绑定 IP 的凭据,就无须为每个来源单独修改允许访问列表。代理配置可以随应用程序一起迁移。

关键区别在于出口源地址多久变化一次,而不在于你把机器称为笔记本电脑、VPS 还是云服务器。笔记本电脑可以一直使用固定的办公网络出口;服务器部署也可能在多个公网地址之间切换。应根据实际连接路径和正常工作中预计发生的变化进行选择。

如果两种方法都可用,就选择更易维护的方案

网络管理员可以维护源 IP 白名单,开发人员可以维护应用程序设置中的代理凭据。选择更适合你的工作流程、维护起来更简单的方式。

考虑由谁维护设置。控制着多个应用程序共用固定出口的网络管理员,可以通过一项源地址权限管理访问。需要在不同环境之间迁移任务,却无法控制这些环境公网 IP 的开发人员,可能会觉得不绑定 IP 的凭据更易维护。

还要计入选择该方式所需的额外资源。固定公网 IP、额外的允许列表条目或托管网关都可能产生费用。密码访问可能避免这些费用,但前提是它能在所需网络中正常使用。应比较实际服务选项;提供密码本身并不意味着代理更便宜。

组合验证:IP 和密码

服务商可以让 IP 访问与密码访问二选一,也可以要求两者同时满足。这是两种不同安排。在组合模式下,只有连接同时来自获准地址或网络时,有效凭据才会被接受。仅有正确密码不够,仅有获准来源也不够。

这种方式适合必须填写用户名和密码的应用程序,同时保留对访问来源的限制。它还可以限制复制的凭据在获准网络之外使用。不过,它无法像不绑定 IP 的密码访问那样,让应用程序自由迁移到任意网络。

在 ProxyCompass 静态套餐中,组合模式接受的客户端公网 IPv4,须与白名单中某个 IP 位于同一 /24 子网,并提供有效凭据。这些地址的前三段数字相同。因此,该子网内的多个客户端地址可以通过一个白名单条目使用凭据。这项规则针对的是连接服务的客户端,而不是购买的出口 IP。上文链接的用户名和密码指南中提供了连接示例。

在 ProxyCompass 静态数据中心和 ISP 套餐的组合模式中,将一个客户端 IPv4 添加到允许访问列表,并在每个客户端上配置有效凭据。图中的三个示例源地址位于同一 /24 子网,因此都可以连接。

哪种方法能更好地控制访问?

IP 验证在网络出口处决定访问权限。仅获得代理地址的人,无法从其他未获准来源使用该代理。但代理不能仅凭用户共享同一个获准 IP,就区分每个用户。如果多个用户通过同一公网地址连接,IP 检查对他们看到的来源都相同。办公网络共用出口,以及多个互联网用户共享公网地址时,都需要考虑这一点。

用户名和密码验证把权限放在凭据中,应用程序可以在不同地点提供这些凭据,因此适合互不相关的网络。这也意味着,包含有效凭据的配置被复制后,可能仍能在其他地方使用。如果服务商为不同用户或任务提供独立凭据,就能更细致地管理访问;所有人共用一个密码则无法实现这种区分。

因此,选择取决于你能更可靠地控制什么:获准网络出口后方的系统,还是提供给应用程序的凭据。组合访问同时要求满足两个条件,所以即使凭据有效,也会限制其可使用的地点。

访问控制与加密是两个独立问题。IP 验证不会加密流量,密码也不会自动建立加密连接。要保护传输中的凭据,必须保护客户端与代理之间的连接本身。通过代理打开 HTTPS 网站,本身并不能保护更早之前与代理进行的未加密登录交换。

IP 验证会让代理更快吗?

IP 访问可以省去凭据交换,但 HTTP 与 SOCKS 的连接建立过程不同。在 SOCKS5 中,用户名和密码验证会在连接建立时增加一次请求和响应。对于 HTTP,客户端可能会等待身份验证质询后重新发送请求,也可能从一开始就发送适当凭据。因此,密码访问并不一定会增加一次网络往返。

当任务反复为少量工作建立新连接时,这种差异最明显。复用已建立连接时,其影响较小。例如,通过现有 HTTPS 隧道向同一网站请求更多页面时,不会重复建立隧道时所做的代理登录。这是建立连接的开销,并不代表代理的数据传输速度会固定降低。

如果两种方法都适合你的配置,应使用相同协议、相近的代理资源和真实连接模式进行比较。每次请求都新建连接的测试,与复用连接的测试回答的是不同问题。没有这种比较,笼统地声称某种身份验证方法总是更快,对选择服务帮助不大。

身份验证会暴露某个地址运行了代理吗?

会。密码可以防止未经授权的使用,同时仍让外部系统识别该服务。例如,检测工具可以在没有有效凭据的情况下连接 HTTP 代理的地址和端口。407 Proxy Authentication Required 响应连同 Proxy-Authenticate 响应头,会明确表明该服务要求代理身份验证。检测工具无须知道密码,就能获得这一证据。

外部探测程序向 HTTP 代理发送不含凭据的请求。407 Proxy Authentication Required 响应阻止了使用,却暴露出这是代理身份验证服务。这是一次独立探测,不是发送给目标网站的身份验证响应。

如果限制 IP 的服务在返回可识别的代理响应之前就阻止未获准来源,它可能披露更少信息。但仅有允许访问列表并不保证这种行为:服务器可能返回具有辨识特征的拒绝响应。受密码保护的连接端点也可以配置网络过滤。真正的区别是外部连接能接触到什么,以及会收到什么响应。

被检查的是哪个地址也很重要。当代理入口地址与出口 IP 相同时,可识别的响应可能会暴露网站看到的那个地址。对于使用不同出口 IP 的网关,识别出网关本身,并不能识别其 IP 池中的每个出口。

正常浏览时,目标网站不会自动收到代理的登录质询:该交换发生在客户端与代理之间。网站或其检测服务需要其他证据,其中可能包括对地址进行单独检查。因此,仅切换身份验证方式,不能保证某个 IP 不会被识别为代理,也不能删除已经掌握的相关信息。

返回知识库