[squid-users] SSL Virtual Hosting Problem
Alex Rousskov
rousskov at measurement-factory.com
Tue Nov 28 14:24:18 UTC 2023
On 2023-11-28 05:29, Mario Theodoridis wrote:
> Hello everyone,
>
> i'm trying to use squid as a TLS virtual hosting proxy on a system with
> a public IP in front of several internal systems running TLS web servers.
>
> I would like to proxy the incoming connections to the appropriate
> backend servers based on the hostname using SNI.
>
> I'm using the following config to just try this with 1 backend to test
> with and fail already
>
> Here the config:
>
> http_port 3128
> debug_options ALL,2
> pinger_enable off
> shutdown_lifetime 1 second
> https_port 0.0.0.0:443 tproxy ssl-bump tls-cert=/root/dummy.pem
> acl tlspls ssl::server_name_regex -i test\.regify\.com
> cache_peer test.de.regify.com parent 443 0 proxy-only originserver
> no-digest no-netdb-exchange name=test
> ssl_bump peek all
> ssl_bump splice all
> http_access allow all
> cache_peer_access test allow all
It sounds like you want all traffic to go to the configured cache_peer,
but the above configuration has no rules specifying that request routing
requirement. Try adding something like
never_direct allow all
always_direct deny all
FWIW, cache_peer_access gives permission to access a peer if that peer
is being considered by request routing rules; it is not a requirement to
consider a peer.
> Also appreciated would be advise on where to find this documented.
While all squid.conf directives are documented, I am not aware of any
high-quality web page dedicated to explaining overall request routing to
Squid admins.
HTH,
Alex.
> Starting squid gives me the following:
>
> 2023/11/28 11:13:21.919| 1,2| main.cc(1619) SquidMain: Doing post-config
> initialization
> 2023/11/28 11:13:21.919| 1,2| main.cc(1621) SquidMain: running
> RegisteredRunner::finalizeConfig
> 2023/11/28 11:13:21.919| Created PID file (/run/squid.pid)
> 2023/11/28 11:13:21.921| 1,2| main.cc(1453) StartUsingConfig: running
> RegisteredRunner::claimMemoryNeeds
> 2023/11/28 11:13:21.921| 1,2| main.cc(1454) StartUsingConfig: running
> RegisteredRunner::useConfig
> 2023/11/28 11:13:21.988 kid1| 1,2| main.cc(1619) SquidMain: Doing
> post-config initialization
> 2023/11/28 11:13:21.988 kid1| 1,2| main.cc(1621) SquidMain: running
> RegisteredRunner::finalizeConfig
> 2023/11/28 11:13:21.988 kid1| 1,2| main.cc(1453) StartUsingConfig:
> running RegisteredRunner::claimMemoryNeeds
> 2023/11/28 11:13:21.988 kid1| 1,2| main.cc(1454) StartUsingConfig:
> running RegisteredRunner::useConfig
> 2023/11/28 11:13:21.988 kid1| Current Directory is /
> 2023/11/28 11:13:21.988 kid1| Creating missing swap directories
> 2023/11/28 11:13:21.988 kid1| No cache_dir stores are configured.
> 2023/11/28 11:13:21.992| 1,2| main.cc(2051) watch_child: running
> RegisteredRunner::finishShutdown
> 2023/11/28 11:13:21.992| Removing PID file (/run/squid.pid)
> 2023/11/28 11:13:22.063| 1,2| main.cc(1619) SquidMain: Doing post-config
> initialization
> 2023/11/28 11:13:22.063| 1,2| main.cc(1621) SquidMain: running
> RegisteredRunner::finalizeConfig
> 2023/11/28 11:13:22.063| Created PID file (/run/squid.pid)
> 2023/11/28 11:13:22.066| 1,2| main.cc(1453) StartUsingConfig: running
> RegisteredRunner::claimMemoryNeeds
> 2023/11/28 11:13:22.066| 1,2| main.cc(1454) StartUsingConfig: running
> RegisteredRunner::useConfig
> 2023/11/28 11:13:22.131 kid1| 1,2| main.cc(1619) SquidMain: Doing
> post-config initialization
> 2023/11/28 11:13:22.132 kid1| 1,2| main.cc(1621) SquidMain: running
> RegisteredRunner::finalizeConfig
> 2023/11/28 11:13:22.132 kid1| 1,2| main.cc(1453) StartUsingConfig:
> running RegisteredRunner::claimMemoryNeeds
> 2023/11/28 11:13:22.132 kid1| 1,2| main.cc(1454) StartUsingConfig:
> running RegisteredRunner::useConfig
> 2023/11/28 11:13:22.132 kid1| Current Directory is /
> 2023/11/28 11:13:22.132 kid1| Starting Squid Cache version 4.13 for
> x86_64-pc-linux-gnu...
> 2023/11/28 11:13:22.132 kid1| Service Name: squid
> 2023/11/28 11:13:22.132 kid1| Process ID 2863502
> 2023/11/28 11:13:22.132 kid1| Process Roles: worker
> 2023/11/28 11:13:22.132 kid1| With 1024 file descriptors available
> 2023/11/28 11:13:22.132 kid1| Initializing IP Cache...
> 2023/11/28 11:13:22.135 kid1| 78,2| dns_internal.cc(1570) Init:
> idnsInit: attempt open DNS socket to: 0.0.0.0
> 2023/11/28 11:13:22.135 kid1| DNS Socket created at 0.0.0.0, FD 5
> 2023/11/28 11:13:22.135 kid1| Adding domain de.regify.com from
> /etc/resolv.conf
> 2023/11/28 11:13:22.135 kid1| Adding nameserver 192.168.1.1 from
> /etc/resolv.conf
> 2023/11/28 11:13:22.135 kid1| helperOpenServers: Starting 5/32
> 'security_file_certgen' processes
> 2023/11/28 11:13:22.164 kid1| 46,2| Format.cc(71) parse: got definition
> '%>a/%>A %un %>rm myip=%la myport=%lp'
> 2023/11/28 11:13:22.165 kid1| 46,2| Format.cc(71) parse: got definition
> '%>a/%>A %un %>rm myip=%la myport=%lp'
> 2023/11/28 11:13:22.165 kid1| Logfile: opening log
> daemon:/var/log/squid/access.log
> 2023/11/28 11:13:22.165 kid1| Logfile Daemon: opening log
> /var/log/squid/access.log
> 2023/11/28 11:13:22.194 kid1| 71,2| store_digest.cc(96)
> storeDigestCalcCap: have: 0, want 0 entries; limits: [1, 0]
> 2023/11/28 11:13:22.194 kid1| 70,2| CacheDigest.cc(46) init: capacity: 1
> entries, bpe: ; size: 1 bytes
> 2023/11/28 11:13:22.194 kid1| Local cache digest enabled;
> rebuild/rewrite every 3600/3600 sec
> 2023/11/28 11:13:22.194 kid1| Store logging disabled
> 2023/11/28 11:13:22.194 kid1| Swap maxSize 0 + 262144 KB, estimated
> 20164 objects
> 2023/11/28 11:13:22.194 kid1| Target number of buckets: 1008
> 2023/11/28 11:13:22.194 kid1| Using 8192 Store buckets
> 2023/11/28 11:13:22.194 kid1| Max Mem size: 262144 KB
> 2023/11/28 11:13:22.194 kid1| Max Swap size: 0 KB
> 2023/11/28 11:13:22.194 kid1| Using Least Load store dir selection
> 2023/11/28 11:13:22.194 kid1| Current Directory is /
> 2023/11/28 11:13:22.194 kid1| Finished loading MIME types and icons.
> 2023/11/28 11:13:22.332 kid1| 80,2| wccp.cc(113) wccpConnectionOpen:
> WCCPv1 disabled.
> 2023/11/28 11:13:22.332 kid1| 80,2| wccp2.cc(959) wccp2ConnectionOpen:
> WCCPv2 Disabled. No IPv4 Router(s) configured.
> 2023/11/28 11:13:22.332 kid1| 33,2| AsyncCall.cc(25) AsyncCall: The
> AsyncCall clientListenerConnectionOpened constructed,
> this=0x5636c42036d0 [call18]
> 2023/11/28 11:13:22.333 kid1| 33,2| AsyncCall.cc(92) ScheduleCall:
> StartListening.cc(59) will call
> clientListenerConnectionOpened(local=0.0.0.0:3128 remote=[::] FD 22
> flags=9, err=0, HTTP Socket port=0x5636c4203730) [call18]
> 2023/11/28 11:13:22.333 kid1| 33,2| AsyncCall.cc(25) AsyncCall: The
> AsyncCall clientListenerConnectionOpened constructed,
> this=0x5636c420ca50 [call20]
> 2023/11/28 11:13:22.337 kid1| 33,2| AsyncCall.cc(92) ScheduleCall:
> StartListening.cc(59) will call
> clientListenerConnectionOpened(local=0.0.0.0:443 remote=[::] FD 23
> flags=25, err=0, HTTPS Socket port=0x5636c420cab0) [call20]
> 2023/11/28 11:13:22.337 kid1| HTCP Disabled.
> 2023/11/28 11:13:22.337 kid1| Squid plugin modules loaded: 0
> 2023/11/28 11:13:22.337 kid1| Adaptation support is off.
> 2023/11/28 11:13:22.338 kid1| 93,2| Config.cc(224) FinalizeEach:
> Initialized 0 message adaptation services
> 2023/11/28 11:13:22.338 kid1| 93,2| Config.cc(224) FinalizeEach:
> Initialized 0 message adaptation service groups
> 2023/11/28 11:13:22.338 kid1| 93,2| Config.cc(224) FinalizeEach:
> Initialized 0 message adaptation access rules
> 2023/11/28 11:13:22.339 kid1| 33,2| AsyncCallQueue.cc(55) fireNext:
> entering clientListenerConnectionOpened(local=0.0.0.0:3128 remote=[::]
> FD 22 flags=9, err=0, HTTP Socket port=0x5636c4203730)
> 2023/11/28 11:13:22.339 kid1| 33,2| AsyncCall.cc(37) make: make call
> clientListenerConnectionOpened [call18]
> 2023/11/28 11:13:22.339 kid1| Accepting HTTP Socket connections at
> local=0.0.0.0:3128 remote=[::] FD 22 flags=9
> 2023/11/28 11:13:22.346 kid1| 33,2| AsyncCallQueue.cc(57) fireNext:
> leaving clientListenerConnectionOpened(local=0.0.0.0:3128 remote=[::] FD
> 22 flags=9, err=0, HTTP Socket port=0x5636c4203730)
> 2023/11/28 11:13:22.346 kid1| 33,2| AsyncCallQueue.cc(55) fireNext:
> entering clientListenerConnectionOpened(local=0.0.0.0:443 remote=[::] FD
> 23 flags=25, err=0, HTTPS Socket port=0x5636c420cab0)
> 2023/11/28 11:13:22.346 kid1| 33,2| AsyncCall.cc(37) make: make call
> clientListenerConnectionOpened [call20]
> 2023/11/28 11:13:22.346 kid1| Accepting TPROXY intercepted SSL bumped
> HTTPS Socket connections at local=0.0.0.0:443 remote=[::] FD 23 flags=25
> 2023/11/28 11:13:22.352 kid1| 33,2| AsyncCallQueue.cc(57) fireNext:
> leaving clientListenerConnectionOpened(local=0.0.0.0:443 remote=[::] FD
> 23 flags=25, err=0, HTTPS Socket port=0x5636c420cab0)
> 2023/11/28 11:13:22.352 kid1| Configuring Parent test.de.regify.com/443/0
> 2023/11/28 11:13:22.353 kid1| 15,2| neighbors.cc(1198) peerDNSConfigure:
> --> IP address #0: 192.168.1.122
> 2023/11/28 11:13:22.368 kid1| 15,2| neighbors.cc(1272)
> peerConnectSucceded: TCP connection to test.de.regify.com/443 succeeded
> 2023/11/28 11:13:23 kid1| storeLateRelease: released 0 objects
>
>
> Then when i call curl -k https://test.regify.com/
>
> i get
>
> The requested URL could not be retrieved
>
> And the log has the following:
>
>
> 2023/11/28 11:15:05.467 kid1| 5,2| TcpAcceptor.cc(224) doAccept: New
> connection on FD 23
> 2023/11/28 11:15:05.467 kid1| 5,2| TcpAcceptor.cc(312) acceptNext:
> connection on local=0.0.0.0:443 remote=[::] FD 23 flags=25
> 2023/11/28 11:15:05.467 kid1| 17,2| QosConfig.cc(125)
> getNfmarkFromConnection: QOS: Failed to retrieve connection mark: (-1)
> (2) No such file or directory (Destination 192.168.1.132:443, source
> 192.168.1.124:60690)
> 2023/11/28 11:15:05.468 kid1| 33,2| client_side.cc(2742)
> httpsSslBumpAccessCheckDone: sslBump action peekneeded for
> local=192.168.1.132:443 remote=192.168.1.124:60690 FD 11 flags=17
> 2023/11/28 11:15:05.468 kid1| 33,2| client_side.cc(3418)
> fakeAConnectRequest: fake a CONNECT request to force connState to tunnel
> for ssl-bump
> 2023/11/28 11:15:05.468 kid1| 85,2| client_side_request.cc(751)
> clientAccessCheckDone: The request CONNECT 192.168.1.132:443 is ALLOWED;
> last ACL checked: all
> 2023/11/28 11:15:05.468 kid1| 85,2| client_side_request.cc(729)
> clientAccessCheck2: No adapted_http_access configuration. default: ALLOW
> 2023/11/28 11:15:05.468 kid1| 85,2| client_side_request.cc(751)
> clientAccessCheckDone: The request CONNECT 192.168.1.132:443 is ALLOWED;
> last ACL checked: all
> 2023/11/28 11:15:05.483 kid1| 17,2| FwdState.cc(142) FwdState:
> Forwarding client request local=192.168.1.132:443
> remote=192.168.1.124:60690 FD 11 flags=17, url=192.168.1.132:443
> 2023/11/28 11:15:05.483 kid1| 44,2| peer_select.cc(316)
> peerSelectDnsPaths: Found sources for '192.168.1.132:443'
> 2023/11/28 11:15:05.483 kid1| 44,2| peer_select.cc(317)
> peerSelectDnsPaths: always_direct = DENIED
> 2023/11/28 11:15:05.483 kid1| 44,2| peer_select.cc(318)
> peerSelectDnsPaths: never_direct = DENIED
> 2023/11/28 11:15:05.483 kid1| 44,2| peer_select.cc(324)
> peerSelectDnsPaths: ORIGINAL_DST = local=192.168.1.124
> remote=192.168.1.132:443 flags=25
> 2023/11/28 11:15:05.483 kid1| 44,2| peer_select.cc(331)
> peerSelectDnsPaths: timedout = 0
> 2023/11/28 11:16:05.433 kid1| 4,2| errorpage.cc(1259) BuildContent: No
> existing error page language negotiated for ERR_CONNECT_FAIL. Using
> default error file.
> 2023/11/28 11:16:05.433 kid1| 20,2| store.cc(985) checkCachable:
> StoreEntry::checkCachable: NO: not cachable
> 2023/11/28 11:16:05.433 kid1| 20,2| store.cc(985) checkCachable:
> StoreEntry::checkCachable: NO: not cachable
> 2023/11/28 11:16:05.463 kid1| 83,2| client_side.cc(2675)
> clientNegotiateSSL: New session 0x5636c4227330 on FD 11
> (192.168.1.124:60690)
> 2023/11/28 11:16:05.464 kid1| 11,2| client_side.cc(1306)
> parseHttpRequest: HTTP Client local=192.168.1.132:443
> remote=192.168.1.124:60690 FD 11 flags=17
> 2023/11/28 11:16:05.464 kid1| 11,2| client_side.cc(1307)
> parseHttpRequest: HTTP Client REQUEST:
> ---------
> GET / HTTP/1.1
> Host: test.regify.com
> User-Agent: curl/7.74.0
> Accept: */*
>
>
> ----------
> 2023/11/28 11:16:05.464 kid1| 88,2| client_side_reply.cc(2062)
> processReplyAccessResult: The reply for GET https://test.regify.com/ is
> ALLOWED, because it matched (access_log daemon:/var/log/squid/access.log
> line)
> 2023/11/28 11:16:05.464 kid1| 11,2| Stream.cc(271) sendStartOfMessage:
> HTTP Client local=192.168.1.132:443 remote=192.168.1.124:60690 FD 11
> flags=17
> 2023/11/28 11:16:05.464 kid1| 11,2| Stream.cc(272) sendStartOfMessage:
> HTTP Client REPLY:
> ---------
> HTTP/1.1 503 Service Unavailable
> Server: squid/4.13
> Mime-Version: 1.0
> Date: Tue, 28 Nov 2023 10:16:05 GMT
> Content-Type: text/html;charset=utf-8
> Content-Length: 3487
> X-Squid-Error: ERR_CONNECT_FAIL 110
> Vary: Accept-Language
> Content-Language: en
> X-Cache: MISS from proxy
> X-Cache-Lookup: NONE from proxy:3128
> Via: 1.1 proxy (squid/4.13)
> Connection: close
>
>
> ----------
> 2023/11/28 11:16:05.464 kid1| 20,2| store.cc(985) checkCachable:
> StoreEntry::checkCachable: NO: not cachable
> 2023/11/28 11:16:05.464 kid1| 33,2| client_side.cc(895) kick:
> local=192.168.1.132:443 remote=192.168.1.124:60690 flags=17 Connection
> was closed
> 2023/11/28 11:16:05.464 kid1| 33,2| client_side.cc(586) swanSong:
> local=192.168.1.132:443 remote=192.168.1.124:60690 flags=17
> 2023/11/28 11:16:05.465 kid1| 20,2| store.cc(985) checkCachable:
> StoreEntry::checkCachable: NO: not cachable
>
> I've been reading the squid docs and other internet resources, but am
> failing to figure out why this is not working.
>
> Any clue sticks would be appreciated.
>
> Also appreciated would be advise on where to find this documented.
>
>
More information about the squid-users
mailing list