Descobri com wireshark
que, ao falar com um proxy, curl
usa GET
, enquanto proxychains
usa CONNECT
. A diferença é explicada aqui: Qual é a diferença entre “CONNECT” e “GET HTTPS”?
Outra resposta menciona o encadeamento de proxy com CONNECT
. Acho que GET
não pode ser encadeado, é por isso que proxychains
usa CONNECT
.
Agora, o artigo da Wikipedia sobre o tunelamento HTTP diz o seguinte sobre CONNECT
:
Not all HTTP Proxy Servers support this feature, and even those that do, may limit the behaviour (for example only allowing connections to the default HTTPS port 443, or blocking traffic which doesn't appear to be SSL).
De fato, o Wiki do Cache de Squid declara (ênfase minha):
It is important to notice that the protocols passed through
CONNECT
are not limited to the ones Squid normally handles. Quite literally anything that uses a two-way TCP connection can be passed through aCONNECT
tunnel. This is why the Squid default ACLs start withdeny CONNECT !SSL_Ports
and why you must have a very good reason to place any type of allow rule above them.
Eu acho que o seu squid.conf
inclui uma linha como esta:
http_access deny CONNECT !SSL_Ports
Encontrei uma resposta que diz que é suficiente comentar esta linha . Verificado, funciona. No entanto, se você não quiser fazer um buraco tão grande em seu proxy, tente adicionar as três linhas a seguir ao seu squid.conf
:
acl myserver dst 192.168.2.4
acl myport port 80
http_access allow CONNECT myserver myport
# the original uncommented line must be below, like this
http_access deny CONNECT !SSL_Ports