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

Amos Jeffries squid3 at treenet.co.nz
Tue May 1 03:52:14 UTC 2018



On 01/05/18 15:40, 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.
> 
>>
>> Something like this:
>>
>> acl blockedsites url_regex facebook
>> http_access deny blockedsites
>> deny_info http://SQUID-IP/banned.html blockedsites
>>
>> I need SQUID-IP to be replaced by 192.168.1.1 or 192.168.2.1 depending
>> on the IP on which connection came to.
>>
> 
> Secondly, I think you are probably looking at this from the wrong
> direction. With the topology you have described each of these "Squid
> IPs" is actually just the IP facing a certain client subnet. So the
> client subnet is what you want to be detecting, not the specific Squid IP.
> 
> 
> 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.
> 
> 
> 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
> 
> 
> 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.
> 
> 
> 
> 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.

or b) use multiple pages with different branding.

> 
>   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.
> 


Amos


More information about the squid-users mailing list