[squid-users] deny_info and squid's own IP address?

Amish anon.amish at gmail.com
Tue May 1 07:44:32 UTC 2018


Hello,

First of thanks a lot for taking your time out for replying to my query.

My replies are inline.

On Tuesday 01 May 2018 09:10 AM, Amos Jeffries wrote:
> On 01/05/18 00:54, Amish wrote:
>> Hello
>>
>> I have 2 LAN interface on squid box, say department A (192.168.1.1/24)
>> and department B (192.168.2.1/24)
>>
>> I have few banned sites. Say Facebook.
>>
>> I have HTTP server (running on same server as squid) which shows custom
>> pages with custom logo based on IP address.
>>
>> When request comes for a banned site I would like client to be
>> redirected based on squid's own IP.
> Firstly, is there any particular reason you are requiring it to be a
> redirect?
>   from what you have said it appears you can achieve the same outcome
> without the extra web server by using a custom error page.

No I cant use custom error page as Javascript will leak the IP range of 
department A to department B.
(I had simplified my example, its actually two companies and not two 
departments infact I have 4-5 companies/subnets)

> Thirdly, on the issue of %h - the Squid hostname is *required* to
> resolve in DNS explicitly so clients can access things like these URLs.
> If your network and DNS is configured correctly each client subnet
> should resolve that hostname to the relevant IP which you are trying to
> "pass" to the web server in your redirect URL. So they will naturally
> (and only) connect to the web server (or Squid itself) using the right
> IP anyway - the web server should be able to detect what it needs from
> its own inbound TCP/IP connection instead of using raw-IPs in the traffic.
>
Some company uses OpenDNS, other Cloudflare, other Google etc.

So DNS will not resolve the hostname to same as %MYADDR.

> There are three options available to work around broken DNS:
>
>
> Option 1) to do exactly (and only) what you asked for.
>
> Currently this can be done with an external helper:
>
>   external_acl_type getIp concurrency=100 %MYADDR /path/to/script
>   deny_info 302:http://%et/banned.html getIp
>
> where the script just echos back to Squid the IP it was given like so:
>      [channel-id] OK message="<input-IP>"\n
>

Based on documentation of FORMAT for deny_info, I think you mean %o and 
not %et

Also will this "message" be available if I change by http_access line to:
deny_info 302:http://%o/banned.html blockedsites
http_access deny blockedsites getIp

will "message" of getIp be available to deny_info of blockedsites?

I will give this a try*, **however please see the end of the e-mail for 
a feature request.*

> Option 2) to use the client IP and have your web server respond based on
> those subnets instead of Squid IP.
>
>   acl clients1 src 192.168.1.0/24
>   deny_info 302:http://%h/banned.html?%i clients1
>   http_access deny blockedsites clients1
>
>   acl clients2 src 192.168.2.0/24
>   deny_info 302:http://%h/banned.html?%i clients2
>   http_access deny blockedsites clients2
>
>
> ** If you really *have* to use Squid-IP, this can work with localip ACL
> type instead of src. But then you have to bake each Squid-IP variation
> into the deny_info URL instead of using %i.
>

I will have to do this for each company. But I would like to keep 
squid.conf simple and minimal.

>
> Option 3) to use a custom error page instead of a redirect.
>
> Place your banned.html page into /etc/squid/banned.html and either a)
> write it with javascripts that pull in the right images/branding based
> on client IPs.
>
>    deny_info 403:/etc/squid/banned.html blockedsites
>
> ** Like (2) above this can use Squid-IP (via localip ACL type) if you
> really have to. But with the same limitation of using different files
> for branding instead of javascript for dynamic sub-resource/image fetching.

As stated earlier, this would leak IP range information.


_*Feature request:*_
Can we have the following switch-case in file errorpage.cc?

Source: 
https://github.com/squid-cache/squid/blob/master/src/errorpage.cc#L857

Currently case 'I' (capital i) for building_deny_info_url returns string 
"[unknown]"

Can it be modified to return "interface" address? i.e. same as MYADDR

I believe it would be just few (may be one) line change in code.

I can create a PR if required but can you or someone guide me on how to 
fetch MYADDR?

After this feature - all I would need to do is:

deny_info http://%I/banned.html blockedsites

Thank you again for your help.

Amish

>
>
> Amos
> _______________________________________________
> squid-users mailing list
> squid-users at lists.squid-cache.org
> http://lists.squid-cache.org/listinfo/squid-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squid-cache.org/pipermail/squid-users/attachments/20180501/5041253b/attachment.html>


More information about the squid-users mailing list