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


8

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

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

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

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

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

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

什么是正确的配置方式(工具和/或过程),理想情况下是在单个位置进行配置,因为必须在多个位置维护我的密码是导致帐户无法登录的秘诀:-/

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

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


它是什么类型的代理?基于Linux或Windows?
2013年

代理服务器基于Windows。
Johan

听起来好像代理正在通过配置,并且防火墙允许来自所有主机的出站Web通信。这是您的同事无需身份验证即可浏览的方式。您正在使用ISA或TMG的代理服务器吗?
midnightsteel

防火墙不允许所有主机出站,否则我将绕过代理服务器。“通过配置”是什么意思?让我澄清一下:在Linux工作站上,唯一可以访问Internet的应用程序是a)Firefox(使用存储在Firefox中的代理配置和身份验证)以及运行在Windows VM中的应用程序(注意-Windows VM是域成员,并且用户在登录时针对该域进行身份验证)
Johan

我不知道是ISA还是TMG。如果解决方案因情况而异,那么我会对这两种解决方案都感兴趣。
Johan

Answers:


2

在我的Linux工作站上,唯一可以访问Internet的应用程序是a)Firefox(使用存储在Firefox中的代理配置和身份验证)以及运行在Windows VM中的应用程序(注意-Windows VM是域成员,并且用户登录时根据域进行身份验证)

解决方案选项:在Windows VM上运行Web代理。设置系统以将该实例用作代理。

由于您的Windows VM已通过身份验证,并且允许通过它的流量,因此在该VM实例上设置SOCKS代理将集中您的身份验证需求。如果只适合您和您的盒子,那应该没问题,而且可能很简单。

idea带这个想法的目的是使SSHD守护程序在Windows VM上运行,以便您可以通过VM从其他设备执行SSH SOCKS隧道之类的操作:

ssh -D 1080 windows-user@windows-vm

对于可能出现问题或不想重新配置应用程序的那些应用程序,可以使用sshtunnel,它将设置iptables规则来路由流量。适用于Linux和Mac系统。

如果您需要避免在Windows VM本身上安装代理,则可以设置一个Squid代理框,该框配置为根据Windows AD对其自身进行身份验证。这样做的指南位于:

解决方案选项:通过AD / NTLM验证的鱿鱼代理

http://techmiso.com/1934/howto-install-squid-web-proxy-server-with-active-directory-authentication/无效链接

另一种NTLM代理解决方案,尽管我认为该解决方案实际上在Windows计算机上运行:

解决方案选项:NTLM代理 http://cntlm.sourceforge.net/


我已经在研究cntlm,它也恰好在标准ubuntu存储库中。
约翰·约翰(

1
cntlm解决方案似乎很有希望。到目前为止,它允许wget和铬起作用。Wget通过在.wgetrc文件中具有cntlm address:port来工作。Chromium的工作方式是配置为使用所谓的“计算机的系统代理设置”,我在KDE系统设置->代理->手动配置中配置了代理。Chromium动态使用此功能,即,如果我在KDE中更改设置,则Chromium会受到影响,而不必重新启动Chrome。TBC
Johan 2013年

到目前为止,这仍然不适用于Konqueror,Muon或Akregator,它们都不能直接公开代理设置。我相信Muon在后台使用apt-get,它的配置方式类似于wget。我不了解KDE“手动指定的代理”和KDE“系统代理”配置选项之间的区别,这可能是使它适用于所有应用程序的关键。我还注意到,即使在注销和重新登录之后,KDE设置也没有填充到Shell脚本中,这令人失望。
Johan 2013年

通过MS-Windows代理服务器解决方案对我来说是不可接受的。其他人可能会有不同的感觉,但是运行一个额外的OS实例只是为了向出站网络数据包添加身份验证会占用太多资源,并且不能消除我对MS Windows的依赖。
约翰,

1
按照上述建议,我已经使用cntlm解决了该问题,并强烈推荐它。对于大多数不使用KDE全局设置的KDE应用程序,我遇到的问题是由于在KDE代理设置中指定代理服务器使用的格式不正确。顺便说一句,Chromium似乎对此并不敏感(我http://在配置代理时忽略了)
Johan

8

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

遵循的基本步骤是:

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

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

    $ cntlm -I -M http://www.test.com
    
  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

s3cmd,卷曲和wget

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

s3cmd(Amazon S3客户端),curlwget可以根据需要通过自己的配置文件进行配置。这很方便,因为他们在每次调用时都会读取自己的配置文件。由于这些程序通常是短暂的(完成下载后只有一个调用),因此非常有用。

s3cmdin 的格式为~/.s3cfg

proxy_host = localhost
proxy_port = 3128

wget的格式为~/.wgetrc

https_proxy = http://localhost:3128
http_proxy = http://localhost:3128
ftp_proxy = http://localhost:3128

curlin 的格式为~/.curlrc

proxy = localhost:3128

另一方面,编辑外壳程序概要文件或其他环境配置文件通常需要重新启动,注销和后退或类似操作。这是值得研究/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(由突触,μon和朋友在后台使用)使用中的配置文件/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或其他在线主页中。


此后已移至GitHub,获得了更多模块,并且正在缓慢但肯定地接近可用形式。大胆和喜欢
Johan

值得学习的新事物。谢谢。如何在命令行中将密码传递给cntlm ...我不希望任何提示要求输入密码吗?
2015年

0

在以下链接中很好地解释了使用ntlm进行代理身份验证。

但是ntlm的问题是您必须cntlm每天多次更新配置文件。考虑以下情况:不同的用户共享一台公用计算机,并且他们cntlm每次登录系统时都必须在配置文件中更新其AD密码。也许有一种方法可以cntlm在用户登录时自动更新配置文件。


我仅在我的NTLM代理密码(域密码)更改时更新cntlm配置文件。
约翰
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.