[squid-users] Questions about Squid configuration
Alex Rousskov
rousskov at measurement-factory.com
Thu Aug 8 12:32:55 UTC 2024
On 2024-08-06 20:59, にば wrote:
> When using Squid transparently, is it possible to control the
> whitelist of the domain to connect to and inspect the Host field in
> the request header together?
Short answer: Yes.
> According to the verification results, the Host field can be inspected
> by "host_verify_strict on" in squid-transparent.conf, but it seems
> that the whitelist is not controlled.
AFAICT, the configuration you have shared allows all banned[1] traffic
to/through https_port. For the problematic test case #5:
All these http_access rules do _not_ match:
> http_access allow localnet whitelist
> http_access deny localnet whitelist_https !https_port
> http_access deny localnet whitelist_transparent_https !https_port
And then this next rule matches and allows traffic through:
> http_access allow https_port
This last http_access rule is not reached:
> http_access deny all
N.B. The above analysis assumes that your https_port ACL is explicitly
defined in your squid.conf to match all traffic received at https_port.
If you do not have such an ACL defined, then you need to fix that
problem as well. I recommend naming ACLs differently from directive
names (e.g., "toHttpsPort" rather than "https_port").
Please note that Squid v4 is not supported by the Squid Project and is
very buggy. I recommend using Squid v6 or later.
HTH,
Alex.
[1] Here, "banned" means "_not_ matching whitelist ACL".
> ■Configuration Details
> 〇squid-transparent.conf(Excerpts)
> #Whitelist
> acl whitelist dstdomain "/etc/squid/whitelist"
> acl whitelist dstdomain "/etc/squid/whitelist_transparent"
> acl whitelist_https dstdomain "/etc/squid/whitelist_https"
> acl whitelist_transparent_https dstdomain
> "/etc/squid/whitelist_transparent_https"
>
> proxy_protocol_access allow localnet
> proxy_protocol_access deny all
> http_access allow localnet whitelist
> http_access deny localnet whitelist_https !https_port
> http_access deny localnet whitelist_transparent_https !https_port
>
> # Handling HTTP requests
> http_port 3129 intercept
> # Handling HTTPS requests
> https_port 3130 intercept tcpkeepalive=60,30,3 ssl-bump
> generate-host-certificates=on dynamic_cert_mem_cache_size=20MB
> tls-cert=/etc/squid/ssl/squid.crt tls-key=/etc/squid/ssl/squid.key
> cipher=HIGH:MEDIUM:!LOW:!RC4:!SEED:!IDEA:!3DES:!MD5:!EXP:!PSK:!DSS
> options=NO_TLSv1,NO_SSLv3,SINGLE_DH_USE,SINGLE_ECDH_USE
> tls-dh=prime256v1:/etc/squid/ssl/bump_dhparam.pem
> # Start up for squid process
> http_port 3131
> http_access allow https_port
> acl allowed_https_sites ssl::server_name "/etc/squid/whitelist"
> acl allowed_https_sites ssl::server_name "/etc/squid/whitelist_transparent"
> acl allowed_https_sites ssl::server_name "/etc/squid/whitelist_https"
> acl allowed_https_sites ssl::server_name
> "/etc/squid/whitelist_transparent_https"
>
> http_access deny all
>
> # strict setting
> host_verify_strict on
>
> # SSL_BUMP
> sslcrtd_program /usr/lib64/squid/security_file_certgen -s
> /var/lib/squid/ssl_db -M 20MB
> acl step1 at_step SslBump1
> acl step2 at_step SslBump2
> acl step3 at_step SslBump3
>
> ssl_bump bump all
> ■Verification of Settings
> I ran the curl command from each of the client environments that use Squid.
> 1. if SNI, Destination IP, and HeaderHost are correct, the user should
> be able to connect to pypi.org
> Command:
> date;curl https://pypi.org/ -v --cacert squid_2.crt -k
> Result: OK
>
> 2. rejection of communication to pypi.org if SNI is correct but
> destination IP and HeaderHost are incorrect
> Command:
> date;curl https://pypi.org/ --resolve pypi.org:443:182.22.24.252 -H
> "Host: www.yahoo.co.jp" -v --cacert squid_2.crt -k
> Result: OK (409 Conflict is returned)
>
> 3. rejection of communication to pypi.org if SNI and destination IP
> are correct and HeaderHost is incorrect
> Command:
> date;curl https://pypi.org/ -H "Host: www.yahoo.co.jp" -v --cacert
> squid_2.crt -k
> Result: OK (409 Confilic returned)
>
> 4. rejection of communication to pypi.org if SNI and HeaderHost are
> correct but destination IP is incorrect
> Command:
> date;curl https://pypi.org/ --resolve pypi.org:443:182.22.24.252 -v
> --cacert squid_2.crt -k
> Result: OK (409 Confilic returned)
>
> 5. if SNI, destination IP, and HeaderHost are all invalid (yahoo.co.jp
> not registered in whitelist), communication will be rejected
> Command:
> date;curl https://yahoo.co.jp/ -v --cacert squid_2.crt -k
> Result: NG (301 Moved Permanently is returned, but it appears that the
> communication is reaching yahoo.co.jp)
More information about the squid-users
mailing list