Como configurar corretamente o squid3 como proxy HTTPS?

2
Estou tentando configurar o squid3 como um proxy HTTPS usando o tutorial fornecido aqui. Configurei corretamente as configurações de proxy no meu navegador e, quando tento acessar sites HTTP , consigo me conectar com êxito. No entanto, sempre recebo um erro "Tempo limite de conexão esgotado" sempre que eu acesso um site de protocolo HTTPS e o seguinte erro no meu /var/log/squid3/cache.log :

2016/06/20 19:12:47|  NF getsockopt(SO_ORIGINAL_DST) failed on local=<local_ip_address>:3129 remote=<remote_ip_address>:55209 FD 8 flags=33: (92) Protocol not available

Aqui está o meu arquivo /etc/squid3/squid.conf (linhas comentadas removidas por brevidade):

auth_param basic program /usr/lib/squid3/basic_ncsa_auth /usr/etc/passwd
auth_param basic casesensitive off
auth_param basic credentialsttl 2 hours

acl user_auth proxy_auth REQUIRED

http_access allow user_auth

acl SSL_ports port 443
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 CONNECT method CONNECT

http_access allow localhost
http_access allow all
http_port 3127

https_port 3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB key=/etc/squid3/example.com.private cert=/etc/squid3/example.com.cert

ssl_bump server-first all
sslproxy_flags DONT_VERIFY_PEER
sslproxy_cert_error deny all
sslcrtd_program /usr/lib/squid3/ssl_crtd -s /var/lib/ssl_db -M 4MB sslcrtd_children 8 startup=1 idle=1
coredump_dir /var/spool/squid3

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .               0       20%     4320

always_direct allow all

Aqui está a saída do meu squid3 -v :

Squid Cache: Version 3.3.8
 (Ubuntu)
configure options:  '--build=i686-linux-gnu' '--prefix=/usr' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=/etc' '--localstatedir=/var' '--libexecdir=${prefix}/lib/squid3' '--srcdir=.' '--disable-maintainer-mode' '--disable-dependency-tracking' '--disable-silent-rules' '--datadir=/usr/share/squid3' '--sysconfdir=/etc/squid3' '--mandir=/usr/share/man' '--enable-inline' '--enable-async-io=8' '--enable-ssl' '--enable-ssl-crtd' '--enable-storeio=ufs,aufs,diskd,rock' '--enable-removal-policies=lru,heap' '--enable-delay-pools' '--enable-cache-digests' '--enable-underscores' '--enable-icap-client' '--enable-follow-x-forwarded-for' '--enable-auth-basic=DB,fake,getpwnam,LDAP,MSNT,MSNT-multi-domain,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB' '--enable-auth-digest=file,LDAP' '--enable-auth-negotiate=kerberos,wrapper' '--enable-auth-ntlm=fake,smb_lm' '--enable-external-acl-helpers=file_userip,kerberos_ldap_group,LDAP_group,session,SQL_session,unix_group,wbinfo_group' '--enable-url-rewrite-helpers=fake' '--enable-eui' '--enable-esi' '--enable-icmp' '--enable-zph-qos' '--enable-ecap' '--disable-translation' '--with-swapdir=/var/spool/squid3' '--with-logdir=/var/log/squid3' '--with-pidfile=/var/run/squid3.pid' '--with-filedescriptors=65536' '--with-large-files' '--with-default-user=proxy' '--enable-linux-netfilter' 'build_alias=i686-linux-gnu' 'CFLAGS=-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall' 'LDFLAGS=-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' 'CPPFLAGS=-D_FORTIFY_SOURCE=2' 'CXXFLAGS=-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security'

Passei muito tempo pesquisando esse erro, mas não consegui chegar a uma solução que configurasse o squid como um proxy HTTP. Como faço para que isso funcione?

    
por jobin 20.06.2016 / 16:03

2 respostas

2

Pode ser que você precise considerar o uso da diretiva http_port com ssl-bump e não https_port , pois você tem seus navegadores configurados com proxy (método CONNECT).

O modo de interceptação é apropriado para o proxy transparente (sem necessidade de configurações do navegador), quando os pacotes são automaticamente encaminhados para o proxy usando o iptables. A diretiva https_port é usada para interceptar e manipular o tráfego que chega ao proxy.

ssl-bump: link

This option is consulted when a CONNECT request is received on an http_port (or a new connection is intercepted at an https_port), provided that port was configured with an ssl-bump flag. The subsequent data on the connection is either treated as HTTPS and decrypted OR tunneled at TCP level without decryption, depending on the first matching bumping "action".

Para o exemplo ssl-bump: link

    
por 20.06.2016 / 16:21
0

O erro "NF getsockopt (SO_ORIGINAL_DST)" é um erro NAT. Não tem nada a ver com a criptografia.

Desde que você configurou seu navegador para usar o proxy explicitamente:

  • você não está interceptando nada. Usar a opção "interceptar" está errado e leva ao erro NAT.

  • o navegador não estaria usando o TLS para se conectar ao proxy. Essa é a verdadeira razão pela qual a https_port está errada em usar.

  • o navegador enviará mensagens CONNECT para a porta 3127 do proxy. Estes são o que precisa ser "colidido".

Então, o que você precisa fazer é simplesmente mover as configurações do ssl-bump para a sua linha http_port existente. Deveria se tornar assim:

http_port 3127 ssl-bump \
   generate-host-certificates=on \
   dynamic_cert_mem_cache_size=4MB \
   key=/etc/squid3/example.com.private \
   cert=/etc/squid3/example.com.cert

Outras coisas que você deve fazer para configurar corretamente o SSL-Bump são remover as seguintes linhas:

 sslproxy_flags DONT_VERIFY_PEER
 sslproxy_cert_error deny all

 always_direct allow all

Eles fazem mais mal do que bem e nem são úteis para depuração.

Além disso, atualize seu proxy para a versão mais recente do upstream. O TLS e o SSL-Bump estão envolvidos em uma rápida corrida armamentista para melhorar a segurança e para descriptografar essa segurança. Usar versões mais antigas do que as mais recentes garante problemas de uma maneira ou de outra. O Squid-3.3 especificamente tem problemas com o Elliptic Curve e outras cifras recentes, quebras quando a sessão de TLS é usada, não pode ignorar o pinning de certificação usando SNI, gera certificados SHA-1, etc.

    
por 28.09.2016 / 05:54