Re: Discriminate client requests from transparent proxy requests?

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

 



On 18/12/12 12:27 AM, Jan Engelhardt wrote:
On Tuesday 2012-12-18 08:45, Jack Bates wrote:

Do you have any advice how to discriminate traffic from clients from
traffic from our transparent proxy?

Our proxy sends requests to origin servers with the same source address
as the request from the client, so we can do per-host traffic shaping
on our router. [What options are there?]

I take it you might be using something like squid and tproxy.

You're right, we're using Apache Traffic Server and tproxy. Traffic Server is configured with "CONFIG proxy.config.http.server_ports STRING 8080:tr-full" to make both connections to clients and connections to origin servers transparent.

But consequently I wonder how to discriminate client requests from proxy
requests,

The origin servers can inspect the "Via:" HTTP request header to
determine the presence of a proxy. There might be other headers your
proxy server is emitting that you would normally not find in a pure
client request.

Interesting suggestion, I hadn't thought of inspecting the application layer. I want our router (not the origin server) to discriminate between requests from clients and requests from the proxy (to reroute the former via the transparent proxy, but not the latter) so I had in mind teaching iptables to recognize the difference.

We run Traffic Server as a forward proxy.

A second possibility, when proxy server and origin server are on the
same Ethernet subnet, is to look at the L2 address. Of course the L2
addr can be "tproxified" as well, but usually is not worth doing.

This is a possibility, with "iptables -m mac --mac-source ..." The proxy and the router are on the same subnet. Are there any other options?

I tried adding a second IP to the router, as an alias, changing the default gateway of the proxy to this other address, and matching traffic from the proxy with "iptables -i br-lan:1" but I discovered that --in-interface doesn't support aliases (I guess this makes sense, traffic doesn't reference the IP of the next hop, so how can you tell which alias it arrived on?)

and route the former to the proxy, but not route the latter.

As you have noticed, if the original client address is used, routing
topology/rules needs to be laid out such that packets to client
addresses always pass through the proxy server machine in both
directions. (This is the same prerequisite as for connection-tracked
NAT.)

Discriminating between responses from origin servers and responses from the proxy is easier because the proxy is on a different router interface than our internet connection, so I use the following to reroute responses via the transparent proxy:

iptables -A PREROUTING -t mangle -i eth0.2 -p tcp --sport 80 -j MARK --set-mark 1/1
ip rule add fwmark 1/1 table 1
ip route add table 1 via 192.168.1.35
--
To unsubscribe from this list: send the line "unsubscribe netfilter" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Netfilter Development]     [Linux Kernel Networking Development]     [Netem]     [Berkeley Packet Filter]     [Linux Kernel Development]     [Advanced Routing & Traffice Control]     [Bugtraq]

  Powered by Linux