Search squid archive

Re: reverse proxy - ssl url filtering

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 02.10.2012 12:27, forum wrote:
Hey alltogether

Unfortunatelly I am still suffering from this problem. Any help would
be greatly appreciated.

Thanks in advance

B. Brandt

On 2012-09-26 14:05, forum wrote:
Hey alltogether

We have the following reverse proxy setup:

Client <--SSL--> Squid <--SSL--> Server

and the important acls look like:

https_port 443 accel cert=/usr/local/squid/certs/cert.pem
key=/usr/local/squid/certs/key.pem defaultsite=example.org
clientca=/usr/local/squid/certs/cacert.pem
cafile=/usr/local/squid/certs/cacert.pem
capath=/usr/local/squid/certs/ sslcontext=id

1) What Squid version?

On 3.1 and older the use of "defaultsite=" without "vhost" causes all URLs to be re-written to "https://example.org"; instead of whatever the client was actually requesting. On 3.2 and later the "vhost" is implicit/assumed and the client provided Host: header will be used.


cache_peer xxx.xxx.xxx.xxx parent 443 0 no-query originserver
login=PASS ssl sslflags=DONT_VERIFY_PEER
sslcert=/usr/local/squid/certs/exchange.crt
sslkey=/usr/local/squid/certs/nopassexchange.key name=exchange_peer

So as you can see the client uses ssl and a client certificate as
authentication to connect to squid. Now we wanted to do some url
filtering:

acl exchange_dirs urlpath_regex
(\/owa|\/Autodiscover|\/Microsoft-Server-ActiveSync)

This regex does not do what you think it does.

If the client places "/owa" (or any of those strings) *anywhere* in the URL path or query parameters it will match.

2) Please list the access.log lines for some of the URLs which you think are supposed to not be accepted?


acl exchange_base_url url_regex ^https://example.org
http_access allow exchange_dirs exchange_base_url

In absence of any http_port lines, all your traffic will be "https://"; making that regex part redundant.

This is better written as:
  acl example dstdomain example.org
  http_access allow example exchange_base_url

With also:

  cache_peer_access exchange_peer allow example
  cache_peer_access exchange_peer deny all


http_access deny all

However as you might already guess its not working and I am wondering why. From my understanding, there is an SSL connection from Client to
Squid and an SSL connection from Squid to Server. Squid encrypts and
decrypts in the middle. Therefore squid schould be able to do the url
filtering.

Yes Squid can and does.


However the observed behviour is, that URL filtering works as long as
the user has NOT authenticated itself with its client CA. However
after the user authentication, the user can browse every url within
example.org. As if there were a direkt ssl connection between Client
and Server.

Client machine (what you are calling a "user") certificate authentication is always being done in the config you posted. Clients which "have not" or "do not" present valid certificates signed by your trusted "clientca=" certificate, are rejected by the TLS handshake before any HTTP request details get near Squid.

3) Are you certain those "authenticated" requests are passing through the proxy and not going direct to Exchange?

It sounds to me a bit like the clients which are NOT presenting certificates are being accepted and gatewayed by the reverse proxy. Whereas clients which ARE presenting certificates are probably being rejected and going direct to Exchange. You may need to use "https_port ... sslflags=NO_DEFAULT_CA" to use only your custom CA file to verify client certificates instead of the OpenSSL built in CA list.


Do we need to set the ssl-bump option? And if yes why? Isn't squid
already doing encryption and decryption?

No you don't need it for a reverse-proxy.

Amos


[Index of Archives]     [Linux Audio Users]     [Samba]     [Big List of Linux Books]     [Linux USB]     [Yosemite News]

  Powered by Linux