[squid-users] forward/reverse proxying with TLS.
Tony Albers
tony.albers at gmx.com
Thu Apr 13 04:28:27 UTC 2023
Hi Alex,
Thanks for your answer. Too bad that squid can't do what I want.
Can you think of another way of doing this, or do you know of another
tool that can?
Thanks,
/tony
On 12/04/2023 15:55, Alex Rousskov wrote:
> On 4/12/23 07:48, Tony Albers wrote:
>
>> What I want to do is "hide" an application behind squid, so that the
>> application receives http traffic, and sends http traffic. This
>> traffic then goes through squid in both directions, so that squid
>> receives https on the external IP and forwards it to the application
>> which is listening on the loopback interface, and squid receives
>> outgoing traffic from the application on the loopback interface and
>> then sends it out over the external IP with https.
>
>> Kinda like so:
>> Incoming: exthost1(HTTPS)->thishostname:443-> squid
>> ->127.0.0.1(HTTP)->127.0.0.1:1080
>>
>> Outgoing: 127.0.0.1(HTTP)->127.0.0.1:8080-> squid
>> ->exthost2:443(HTTPS)
>
>> when I use squid as outgoing proxy, the server in the other
>> end(88.24.12.40) says that squid doesn't present a client certificate
>> and drops the connection.
>
> It looks like you are trying to force Squid to encrypt traffic by
> using tls_outgoing_options. Squid cannot be forced to encrypt. Squid
> encrypts if it needs to communicate with a TLS origin server or
> cache_peer and does not encrypt otherwise. The tls_outgoing_options
> directive is consulted _if_ Squid encrypts; it cannot _force_ encryption.
>
> There are two primary use cases where Squid should encrypt traffic on
> behalf of an HTTP application:
>
> 1. The application, when configured to use a proxy at http_port, sends
> Squid HTTP requests that have an "https" URL scheme. This is often
> referred to as "GET https" use case. Very few applications (i.e. HTTP
> user agents) do that, unfortunately.
>
> 2. The application, when configured to use a proxy at http_port, sends
> Squid HTTP requests that have an "http" URL scheme, and Squid is
> configured to forward those HTTP requests to one (or a few)
> cache_peers, each configured with "tls" and "originserver" options.
> This use case is applicable only if the application communicates with
> a few origin servers, and you know all those origin servers in advance
> (so that you can create a matching cache_peer configuration for each
> of them).
>
> If your use case is #2, then you need to adjust your cache_peer
> directive to make that cache_peer a TLS peer (with appropriate client
> certificates).
>
>
> N.B. Your http_access rules may benefit from a refactoring that makes
> each rule specific to the listening port that needs access protection.
> For example, do not allow exthost traffic on http_port... Similar
> "everything everywhere" problem may exist for your cache_peer access
> rules: Those rules should deny peering for traffic received on
> https_port AFAICT.
>
>
> HTH,
>
> Alex.
>
>
>
>> I have the application running in a container on the host.
>> On the same host I also have squid installed.
>>
>> The application listens on 127.0.0.1:1080 on HOST
>> Squid is set up as a reverse proxy, listening to https on the
>> external if on HOST:443 and forwards everything as http to
>> 127.0.0.1:1080
>> (this works fine)
>>
>> When the application then transmits something via http, it uses
>> localhost:8080 as proxy, where squid picks it up and then forwards it
>> as https.
>> (this doesn't work)
>>
>> At least that#s what I want it to do..
>>
>> However, when I use squid as outgoing proxy, the server in the other
>> end(88.24.12.40) says that squid doesn't present a client certificate
>> and drops the connection.
>>
>> But I got the impression that tls_outgoing_options is for exactly
>> that.. Have I misunderstood something?
>>
>>
>> My squid config looks like this:
>>
>> # prefer DNS over IPv4
>> dns_v4_first on
>>
>> # define hosts/networks that we use
>> acl exthost src 88.24.12.60/32
>> acl inthosts src 172.27.2.0/24
>> acl internal src 127.0.0.1/32
>>
>> # access lists
>> http_access allow exthost
>> http_access allow inthosts
>> http_access allow internal
>>
>> # reverse SSL proxy converting to noSSL
>> https_port 172.27.2.118:443 accel
>> tls-cert=/etc/squid/certs/thishostname.crt
>> tls-key=/etc/squid/keys/thishostname-privkey.pem
>> defaultsite=thishostname
>> cache_peer 127.0.0.1 parent 1080 0 no-query proxy-only originserver
>> name=thishostname
>>
>> # forward proxy converting to SSL
>> http_port 127.0.0.1:8080
>> acl extnet dstdomain -n .somedomain.dk
>> acl extip dstdomain 88.24.12.40
>> acl intip dstdomain -n .someotherdomain.dk
>> url_rewrite_program /etc/squid/urlrewrite.py
>> tls_outgoing_options cert=/etc/squid/certs/thishostname.crt
>> tls_outgoing_options key=/etc/squid/keys/thishostname-privkey.pem
>> tls_outgoing_options cafile=/etc/squid/certs/thishostnameCA.pem
>> tls_outgoing_options capath=/etc/ssl/certs
>> tls_outgoing_options domain=somedomain.dk
>> never_direct deny extnet
>> never_direct deny extip
>> never_direct allow all
>>
>> cache_peer_access thishostname allow exthosts
>> cache_peer_access thishostname allow inthosts
>> cache_peer_access thishostname allow internal
>> cache_peer_access thishostname deny all
>>
>> # disable local caching
>> cache deny all
>
> _______________________________________________
> squid-users mailing list
> squid-users at lists.squid-cache.org
> http://lists.squid-cache.org/listinfo/squid-users
More information about the squid-users
mailing list