On 11.01.2012 02:55, Jason Fitzpatrick wrote:
Hi all

We are in the process of replacing an ISA cluster with a Squid Cluster
(Squid Cache: Version 3.1.14) and have run into some issues with the
forwarding of credentials to an upstream proxy.

Our setup is as follows (names and IP addresses just for explanation
purposes)

Netscaller Load-ballancer        10.0.0.10:8080 [squid.domain.local]

Squid Node 1                         10.0.0.11:8080
[squidnode1.domain.local] - sibling
Squid Node 2                         10.0.0.12:8080
[squidnode2.domain.local] - sibling

Upstream Websense              10.0.0.20:8080 [websense.domain.local]
- parent

Upstream Transparent Proxy   10.1.0.10:8080 [parent.domain.local] - parent

Clients connect in from within a Citrix / Terminal server environment
to the load-ballancer, which in turn forwards the TCP connection to
one of the squidnode's (load ballanced / round robin with failover)
The Squid then forwards the connections onto the websense system using
the following directive from squid.conf (ex from node 1)

cache_peer 10.0.0.20 parent 8080 3130 no-query login=PASS weight=4
cache_peer 10.0.0.12 sibling 8080 3130 login=PASS

The websense (running on a linux platform) then authenicates the users
and based on its access rules then forwards the request onto the
upstream server and off to the internet.

Our issue is that the websense does not seem to be authenticating all
Terminal Server / Citrix users correctly, it is set up to use IWA with
a fall back to ntlm authentication, it seems to be authenticating the
1st connection via the squid from the IP address of the TS but not the
following ones.

"seems" was probably a good choice of word there. Consider how is this authentication happening? based on what details?

1) HTTP is a stateless protocol. Multiple users requests can leave Squid sharing one TCP connection. => TCP and IP level details is not a good indication of the "user" viewing the response.

2) Squid caches responses. Multiple users can share a single response. => requesting client details are not a good indication of the "user" viewing any cacheable response.


Having eliminated TCP and IP, possibly also HTTP information from reliability what is left: only non-cachead responses and requests with authentication credentials which are passed back explicitly.

The way Squid handles NTLM is to break HTTP performance and disable (1). But only for DIRECT traffic, when going through peers it does not always work. See below.



Websense seem to think that this is a problem with the squid
configuration but I am not sure that this is true as the squid is only
forwarding on the authentication request to the websense box. Does
Squid have the ability to differentiate between multiple users on a
single computer?

Yes. HTTP authentication supports multiple users in one request stream.
But NTLM is not user authentication. It is layer 2 TCP connection authentication done over HTTP at layer-7. The difference and interactions can cause confusing side effects. Squid supports receiving and validating such authentication itself. Recent Squid also support relaying it in www-auth logins to a web server to some degree (reliability varies a LOT across the Internet environment).

The problem in your config is that "login=PASS" only passes Basic proxy-auth credentials. If no Basic auth credentials are present Squid will erase the existing ones and create some Basic ones with any details it can find for that user. * NOTE that Proxy-Authentication header are hop-by-hop, So "passing credentials on" is not a matter of relaying headers, but of Squid logging itself into the remote server, which is not supporting NTLM proxy-auth.

The other part of the problem is whether websense is needing www-auth or proxy-auth. Probably proxy-auth which will not work in 3.1 due to the above lack of support.

For NTLM you need at minimum a squid release which supports both login=PASSTHRU and connection-auth=on. This is the actual pass-thru style of proxy-auth headers. Officially that is 3.2, but the PASSTHRU patches can be adjusted easily to 3.1. By itself the PASSTHRU is no guarantee either, we have reports of some as yet unidentified problems with NTLM. Test carefully before use.


Overall it is best to perform access controls at the point of entry to the system, rather than halfway across it, which means in those sibling Squids. The 3.2 login=NEGOTAITE option supports this with the front-end squid performing authentication of the users (any of the HTTP auth types you like) and passing their name info backwards to websense (if needed at all) down a connection secured with Squids own Kerberos credentials. Note that this is how NTLM and Kerberos were originally designed to be used. Authenticating the TCP connection directly between two services with no middleware accessing the authenticated connection.


Amos

Reply via email to