通过代理服务器进行 NTLM

通过代理服务器进行 NTLM
  • 我们使用 squid 作为 HTTP 代理(如果需要我可以修改它的配置)。
  • 我们想要访问一个使用 ntlm 进行身份验证的网站
  • 当我们通过 squid 访问网站时,我们看到一个空白页
  • 当我们通过 DSL 盒访问网站时,我们会看到身份验证弹出窗口(期望的结果)

我不太了解 NTLM...想象力太丰富...糟糕的协议...grmbl grmbl :D :D :D

该线程说这无法完成:http://www.squid-cache.org/mail-archive/squid-users/200708/0578.html

有没有高手可以提供解决方案或解决方法?

以下是目标网站的 80 端口上的 telnet 输出:

Trying 111.222.333.444...
Connected to www.extranet-example.com (111.222.333.444).
Escape character is '^]'.
GET /index.htm HTTP/1.1
host: www.extranet-example.com

HTTP/1.1 401 Unauthorized
Server: Microsoft-IIS/7.5
SPRequestGuid: 2764478a-b14a-4541-9110-27ebf4281e84
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
MicrosoftSharePointTeamServices: 14.0.0.4762
Date: Mon, 25 Nov 2013 14:25:26 GMT
Content-Length:
0 

奖励:我们使用 2 个链式代理(squid-2.6 rhel5)服务器

编辑:使用 NTLM 进行 squid 身份验证并不是我们想要实现的。

修改 2:我们尝试访问的网站位于公司外部,不在我们的网络内。实际上,它是一个具有公共 IP 的公共网站。如果我将此网站排除在代理配置之外,它将无法工作,因为我们的工作站没有通往互联网的路由,也没有直接连接。

答案1

NTLM 是面向连接的,由于使用代理时您与 Web 服务器之间没有直接连接,因此 NTLM 会失败。(您与代理之间有一个连接,代理与网站之间还有第二个连接。)

如果您无法升级到 Kerberos 身份验证,最好的办法是将 Web 服务器添加到客户端配置(PAC 文件?)中的代理排除列表中。通常,出于这个原因,公司内联网上的内部服务器(您期望 NTLM 身份验证的地方)被排除在代理之外,客户端直接连接。

编辑

显然,Squid 中有一个用于 NTLM 直通身份验证的选项:连接固定. 从 Squid 2.6 及以上版本和 3.1 及以上版本开始可用。

http_port ... connection-auth[=on|off]
https_port ... connection-auth[=on|off]

答案2

根据提供的信息,我认为如果不以某种方式“跳出框框”,您就无法创建一种解决方法来通过 Internet 使用 Squid 上的 NTLM。

一个可能的建议是使用 HAproxy(执行 TCP 反向代理)在您的网络中创建一个本地 URL,将请求传送到另一端的站点。如果您必须经过 2 个不同的跳转(即运行 Squid 的 2 台机器),那么您必须设置两个实例。

配置大致如下:

listen localsite 0.0.0.0:80
    mode tcp
    balance roundrobin
    option  tcplog

    server upstream1 1.2.3.4:80

虽然您确实必须运行单独的应用程序,但 HAproxy 非常轻松(安装单个包、10 行配置文件、几乎 0 配置、0 维护)。

另一个选择是修改系统的配置以启用某种 SSO,然后使用本地 NTLM 身份验证器启动与上游系统的会话。这可能意味着系统的开发和更改。

不过,我认为我从未见过 NTLM 在互联网上使用,它通常用于 LAN。也许如果你详细说明一下情况,我们可以建议一种替代策略。

相关内容