On Tue, 1 Nov 2011 11:53:34 +0200, Oguz Yilmaz wrote:
Hi,
We use NLTM Authentication with Squid is some setups.On hose setup
local machine joins active directory and squid ntlm_auth helper
authenticate through local samba service. Users transparently
authenticate through NTLM authentication handshake on HTTP without
entering any password in their browser.
However, in some cases, branch offices has no local active directory
copy. Branch office is connected to the headquarters through a IPSEC
vpn. I can join the branch office samba to the headquarter active
directory domain and set NTLM authentication on Squid up correctly.
This setup has a weakness inherited from high latency, packet loss of
some other things that I dont know about samba. 3-4 times in a day
users get prompted with user name password authentication popup on
their browser. Sometimes this recovered naturally in a few minutes.
However, it requires rejoining to the domain in come cases. (wbinfo
-t
gives error and wbinfo -l can not list users).
I have made some tunings in samba:
getwd cache = yes
winbind cache time = 3000
ldap connection timeout = 10
ldap timeout = 120
This decreased error rate to 1 per day.
Which other tunings can I do on samba and squid? I need your
experiences.
Firstly, the validation lag is internal to the authentication system.
Which consists of the helper and everything it does and uses. There is
nothing squid can do about the auth systems internal lag. As indicated
by the fact that tweaking samba resolved a lot of the problem.
There are a few workarounds to avoid doing the validations by Squid
though.
Firstly and most preferred is to move to Negotiate/Kerberos
authentication. It is more than twice as efficient as NTLM and offers
modern security algorithms for much higher security.
NTLM authentication handshake is done once per TCP connection, and
applies only to that connection. So credentials can only be "cached" for
as long as that TCP connection is active/persisting.
Which should indicate what the fix is:
Get persistent connections to the clients staying up as long as
possible. At present that means you need the latest HTTP/1.1 supporting
Squid to maximize the keep-alive feature compliance. I recommend 3.2.0.8
if you are able, otherwise the latest 3.1 series, or 2.7.STABLE9 (in
that order of preference). Avoid 3.0, 2.6 and older Squid series.
Best Regards,
squid.conf:
auth_param ntlm program /usr/bin/ntlm_auth
--helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 20
auth_param ntlm keep_alive off
keep-alive ON.
Also check:
client_persistent_connections ON
auth_param basic program /usr/bin/ntlm_auth
--helper-protocol=squid-2.5-basic
auth_param basic children 20
auth_param basic realm Squid AD Auth
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
Basic is checked done once per request, with credentialsttl being how
often the backend gets checked for updates to the yes/no answer. You may
be able to extend the credentialsttl longer for less backend checks.
Impact of this tweak depends on how much of the client software is
fialing to support NTLM and choosing Basic though.
Amos