On 9/05/2013 12:27 a.m., Mr J Potter wrote:
Works for me! A few notes for anyone who needs them below.
And some extra notes in case anyone tries to use them ;-)
Thanks again everyone. Jim UK Issues/gotchas: It doesn't work behind parent proxies.
Well, it requires the parent proxy to be SSL-enabled as well.
It works with NTLM and ident You need your own certificate authority on all clients. To build squid3.2 on debian 7: dependencies: install everything so you can build squid3.1 from source get squid 3.2 source and build with: ./configure \ --prefix=/srv/squid32 \ --sysconfdir=/srv/squid32/conf \ --localstatedir=/srv/squid32/var \ --enable-auth \ --enable-auth-ntlm="SSPI,smb_lm" \ --enable-ssl \ --enable-ssl-crtd \ --enable-icap-client
Or better grab the 3.3 source package from Sid/Unstable repositories. Add the SSL options above to debian/rules and build. You will also need to install the libssl-dev package for those new options to work.
The 3.3 sources will require some adjustments to the rest of these notes as follows...
Follow instructions on creating a CA from: http://www.mydlp.com/how-to-configure-squid-3-2-ssl-bumping-dynamic-ssl-certificate-generation/ Here's my config cache_effective_user proxy #cache_peer caffreys.bristol-cyps.org.uk parent 3128 3130 default cache_peer courage.bristol-cyps.org.uk parent 3128 3130 default #no-delay #no-query no-digest no-netdb-exchange ## default #cache_peer_access caffreys.bristol-cyps.org.uk allow all cache_peer_access courage.bristol-cyps.org.uk allow all forwarded_for off url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf #auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp #auth_param ntlm children 20 startup=0 idle=1 #acl authdUsers proxy_auth REQUIRED acl authdUsers ident REQUIRED acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/16 # RFC1918 possible internal network acl localnet src fc00::/7 # RFC 4193 local private network range acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines acl HTTPS proto HTTPS 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 ## HTTPS busting bit!!! ssl_bump allow all
You probably want to adjust this as you go to add exceptions as you find sites which do not work with bumping or non-HTTPS traffic using CONNECT.
NOTE: with 3.3 sources you can use server-first instead of "allow" for a more user-friendly bump.
sslproxy_cert_error allow all
NOTE: using "allow all" with sslproxy_cert_error enables any hijacked SSL site to deliver content to your users without validation getting in the way and doing such things as warning them (or you) about the hijack. This is a very *BAD* idea to be this broad even with the 3.2 configuration.
PS. The 3.3 releases server-first feature prevents it being necessary almost all of the time, and has some built-in defaults for silencing the "harmless" errors.
# Or may be deny all according to your company policy # sslproxy_cert_error deny all sslproxy_flags DONT_VERIFY_PEER
This is pretty much the same as "allow all" on cert errors. If you find yourself needing this *at all*, then what you actually need to do is a) update your ca-certificates package, that may involve adding the "failing" servers CA manually to openssl library configuration. see openssl documentation for more.
sslcrtd_program /srv/squid32/libexec/ssl_crtd -s /srv/squid32/var/lib/ssl_db -M 4MB sslcrtd_children 5 # Deny CONNECT to other than secure SSL ports http_access deny CONNECT !SSL_ports # We strongly recommend the following be uncommented to protect innocent # web applications running on the proxy server who think the only # one who can access services on "localhost" is a local user #http_access deny to_localhost # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # # Example rule allowing access from your local networks. # Adapt localnet in the ACL section to list your (internal) IP networks # from where browsing should be allowed http_access allow authdUsers http_access allow localnet http_access allow localhost # And finally deny all other access to this proxy http_access allow all
NOTE: read the above comment.
always_direct allow HTTPS
NOTE: the above line disables using the cache_peer for any traffic. Squid-3.2 to 3.4 (at least) do not support wrapping peer requests in CONNECT so it s a good idea generally, but if you do trust the peer proxy AND the pathway between proxies is secured AND the peer is SSL-enabled it is reasonable to let the bumped requests through to it.
never_direct allow all #emulate_httpd_log on strip_query_terms off #log_fqdn on logformat squid %ts.%03tu %6tr %>A %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt
Please dont re-define the builtin logformat "squid". Use the one provided or a different name.
PS. the documented format for "squid" is just an approximation using the codes available. The real native squid format has slightly different handling of some fields than the custom codes use.
dns_nameservers 10.15.244.8 10.15.244.13 # Squid normally listens to port 3128 #http_port 3128 http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB key=/srv/squid32/ssl/private.pem cert=/srv/squid32/ssl/public.pem icp_port 3130 # Uncomment and adjust the following to add a disk cache directory. cache_dir ufs /srv/squid32/var/cache/squid 3000 16 256 # Leave coredumps in the first cache dir coredump_dir /srv/squid32/var/cache/squid # Add any of your own refresh_pattern entries above these. 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
And the below lines do nothing at all because of "http_access allow all" up above. It would be a good idea to move them back up above the CONNECT rule so these security checks have a chance of working as intended.
# # Recommended minimum Access Permission configuration: # # Only allow cachemgr access from localhost http_access allow localhost manager http_access deny manager # Deny requests to certain unsafe ports http_access deny !Safe_ports
Amos