如何配置身份验证代理服务器

Joh*_*han 9 active-directory authentication http-proxy proxy domain

我的工作代理服务器需要使用 Microsoft AD 域用户凭据进行身份验证。每个人都知道它是如何工作的:如果您登录 Windows 工作站,您的基于“Internet Explorer”浏览器的 Internet 访问请求将使用您的域登录凭据自动进行身份验证(和识别)。

我发现 Firefox 也可以对这些代理服务器进行身份验证,并且长期以来一直认为它们“做了一些特别的事情”。最近,一位同事在 VM 中安装了 Linux Mint,令我惊讶的是他正忙于从 Internet 获取更新。当我问他是如何得到它的时候,他耸了耸肩说“它只是奏效了”

这促使我重新查看代理设置。我运行 Kubuntu(混合使用 G* 和 K* 应用程序,但我只在我确信 GTK 应用程序比任何 K* 应用程序都好得多时才使用 GTK 应用程序)

我仍然有一个在 VirtualBox VM 中运行的 Windows 来宾副本,主要用于打印和访问内部/公司网站(这都需要通过 MS 域凭据进行身份验证和识别)以及每隔几天更改我的域密码.

因此,如果我可以通过代理服务器让我的 [部分/大部分/全部] Linux 应用程序工作,那将会非常有帮助。我最迫切的需求是让 Akregator 和 Muon 能够工作。其他可能受益的应用程序是一些自动更新的应用程序(例如 Virtual Box Extensions)或将自己包裹在浏览器中(想到获取更多主题/墙纸/等,以及偶尔使用 wget)

SSH/SCP 客户端无需身份验证即可通过防火墙工作。

什么是配置它的正确方法(工具和/或程序),最好是在一个位置,因为必须在多个位置维护我的密码是锁定我的帐户的秘诀:-/

哦,如果我能拥有相当于 Firefox“快速代理”代理禁用/启用实用程序,例如单击以启用或禁用代理的使用,而无需退出并重新登录,那将是梦想成真,取决于我在哪个网络上。实际上考虑一下,应该可以训练一个实用程序来查看您的 IP 地址并知道何时需要使用代理!但我离题了。

我想运行一个可以动态添加身份验证并在需要时转发到上游代理服务器的本地代理服务器可能是唯一真正的解决方案。

Joh*_*han 8

cntlm 提供了一个解决方案,以及一些配置。

要遵循的基本步骤是:

  1. 安装cntlm。
  2. 在 /etc/cntlm.conf 编辑它的配置文件,包含的注释使它很容易。
  3. 添加代理服务器(或两个)。
  4. 在适当的地方指定您的用户名和 NT 域名,并删除密码条目。
  5. 启动cntlm服务,例如通过

    $ sudo /etc/init.d/cntlm start
    
    Run Code Online (Sandbox Code Playgroud)
  6. cntlm 提供了一种测试代理并从您的密码生成哈希的方法 - 例如通过命令(以 root 身份)

    $ cntlm -I -M http://www.test.com
    
    Run Code Online (Sandbox Code Playgroud)
  7. cntlm 将提示您输入域密码。然后它将针对配置的代理服务器测试不同的身份验证机制。当找到工作方法时,它会打印两行需要进入其配置文件的行。

  8. 停止 cntlm 服务器并将上面步骤 6 中获得的行添加到/etc/cntlm.conf.
  9. 重启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
Run Code Online (Sandbox Code Playgroud)

s3cmd、curl 和 wget

注意:有些应用程序将仅使用小写名称,其他应用程序仅使用大写名称,有些将先尝试使用一个,然后再使用另一个。

s3cmd(亚马逊S3客户端),curl并且wget可以附加地通过它们自己的配置文件,如果需要,可以配置的。这很方便,因为他们在每次调用时都会读取自己的配置文件。由于这些程序通常是短暂的(完成下载后存在单个调用),因此非常有用。

s3cmdin的格式为~/.s3cfg

proxy_host = localhost
proxy_port = 3128
Run Code Online (Sandbox Code Playgroud)

wget in 的格式为~/.wgetrc

https_proxy = http://localhost:3128
http_proxy = http://localhost:3128
ftp_proxy = http://localhost:3128
Run Code Online (Sandbox Code Playgroud)

curlin的格式为~/.curlrc

proxy = localhost:3128
Run Code Online (Sandbox Code Playgroud)

另一方面,编辑 shell 配置文件或其他环境配置文件通常需要重新启动、注销并重新登录或类似操作。这是值得研究/etc/environment~/.pam_environment~/.kde/env/proxy.sh等,因为这些都是标准的地方设置通过shell环境变量配置代理服务器设置,特别是影响系统上的所有用户和服务。

我也知道可以使用各自的.desktop文件在每个应用程序的基础上更改环境设置,但还没有尝试过(成功)。

虚拟盒子

VirtualBox 可以配置为使用代理(例如检查和下载软件更新)使用其 GUI 或使用以下命令:

$ VBoxManage setextradata global GUI/ProxySettings \
    "proxyEnabled,localhost,3128,authDisabled,,"
Run Code Online (Sandbox Code Playgroud)

为了完整起见,禁用它使用:

$ VBoxManage setextradata global GUI/ProxySettings \    
    "proxyDisabled,,,authDisabled,,"
Run Code Online (Sandbox Code Playgroud)

火狐

对于 Firefox,我使用 QuickProxy 插件。Firefox 本身如果手动配置为使用本地计算机上的代理服务器,因此 QuickProxy 仅启用/禁用设置。

易于

APT(由突触、介子和朋友在后台使用)使用配置文件/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/";
Run Code Online (Sandbox Code Playgroud)

注意: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*
Run Code Online (Sandbox Code Playgroud)

以及控制应用程序。这些有望很快被转移到 github 或其他在线主页。


Win*_*ong 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
Run Code Online (Sandbox Code Playgroud)

对于那些可能有问题或您不想重新配置应用程序的应用程序,您可以使用sshtunnel,它将设置 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/