On 16/02/2013 3:23 p.m., James Harper wrote:
On a Windows desktop there are often a bunch of system services that make http connections, either running as a system account or running as a user but that don't know how to authenticate. The list of these exceptions is tedious to maintain so it would be good to be able to authorise the users IP address once they have successfully authenticated to squid, sort of like the old style 'pop before smtp' auth used to work.
Tedious to maintain? what exactly are you listing?
I list services by approving and whitelisting destination domains.
That is no much work, as the listing only needs adapting when the first
time you encounter a service. A second, third... thousandth client
system using that service does not make any difference.
If such a solution was scriptable I could also use something like netfilter ipsets to allow access on non-http ports using squid authentication.
What hooks exist to allow this sort of thing?
Some Warnings first:
* Be careful with this. It is not very safe to trust an IP just because
you saw credentials from it earlier on a completely different connection.
* Clients are able to run proxy software and share their internet
connection with the world very easily these days.
* You loose all tracking of any infections or malicious software they
may be infected with.
* You loose the ability for users to share machines. User A can shut
down the machine, user B restart it and if they are fast enough the
proxy shares the session started by user A.
* the above means you loose the ability to identify which user is doing
what actions (once the IP-based session is active the credentials are
not used or logged).
Anyways....
What you want to look at is the session helper, with its active mode (-a
command line parameter).
http://www.squid-cache.org/Versions/v3/3.2/manuals/ext_session_acl.html
For example:
external_acl_type session ttl=300 %SRC
*/usr/local/squid/libexec/ext_session_acl -t 300 -a*
# allow client IPs which have already logged in earlier
acl sessionActive external session
http_access allow sessionActive
# deny anyone not logged in (triggers the login process)
acl auth proxy_auth REQUIRED
http_access deny !auth
# allow clients with login and create a session for them
acl sessionStart external session LOGIN
http_access allow auth sessionLogin
If you want to be fancy you can add the following snippet *above* the
sessionActive ACL test and setup a script which when the user logs off
their machine makes a web request (without credentials) to
http://example.com/logout . That will help avoid the session-sharing
problem provided people logout properly.
# magic logout. Visit the URL http://example.com/logout from a script
on the box to log this client out of the session when they logout or
shut down.
acl sessionLogout external session LOGOUT
acl logoutMagic url_regex ^http://example.com/logout$
http_access deny magicLogout sessionLogout
Amos