我的工作代理服务器需要使用 Microsoft AD 域用户凭据进行身份验证。每个人都知道它是如何工作的:如果您登录 Windows 工作站,基于“Internet Explorer”浏览器的 Internet 访问请求将使用您的域登录凭据自动进行身份验证(和识别)。
我发现 Firefox 也可以针对这些代理服务器进行身份验证,并且长期以来一直认为它们“做了一些特殊的事情”。最近,一位同事在虚拟机中安装了 Linux Mint,令我惊讶的是,他正忙于从互联网获取更新。当我问他是如何让它工作时,他耸耸肩说“它就工作了”
这促使我重新查看代理设置。我运行 Kubuntu(混合使用 G* 和 K* 应用程序,但只有当我确信 GTK 应用程序比任何 K* 都要好得多时,我才使用 GTK 应用程序)
我仍然有一份在 VirtualBox VM 中运行的 Windows 来宾副本,主要用于打印和访问内部/公司网站(两者都需要通过 MS 域凭据进行身份验证和识别)以及每隔几天更改我的域密码。
因此,如果我能让我的[部分/大部分/全部] Linux 应用程序通过代理服务器工作,那将会非常有帮助。我最迫切的需求是 Akregator 和 Muon 能够工作。其他可能受益的应用程序是一些自动更新的应用程序(例如 Virtual Box Extensions)或将自己包装在浏览器中(想到获取更多主题/壁纸/等,以及偶尔使用 wget)
SSH/SCP 客户端无需身份验证即可通过防火墙工作。
配置此功能的正确方法(工具和/或程序)是什么,最好在单个位置,因为必须在多个位置维护我的密码是被锁定在我的帐户之外的秘诀:-/
哦,如果我能拥有与 Firefox“快速代理”代理禁用/启用实用程序相当的功能,例如一键启用或禁用代理的使用,而无需退出并重新登录,那将是梦想成真,取决于我所在的网络。实际上想想,一个实用程序应该是可训练的,可以查看您的 IP 地址并知道您何时需要使用代理!但我离题了。
我想运行一个可以动态添加身份验证并在需要时转发到上游代理服务器的本地代理服务器可能是唯一真正的解决方案。
答案1
cntlm
提供了一个解决方案以及一些配置。
要遵循的基本步骤是:
- 安装cntlm。
- 在 /etc/cntlm.conf 编辑其配置文件,其中包含的注释使其变得足够简单。
- 添加一个(或两个)代理服务器。
- 在适当的位置指定您的用户名和 NT 域名,并删除密码条目。
启动cntlm服务,例如通过
$ sudo /etc/init.d/cntlm start
cntlm 提供了一种测试代理并根据您的密码生成哈希值的方法 - 例如通过命令(以 root 身份)
$ cntlm -I -M http://www.test.com
cntlm 将提示您输入域密码。然后它将针对配置的代理服务器测试不同的身份验证机制。当找到一个工作方法时,它会打印两行,需要将其写入其配置文件中。
- 停止 cntlm 服务器并将上面步骤 6 中获得的行添加到
/etc/cntlm.conf
. - 重启cntlm
现在cntlm
正在运行并准备使用。许多地方可用于配置各种程序来使用它。 cntlm
然后,将透明地将 NT 域身份验证令牌添加到传出数据包中,并将其转发到配置的代理服务器。
使用 Qt/KDE
对于Qt / KDE本机应用程序,请在“使用手动配置的代理服务器”中指定KDE 系统设置->网络设置->代理设置。代理指定为http://localhost
端口 3128(默认端口,cntlm
除非您更改它)。这些应用程序会使用新设置动态更新,并且无需重新启动或注销/登录即可更新设置。
Dropbox 和 Google 客户端
许多应用程序可以使用 shell 环境变量。这里值得注意的是 Dropbox 和 Google Earth 客户端。对于这些应用程序,请使用如下 shell 环境变量:
no_proxy=localhost,127.0.0.0/8,*.local
NO_PROXY=localhost,127.0.0.0/8,*.local
all_proxy=socks://localhost:3128/
ALL_PROXY=socks://localhost:3128
http_proxy=http://localhost:3128
HTTP_PROXY=http://localhost:3128
ftp_proxy=http://localhost:3128
FTP_PROXY=http://localhost:3128
https_proxy=http://localhost:3128
HTTPS_PROXY=http://localhost:3128
s3cmd、curl 和 wget
注意:有些应用程序将仅使用小写名称,其他应用程序仅使用大写名称,有些应用程序将首先尝试一个,然后再尝试另一个。
s3cmd
(Amazon S3 客户端),如果需要,curl
还wget
可以通过自己的配置文件进行配置。这很方便,因为他们在每次调用时都会读取自己的配置文件。由于这些程序通常是短暂的(完成下载后存在一次调用),因此非常有用。
s3cmd
in 的格式~/.s3cfg
为:
proxy_host = localhost
proxy_port = 3128
wget 的格式~/.wgetrc
为:
https_proxy = http://localhost:3128
http_proxy = http://localhost:3128
ftp_proxy = http://localhost:3128
curl
in 的格式~/.curlrc
为:
proxy = localhost:3128
另一方面,编辑 shell 配置文件或其他环境配置文件通常需要重新启动、注销并重新登录或类似操作。值得研究/etc/environment
、等~/.pam_environment
,~/.kde/env/proxy.sh
因为这些是设置通过 shell 环境变量配置的代理设置的标准位置,特别是影响系统上的所有用户和服务。
我还了解可以使用各自的.desktop
文件在每个应用程序的基础上更改环境设置,但尚未尝试(成功)。
虚拟盒子
VirtualBox 可以使用其 GUI 或使用以下命令配置为使用代理(例如检查和下载软件更新):
$ VBoxManage setextradata global GUI/ProxySettings \
"proxyEnabled,localhost,3128,authDisabled,,"
为了完整起见,要禁用它,请使用:
$ VBoxManage setextradata global GUI/ProxySettings \
"proxyDisabled,,,authDisabled,,"
火狐浏览器
对于 Firefox,我使用 QuickProxy 插件。如果手动将 Firefox 本身配置为使用本地计算机上的代理服务器,则 QuickProxy 只需启用/禁用该设置。
易于
APT(由 synaptic、muon 和朋友在后台使用)使用 中的配置文件/etc/apt/apt.conf.d/
,例如,00proxy
启用 APT 代理是使用以下行完成的:
Acquire::http::Proxy "http://localhost:3128";
#Acquire::ftp::proxy "ftp://localhost:3128/";
#Acquire::https::proxy "https://localhost:3128/";
注意:add-apt-repository 使用根配置文件,或者您可以配置 sudo 以允许所有 http*_proxy 设置失败。
统治一切的脚本
FWIW 我现在正在编写一个模块化脚本来启用/禁用许多程序的代理。到目前为止我已经编写了以下模块:
$ ls -lF proxymanager/modules/
total 60
-rwxr-xr-x 1 root root 919 Oct 8 17:27 apt*
-rwxr-xr-x 1 root root 1037 Oct 8 13:10 bashrc*
-rwxr-xr-x 1 root root 391 Oct 8 12:18 cntlm*
-rwxr-xr-x 1 root root 684 Oct 8 12:58 curl*
-rwxr-xr-x 1 root root 609 Oct 8 13:02 dropbox*
-rwxr-xr-x 1 root root 672 Oct 8 12:18 gnome*
-rwxr-xr-x 1 root root 691 Oct 8 12:18 kde*
-rwxr-xr-x 1 root root 689 Oct 8 13:03 root_bashrc*
-rwxr-xr-x 1 root root 691 Oct 8 13:03 root_curl*
-rwxr-xr-x 1 root root 827 Oct 8 13:03 s3cmd*
-rwxr-xr-x 1 root root 454 Oct 8 13:03 survive_reboot*
-rwxr-xr-x 1 root root 860 Oct 8 13:06 suse-sysproxy*
-rwxr-xr-x 1 root root 653 Oct 8 12:46 sysenvironment*
-rwxr-xr-x 1 root root 465 Oct 8 13:04 virtualbox*
-rwxr-xr-x 1 root root 573 Oct 8 13:04 wgetrc*
以及控制应用程序。希望这些很快就会被转移到 github 或其他在线主页中。
答案2
在我的 Linux 工作站上,唯一可以访问互联网的应用程序是 a) Firefox(使用 Firefox 中存储的自己的代理配置和身份验证)以及在 Windows VM 中运行的应用程序(注意 - Windows VM 是域成员,并且用户登录时针对域进行身份验证)
解决方案选项:在 Windows VM 上运行 Web 代理。设置您的系统以使用该实例作为代理。
由于您的 Windows VM 已经过身份验证并且允许流量通过它,因此在该 VM 实例上设置 SOCKS 代理将集中您的身份验证需求。如果它只是为了你和你的盒子,这应该没问题,而且可能相当简单。
搭载这个想法是让 SSHD 守护进程在 Windows VM 上运行,这样您就可以通过 VM 从其他机器执行 SSH SOCKS 隧道之类的操作:
ssh -D 1080 windows-user@windows-vm
对于那些可能有问题或您不想重新配置应用程序的应用程序,您可以使用ssh隧道,这将设置 iptables 规则来路由流量。适用于 Linux 和 Mac 系统。
如果您需要避免在 Windows VM 本身上安装代理,则可以设置一个 Squid 代理盒,配置为针对 Windows AD 进行自身身份验证。有关执行此操作的指南位于此处:
解决方案选项:通过 AD/NTLM 验证的 Squid 代理
http://techmiso.com/1934/howto-install-squid-web-proxy-server-with-active-directory-authentication/(死链接)
另一种 NTLM 代理解决方案,尽管我认为这个解决方案实际上在 Windows 计算机上运行:
解决方案选项:NTLM代理 http://cntlm.sourceforge.net/
答案3
下面的链接很好地解释了 ntlm 的代理身份验证。
- 对于 Ubuntu 14.04:在 Ubuntu 14.04 中配置代理
- 对于卢本图:在 Lubuntu/ubuntu 中设置带有身份验证的代理
但ntlm的问题是你必须cntlm
每天多次更新配置文件。考虑这样一种情况:不同的用户共享一台公共计算机,并且cntlm
他们每次登录系统时都必须更新配置文件中的 AD 密码。也许有一种方法可以cntlm
在用户登录时自动更新配置文件。