
Estou tendo problemas para conectar um proxy de encaminhamento com o proxy reverso, ambos suportados pelo tinyproxy (versão 1.8.3). Não sei se é problema de configuração.
Estou testando esses proxies com 4 máquinas virtuais rodando Debian GNU/Linux 8.9 (jessie). Essas máquinas representam um cliente, um proxy de encaminhamento, um proxy reverso e o servidor. Estou configurando a comunicação entre o proxy direto e o proxy reverso.
O servidor está executando o servidor Apache, que retorna a página HTML padrão dizendo “Funciona”.
O comportamento desejado é que o cliente se comunique com o servidor através do proxy de encaminhamento que faz upstream para o proxy reverso que interage com o servidor: Cliente (10.0.2.33) -> proxy de encaminhamento (10.0.2.35) -> proxy reverso (10.0.35) -> proxy reverso (10.0. 2.36) -> servidor (10.0.2.34)
Para testar o sistema eu uso este comando curl na máquina cliente:
curl -v --proxy http://10.0.2.35:8888 http://10.0.2.34:80/
Arquivo de configuração de proxy de encaminhamento:
## tinyproxy.conf -- tinyproxy daemon configuration file
User nobody
Group nogroup
Port 8888
Listen 10.0.2.35
BindSame yes
Timeout 600
DefaultErrorFile "/usr/share/tinyproxy/default.html"
StatFile "/usr/share/tinyproxy/stats.html"
Logfile "/var/log/tinyproxy/tinyproxy.log"
#Syslog On
LogLevel Info
PidFile "/var/run/tinyproxy/tinyproxy.pid"
#Upstream 10.0.2.36:8888 "10.0.2.0/24"
Upstream 10.0.2.36:8888
MaxClients 100
MinSpareServers 2
MaxSpareServers 5
StartServers 2
MaxRequestsPerChild 0
Allow 127.0.0.1
Allow 10.0.2.0/24
ViaProxyName "tinyproxy1"
ConnectPort 8888
ConnectPort 80
# The following two ports are used by SSL.
ConnectPort 443
ConnectPort 563
Arquivo de configuração de proxy reverso:
## tinyproxy.conf -- tinyproxy daemon configuration file
User nobody
Group nogroup
Port 8888
Listen 10.0.2.36
BindSame yes
Timeout 600
StatFile "/usr/share/tinyproxy/stats.html"
Logfile "/var/log/tinyproxy/tinyproxy.log"
#Syslog On
LogLevel Info
PidFile "/var/run/tinyproxy/tinyproxy.pid"
no upstream "10.0.2.34:80"
#no upstream "."
MaxClients 5
MinSpareServers 2
MaxSpareServers 5
StartServers 2
MaxRequestsPerChild 0
Allow 127.0.0.1
Allow 10.0.2.0/24
Allow 10.0.2.35
ViaProxyName "tinyproxy2"
ConnectPort 8888
ConnectPort 80
# The following two ports are used by SSL.
ConnectPort 443
ConnectPort 563
ReversePath "/" "http://10.0.2.34:80/"
ReversePath "/wired/" "http://www.wired.com/"
ReverseOnly Yes
ReverseMagic Yes
ReverseBaseURL "http://10.0.2.34:80/"
Estes são os fluxos de fluxo TCP capturados pelo Wireshark:
Fluxo [cliente <-> proxy de encaminhamento]
GET http://10.0.2.34:80/ HTTP/1.1
User-Agent: curl/7.38.0
Host: 10.0.2.34
Accept: */*
Proxy-Connection: Keep-Alive
HTTP/1.0 400 Bad Request
Via: 1.1 tinyproxy1 (tinyproxy/1.8.3)
Server: tinyproxy/1.8.3
Content-Type: text/html
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head><title>400 Bad Request</title></head>
<body>
<h1>Bad Request</h1>
<p>Request has an invalid URL</p>
<hr />
<p><em>Generated by tinyproxy version 1.8.3.</em></p>
</body>
</html>
Fluxo [proxy direto <-> proxy reverso]
GET http://10.0.2.34:80/ HTTP/1.0
Host: 10.0.2.34
Connection: close
Via: 1.1 tinyproxy1 (tinyproxy/1.8.3)
User-Agent: curl/7.38.0
Accept: */*
HTTP/1.0 400 Bad Request
Server: tinyproxy/1.8.3
Content-Type: text/html
Connection: close
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head><title>400 Bad Request</title></head>
<body>
<h1>Bad Request</h1>
<p>Request has an invalid URL</p>
<hr />
<p><em>Generated by tinyproxy version 1.8.3.</em></p>
</body>
</html>
Estas são as saídas para o arquivo de log tinyproxy:
Proxy de encaminhamento
CONNECT Dec 10 22:05:08 [2788]: Connect (file descriptor 6): 10.0.2.33 [10.0.2.33] at [10.0.2.35]
CONNECT Dec 10 22:05:08 [2788]: Request (file descriptor 6): GET http://10.0.2.34:80/ HTTP/1.1
INFO Dec 10 22:05:08 [2788]: Found upstream proxy 10.0.2.36:8888 for 10.0.2.34
CONNECT Dec 10 22:05:08 [2788]: Established connection to upstream proxy "10.0.2.36" using file descriptor 7.
INFO Dec 10 22:05:08 [2788]: Closed connection between local client (fd:6) and remote client (fd:7)
Proxy reverso
CONNECT Dec 10 22:05:08 [4487]: Connect (file descriptor 6): 10.0.2.35 [10.0.2.35] at [10.0.2.36]
CONNECT Dec 10 22:05:08 [4487]: Request (file descriptor 6): GET http://10.0.2.34:80/ HTTP/1.0
ERROR Dec 10 22:05:08 [4487]: Bad request
INFO Dec 10 22:05:08 [4487]: no entity
Atualmente, posso acessar a página do servidor dentro da máquina proxy reversa, “curl”http://10.0.2.34:80/ehttp://10.0.2.36:8888/por causa da minha configuração de proxy reverso (ReversePath). A próxima imagem mostra a captura do Wireshark na máquina proxy reversa.
Imagem do acesso de proxy reverso às capturas do servidor
Com toda essa configuração, tudo que recebo na máquina do cliente é uma mensagem de erro de solicitação incorreta 400 do proxy reverso.
Responder1
Este problema foi resolvido. A maneira de testar isso não é solicitar a página diretamente ao servidor, mas à máquina proxy reversa. Além disso, o proxy direto não deve enviar o tráfego para o proxy reverso.
O proxy reverso não consegue entender a solicitação enviada ao host/servidor, se o proxy de encaminhamento envia o tráfego porque eles funcionam de maneira diferente.
A configuração correta para o proxy de encaminhamento deve excluir a linha:
upstream 10.0.2.36:8888
Porque o proxy reverso tem a seguinte regra:
ReversePath “/” “http://10.0.2.34:80/”
Ao solicitar o recurso do servidor (a página "Funciona" do Apache), o proxy reverso (10.0.2.36) solicitará o servidor (10.0.2.34) assim que solicitarmos “http://10.0.2.36:8888/”
Devemos executar curl para o proxy reverso com:
curl -v --proxy http://10.0.2.35:8888 http://10.0.2.36:8888/
Então podemos ver que a configuração funciona, com a seguinte saída:
root@debian:/home/debian# curl -v --proxy http://10.0.2.35:8888 http://10.0.2.36:8888
* Rebuilt URL to: http://10.0.2.36:8888/
* Hostname was NOT found in DNS cache
* Trying 10.0.2.35...
* Connected to 10.0.2.35 (10.0.2.35) port 8888 (#0)
> GET http://10.0.2.36:8888/ HTTP/1.1
> User-Agent: curl/7.38.0
> Host: 10.0.2.36:8888
> Accept: */*
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 OK
< Via: 1.0 tinyproxy2 (tinyproxy/1.8.3), 1.1 tinyproxy1 (tinyproxy/1.8.3)
< Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
< Date: Tue, 12 Dec 2017 23:01:37 GMT
< Content-Type: text/html
< ETag: "2d-432a5e4a73a80"
< Set-Cookie: yummy_magical_cookie=/; path=/
* Server Apache/2.4.29 (Unix) is not blacklisted
< Server: Apache/2.4.29 (Unix)
< Content-Length: 45
< Accept-Ranges: bytes
<
<html><body><h1>It works!</h1></body></html>
* Connection #0 to host 10.0.2.35 left intact