← 返回博客

无需授权的登录密码代理:gost、3proxy、Squid和proxychains本地网关

程序只要求地址和端口,但代理有登录名和密码?请启动本地网关:使用一条命令启动gost,使用每个配置文件的端口启动3proxy,使用带日志的Squid或使用proxychains-ng来支持不带代理的软件。命令、配置和错误,导致真实IP泄露。

📅2026年10月11日
无需授权的登录密码代理:gost、3proxy、Squid和proxychains本地网关

您购买了代理,获得了类似 login:password@host:port 的字符串,但程序只要求“地址和端口”。这是一个熟悉的情况:Chrome 带有 --proxy-server 标志,Windows 和 Android 的系统设置,旧的解析器,Selenium 网格,没有密码字段的实用程序。解决方案多年来一直是相同的——本地网关:您机器上的小型代理,它接受无密码的连接,并在连接到真实代理时自动插入登录名。我们将分析四个经过验证的工具,每个工具的命令和通常浪费时间和金钱的错误。

为什么程序“无法理解”带密码的代理

有两种方法可以在代理提供商处进行身份验证:通过登录名和密码(基本身份验证)或通过 IP 白名单。第二种选择解决了问题,但仅在您拥有固定外部 IP 时有效——家庭互联网和移动网络通常没有,而云功能在每次启动时都会更改。我们在 代理身份验证指南 中详细比较了这两种方法。

使用登录名和密码时,我们遇到了程序本身的限制:

  • Chrome 和 Chromium。 根据 Chromium 文档,--proxy-server 标志接受方案、主机和端口(例如,--proxy-server="foopy:8080")——在这种语法中没有凭据字段。在普通浏览器窗口中,浏览器会显示密码对话框,但在无头模式和自动测试中,没有人可以填写。
  • 系统设置。 在 Windows 的手动代理设置和大多数 Android 固件的 Wi-Fi 设置中,仅有主机和端口。密码要么由特定应用程序询问,要么无法输入。
  • 旧的和自定义的软件。 许多实用程序和库支持代理,但不支持身份验证,或者在密码中遇到特殊字符时崩溃。
  • 完全不支持代理的程序。 控制台实用程序,不读取环境变量或设置。

本地网关解决了所有四种情况:程序看到无密码的代理 127.0.0.1:8080,而网关则将流量转发给提供商,并附带登录名。

方案如何工作

  1. 在您的机器上(或运行解析器的 VPS 上)启动轻量级代理服务器,并监听本地端口,例如 127.0.0.1:8080。
  2. 网关的配置中写入“父”代理(上游)——提供商的地址、登录名和密码。
  3. 程序连接到本地端口,无需身份验证。
  4. 网关打开与提供商的连接,进行身份验证并将流量转发。对于网站,您看起来是提供商的 IP 地址,而不是自己的。

在此过程中,HTTPS 不会被解密:通过 HTTP 代理,浏览器使用 CONNECT 方法建立隧道,网关只是转发加密的字节。

选项 1:gost — 一条命令,无需配置

gost(GO 简单隧道)——一个用于 Windows、macOS 和 Linux 的 Go 可执行文件。这是启动网关的最快方法。在 gost 中,-L 标志指定本地服务,-F 指定转发流量的节点。凭据直接在节点地址中指定:

gost -L http://127.0.0.1:8080 -F socks5://LOGIN:PASSWORD@HOST:PORT

现在,任何程序都可以使用无密码的 HTTP 代理 127.0.0.1:8080。如果密码中包含特殊字符(@、:、#),gost 文档建议通过 auth 参数以 base64 传递它们:

echo -n LOGIN:PASSWORD | base64
gost -L http://127.0.0.1:8080 -F socks5://HOST:PORT?auth=<base64结果>

请注意:如果指定了 auth,则直接在地址中记录的登录名和密码将被 gost 忽略。多个 -F 标志连续使用会形成多个代理的链。

何时使用:需要快速“配对”一个浏览器或脚本与代理,无需安装软件包和修改配置。

选项 2:3proxy — 一台机器上的多个端口

3proxy — 一个紧凑的代理服务器,配置在一个文件中。关键指令是 parent;根据文档,其语法为:parent <weight> <type> <ip> <port> <username> <password>,并且它必须在 allow 规则之后。网关的最小配置:

auth iponly
allow * 127.0.0.1
parent 1000 http HOST PORT LOGIN PASSWORD
proxy -p8080 -i127.0.0.1

这里重要的是:

  • auth iponly — 无密码,但进行 ACL 检查;规则 allow * 127.0.0.1 仅允许本地连接。
  • 权重 1000 表示“始终通过这个父级”。小于 1000 的权重用于收集随机链。
  • 父级类型:http、connect、socks4、socks5 等——选择提供商提供的协议。
  • -i127.0.0.1 将服务绑定到本地接口。默认情况下,3proxy 在所有接口上接受连接。

方便的技巧:重复 allow / parent / proxy 块多次,使用不同的端口和不同的提供商凭据。这样可以实现“端口 = 单独代理”:127.0.0.1:8081 — 美国,:8082 — 德国,等等。几乎任何软件都能理解这种格式,包括那些将代理输入为“主机:端口”列表的软件。

何时使用:数十个配置文件或流,每个都需要自己的出口。

选项 3:Squid — 如果需要缓存和日志

Squid 更复杂,但提供缓存、详细日志和灵活的 ACL。提供商作为父节点通过 cache_peer 指定,而指令 never_direct allow all 禁止 Squid 直接访问互联网,绕过父级:

http_port 127.0.0.1:3128
cache_peer HOST parent PORT 0 no-query default login=LOGIN:PASSWORD
never_direct allow all

来自 Squid 文档的细节:

  • 如果父级不支持 ICP,则将端口设置为 0——商业代理没有这个。
  • 在 login= 中允许 URL 转义序列(例如,%20 表示空格),因此密码中的 % 符号需要写成 %%。
  • 如果没有 never_direct,Squid 可能会决定直接访问网站——请求将以您的真实 IP 发送。对于解析和多账户操作,这是最糟糕的情况。

何时使用:办公室或团队,需要记录谁访问了哪里,或对同一资源的重复请求。

选项 4:proxychains-ng — 对于完全不支持代理的程序

如果程序完全不支持代理,可以使用 proxychains-ng(Linux 和 macOS)。它会拦截程序的网络调用,并将其 TCP 连接包装在代理中。支持 SOCKS4a、SOCKS5 和 HTTP,身份验证——SOCKS 的登录名和密码以及 HTTP 的基本身份验证。[ProxyList] 部分的行格式为 类型 ip 端口 [登录 密码]:

strict_chain
proxy_dns
tcp_read_time_out 15000
tcp_connect_time_out 8000

[ProxyList]
http HOST PORT LOGIN PASSWORD

启动:proxychains4 curl https://api.ipify.org——响应将是提供商的 IP,而不是您的。

  • strict_chain — 列表中的所有代理按顺序使用,如果一个不可用,则不会建立连接。比 dynamic_chain 更安全,后者会跳过死节点。
  • proxy_dns — DNS 查询也通过代理发送。如果没有这个,您的互联网提供商可以看到您请求了哪些域,而网站可能会注意到 DNS 和 IP 的地理位置不匹配。
  • 配置按顺序查找:-f 的文件或 PROXYCHAINS_CONF_FILE 变量,然后是 ./proxychains.conf、~/.proxychains/proxychains.conf 和 /etc/proxychains.conf。

限制,作者自己提到:仅支持 TCP(UDP 和 ICMP 不被代理),对于产生多个进程的程序可能会出现故障,而在 macOS 上,SIP 保护不允许拦截系统程序。

选择哪个工具:简短备忘单

  • 一个浏览器或脚本,需要“立即”使用 — gost。
  • 多个配置文件,每个都有自己的 IP 或国家 — 3proxy,使用单独的端口。
  • 团队、请求日志、缓存 — Squid。
  • 完全没有代理设置的程序 — proxychains-ng。

五个最昂贵的错误

  1. 网关监听所有接口。 在 VPS 上启动了带有 -L http://:8080 的 gost——结果是为您所有的流量提供了一个开放的代理。开放代理扫描器很快就能找到。始终指定 127.0.0.1,如果其他机器使用网关——请用防火墙关闭端口。关于僵尸网络如何快速找到服务器上开放端口的文章,我们在 CARBONATO 蠕虫分析 中写过。
  2. 泄漏绕过网关。 Squid 没有 never_direct,proxychains 没有 proxy_dns,浏览器通过 WebRTC/UDP 直接访问——所有这些都会泄露真实 IP。请在 IP 识别服务和 DNS 泄漏测试中检查结果。
  3. 一个网关用于所有账户。 如果 30 个反检测配置文件通过一个端口和一个 sticky 会话查看,所有人将共享一个 IP——这直接导致账户绑定。请将配置文件分散到不同的端口,或使用提供商的会话参数。
  4. 密码中的特殊字符。 @ 和 : 会破坏地址解析,例如 login:pass@host。在 gost 中使用 base64 参数,在 Squid 中使用转义,或生成没有特殊字符的密码。
  5. 网关是多余的跳跃和故障点。 在本地机器上延迟几乎为零,但如果网关位于其他数据中心,每个请求都会增加网络延迟。将网关放在程序附近,并设置自动启动(systemd、Windows 服务),否则在服务器重启后,解析器会静静地走向无处。

在网关后面使用什么代理

网关不关心其后面的代理类型——选择取决于任务:

  • 住宅代理 — 用于解析受保护的网站、市场和反检测配置文件:家庭用户的 IP 对反机器人系统的怀疑较少。
  • 移动代理 — 用于社交媒体和应用程序,检查最严格:通过 CGNAT,通常有许多真实用户通过一个移动运营商的 IP 上网,封锁它对平台来说风险很大。
  • 数据中心代理 — 用于没有严格保护的批量任务:可用性检查、API、测试。每 GB 最便宜。

如果代理带有轮换,IP 的更换逻辑通常由提供商通过登录名中的参数或控制面板中的设置来指定。网关不会破坏它:它按原样传递登录名。因此,方便地启动多个端口,使用不同的会话参数——一个每个请求都有新 IP,另一个在 30 分钟内保持固定 IP。

总结

带有登录名和密码的代理适用于任何程序,只需在它们之间放置一个本地网关。gost 通过一条命令解决了问题,3proxy 适合“端口 = 配置文件”,Squid 适合有日志的团队,而 proxychains-ng 甚至可以将不知代理的程序连接到代理。主要规则是:仅监听 127.0.0.1,禁止直接连接绕过父级,并检查网站是否看到提供商的 IP,而不是您的。