PfSense 2.2: Squid 3.4.10_2 pkg 0.2.6 redirection not working in transparent mode
-
Not sure if it's relevant, but I'd noted the following in cache.log.
2015/01/27 15:17:02 kid1| Starting Squid Cache version 3.4.10 for i386-portbld-freebsd10.1... 2015/01/27 15:17:02| pinger: Initialising ICMP pinger ... 2015/01/27 15:17:02| icmp_sock: (1) Operation not permitted 2015/01/27 15:17:02| pinger: Unable to start ICMP pinger. 2015/01/27 15:17:02| icmp_sock: (1) Operation not permitted 2015/01/27 15:17:02| pinger: Unable to start ICMPv6 pinger. 2015/01/27 15:17:02| FATAL: pinger: Unable to open any ICMP sockets. 2015/01/27 15:17:04 kid1| Starting Squid Cache version 3.4.10 for i386-portbld-freebsd10.1... 2015/01/27 15:17:05| pinger: Initialising ICMP pinger ... 2015/01/27 15:17:05| icmp_sock: (1) Operation not permitted 2015/01/27 15:17:05| pinger: Unable to start ICMP pinger. 2015/01/27 15:17:05| icmp_sock: (1) Operation not permitted 2015/01/27 15:17:05| pinger: Unable to start ICMPv6 pinger. 2015/01/27 15:17:05| FATAL: pinger: Unable to open any ICMP sockets.
Not sure why this should be so I'd enabled the Disable ICMP option on the General settings tab which then gives a clean start thus.
2015/01/27 15:21:09 kid1| Starting Squid Cache version 3.4.10 for i386-portbld-freebsd10.1... 2015/01/27 15:21:11 kid1| Starting Squid Cache version 3.4.10 for i386-portbld-freebsd10.1...
Steve
-
It's not too clear what happening from a browser perspective, but using telnet may be a little more informative.
From my laptop
$ telnet news.bbc.co.uk 80 Trying 212.58.244.56...
and then nothing.
Whereas
$ telnet pfsense 3128 Trying 10.5.1.1... Connected to pfsense. Escape character is '^]'.
clearly connects.
Trying the connection locally from the pfSense console
: telnet 127.0.0.1 3128 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'.
works.
This suggests that the redirection is not working, or at least squid is not accepting redirected connections.
This is making me think that the redirected request may not even be reaching squid. I've tried adding a pass all rule to the firewall, but this had no effect. As mentioned before I see the firewall logging TCP packets being passed on port 3128 so I'm somewhat confused.
Steve
-
I note the following applicable rule even if I disable my explicit rule such that I see the firewall log blocking access to 127.0.0.1:3128.
: pfctl -s rules | grep 3128 pass in quick on msk2 proto tcp from any to ! (msk2) port = 3128 flags S/SA keep state
I this state I see, from my laptop, immediate refused connections thus.
$ telnet news.bbc.co.uk 80 Trying 212.58.244.56... telnet: connect to address 212.58.244.56: Connection refused Trying 212.58.244.57... telnet: connect to address 212.58.244.57: Connection refused telnet: Unable to connect to remote host
If I re-enable my explicit rule such that the firewall logs the packet being passed, I see the following rules.
: pfctl -s rules | grep 3128 pass in log quick on msk2 inet proto tcp from any to any port = 3128 flags S/SA keep state label "USER_RULE: Squid Proxy" pass in log quick on msk2 inet6 proto tcp from any to any port = 3128 flags S/SA keep state label "USER_RULE: Squid Proxy" pass in quick on msk2 proto tcp from any to ! (msk2) port = 3128 flags S/SA keep state
Then the firewall logs a packet passed, but telnet hangs as per my previous post.
If I disable transparency mode I see that the extra rule is no longer there.
: pfctl -s rules | grep 3128 pass in log quick on msk2 inet proto tcp from any to any port = 3128 flags S/SA keep state label "USER_RULE: Squid Proxy" pass in log quick on msk2 inet6 proto tcp from any to any port = 3128 flags S/SA keep state label "USER_RULE: Squid Proxy"
Is this extra rule somehow broken?
Steve
-
Did you selected lan on transparent interface?
if you execute grep 3128 /tmp/rules.debug you should see two rules, one for redirect and other to allow traffic.
rdr on em1 proto tcp from any to !(em1) port 80 -> 127.0.0.1 port 3128 pass in quick on em1 proto tcp from any to !(em1) port {80,3128} flags S/SA keep state
-
Hi Marcelloc,
Your assistance with this is much appreciated.
Yes, LAN is selected as shown below. Note that SkyPlus is an alias for my Sky+ box which historically has refused to work with VOD services if proxied. It's presence in the config makes no difference.
I see the following
: grep 3128 /tmp/rules.debug SquidProxy = "{ 3128 }" rdr on msk2 proto tcp from any to !(msk2) port 80 -> 127.0.0.1 port 3128 pass in quick on msk2 proto tcp from any to !(msk2) port {80,3128} flags S/SA keep state
Should I need to define a rule to allow LAN access to port 3128? It looks like the above should cover it, but this alone results in blocked packets.
Thanks,
Steve
-
OK, so I just found the following in /tmp/rules.debug, between my rule for port 3128 and the one added by squid.
block return in log quick on $LAN inet from any to any tracker 1422139962 label "USER_RULE: IPv4 block"
As I block all traffic by default and only allow out what's explicitly permitted, and the squid rule is simply being appended to the ruleset, this makes sense now.
I'll try amending my rule to be an exact match and report back.
Steve
-
So, due to my use of aliases my rule did show up with your grep.
: grep SquidProxy /tmp/rules.debug SquidProxy = "{ 3128 }" pass in log quick on $LAN inet proto tcp from any to any port $SquidProxy tracker 1422139913 flags S/SA keep state label "USER_RULE: Squid Proxy"
I realise my rules for proxy access were too weak as they would have allowed somebody on my network to use alternate proxy, so I've modified my rules thus, but this hasn't fixed transparency mode. :(
pass in log quick on $LAN inet proto tcp from any to $pfSense port $SquidProxy tracker 1422139913 flags S/SA keep state label "USER_RULE: Squid Proxy" pass in log quick on $LAN inet proto tcp from any to (self) port $SquidProxy tracker 1422382055 flags S/SA keep state label "USER_RULE: Squid Proxy loopback"
Thanks,
Steve
-
Include 127.0.0.1 on your 3128 rule too.
-
Is that not the same as self?
Steve
-
-
Changed rules to
: grep SquidProxy /tmp/rules.debug SquidProxy = "{ 3128 }" pass in log quick on $LAN inet proto tcp from any to $pfSense port $SquidProxy tracker 1422139913 flags S/SA keep state label "USER_RULE: Squid Proxy" pass in log quick on $LAN inet proto tcp from any to 127.0.0.1 port $SquidProxy tracker 1422382055 flags S/SA keep state label "USER_RULE: Squid Proxy loopback"
No improvement.
Steve
-
To prove the point that the redirected transparent connection is not getting through to squid, I stopped the squid process and then ran the following on the pfSense console.
: nc -l 3128
I then telnetted to pfsense from my laptop and a connection was established and characters passed.
$ telnet 10.5.1.1 3128 Trying 10.5.1.1... Connected to pfsense.scevans.com. Escape character is '^]'. hello
: nc -Dl 3128 hello
I repeated trying to telnet to port 80 on news.bbc.co.uk which should have been directed by the redirect, and no connection was made.
Steve
-
I've now turn off transparent mode and then added a NAT rule.
This appears in /tmp/rules.debug thus.
rdr on msk2 proto tcp from any to !10.5.1.0/24 port 80 -> 10.5.1.1 port 3128
I see the resulting packet to port 3128 being passed by the firewall in the logs on an attempt to access an external host on port 80 from LAN.
With squid stopped and running
nc -vl 3128
instead on the pfSense console this connection attempt is not seen.
Contacting pfSense directly from the LAN on port 3128 does get through.
Clearly the HTTP request gets redirected to port 3128, makes it through the firewall, but then gets lost.
I'm stumped.
Steve
-
May be not related to the issue but do you have pfsense gui redirect enabled under system -> advanced?
All my testes were on pfsense 2.2 amd64, no cf or nanobsd.
What 2.2 version are you using?
-
I have the Disable webConfigurator redirect rule checkbox ticked as I have WPAD running on port 80 using the vHosts web server. Unfortunately iPhones etc don't use WPAD so I need transparency mode, but I've left it turned on for now.
I'm using the recent full 2.2 release.
I've just tried putting a pass all rule at the start of my LAN rules to see if that would fix any firewall issue, but it did no good.
Steve
-
2.2 amd64?
-
: uname -a FreeBSD pfsense.scevans.com 10.1-RELEASE-p4 FreeBSD 10.1-RELEASE-p4 #0 36d7dec(releng/10.1)-dirty: Thu Jan 22 15:19:32 CST 2015 root@pfsense-22-i386-builder:/usr/obj.i386/usr/pfSensesrc/src/sys/pfSense_wrap.10.i386 i386 : cat /etc/version 2.2-RELEASE
I've just rebooted the firewall with all pf rules reverted to those in /conf.default/config.xml. This should eliminate any firewall rule peculiarities. I'll let you know how that works once it's up.
Thanks,
Steve
-
I have two users on portuguese forum with same version 2.2-RELEASE-i386 and same issue.
Maybe it's related to squid pbi package compilation under i386 system.
-
Interesting.
Given that I see the lack of redirection with nc as well as squid I'm inclined to think this may not be an issue with squid at all, but rather with pf. That'd be quite a fundamental problem for pfSense!
I made THIS post in the Firewalling forum to see if that provides any insight. For now I'm going to see if a minimal pf configuration helps.
Thanks,
Steve
-
With the default firewall rules, squid is still not working in transparent mode.
As you're seeing multiple reports of this, could you please raise a bug report that captures the collective experience.
Thanks,
Steve