Estou tentando configurar um proxy de depuração usando o Squid, principalmente para testar nossa própria biblioteca de comunicações cliente para vários tipos de proxy (uma possibilidade com nosso cliente é conectar-se a um serviço externo de interceptação e filtragem de proxy).
Nossa configuração de rede é assim:
[Client device/browser] -- [proxy, public IP only] -- [target websites, e.g. Google, Facebook, etc]
Ao testar a configuração, fazer isso de um cliente Linux funciona bem (já que a porta 8991 não está configurada com interceptação):
$ curl --proxy http://<squidserverip>:8991 http://www.example.com/
Esta versão, no entanto, fornece uma página de erro Access Denied do Squid (já que a porta 8990 está configurada com interceptação):
$ curl --proxy http://<squidserverip>:8990 http://www.example.com/
No servidor Squid, vejo o seguinte em cache.log:
2015/03/11 20:10:44 kid1| WARNING: Forwarding loop detected for:
GET / HTTP/1.1
User-Agent: curl/7.26.0
Host: www.example.com
Accept: */*
Via: 1.1 <servername> (squid/3.4.8)
X-Forwarded-For: <client-source-ip>
Cache-Control: max-age=259200
Connection: keep-alive
Nestes exemplos, ofusquei as solicitações reais (com nomes / títulos de placeholder), por motivos de segurança.
Meu squid.conf atualmente se parece com isso (com linhas comentadas e linhas em branco removidas):
acl SSL_ports port 443
acl SSL_ports port 8443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 8443
acl CONNECT method CONNECT
acl SSL method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow localhost
http_access allow all
http_reply_access allow all
http_port 8990 intercept ssl-bump cert=/etc/squid3/certificate.pem generate-host-certificates=on
http_port 8991
https_port 8443 cert=/etc/squid3/certificate.pem key=/etc/squid3/certificate.pem ssl-bump intercept generate-host-certificates=on dynamic_cert_mem_cache_size=4MB options=ALL
ssl_bump none localhost
ssl_bump client-first all
sslproxy_flags DONT_VERIFY_PEER
sslproxy_cert_error allow all
sslcrtd_program /usr/lib/squid3/ssl_crtd -s /var/lib/ssl_db -M 4MB
sslcrtd_children 5
netdb_filename none
coredump_dir /var/spool/squid3
pinger_enable off
cache deny all
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
query_icmp off
always_direct allow all
never_direct allow all
Com base nas minhas pesquisas pelo Google, cheguei à conclusão de que a funcionalidade de interceptação requer que eu configure um roteamento personalizado com o iptables, mas nenhuma das várias configurações que tentei deu resultados.
Parece que podemos nos conectar ao Squid pelo cliente (nas três portas, incluindo o handshake SSL para https_port), mas não consigo executar com êxito as solicitações nas duas portas que interceptam.
Qualquer ajuda seria apreciada, seja com a configuração correta do iptables para nossa configuração de rede, ou com as alterações necessárias no squid.conf (ou outros arquivos de configuração no servidor).
Tags networking proxy iptables squid linux