我在 Debian 上使用 Squid 3.4,我想知道如何允许某些子 URL 而禁止其余子 URL。
具体来说,我想禁止访问 reddit.com/* 但允许访问 reddit.com/r/foo/* 和 reddit.com/r/foo/
acl bad url_regex reddit\.com.*
acl good url_regex reddit\.com.*foo*
http_access deny bad
http_access allow good
...
http_access allow localnet
http_access allow localhost
http_access deny all
此代码似乎不起作用,reddit.com 上的所有内容最终都被屏蔽。我如何才能获得我想要的配置?
编辑:更新配置但仍然不起作用:
acl good url_regex http(s)?://(www\.)?reddit\.com/r/foo.*
acl bad url_regex http(s)?://(www\.)?reddit\.com.*
http_access allow good
http_access deny bad
...
http_access allow localnet
http_access allow localhost
http_access deny all
这与前面的代码具有相反的效果;它允许访问所有 reddit.com(我不想要)。
答案1
对于像我一样偶然发现这篇文章并寻求答案的人来说。原因是 squid 无法看到 HTTPS 请求的完整 URL,只能看到域。
您只能为 HTTP 连接执行 url_regex。您必须为 HTTPS 连接执行 dstdomain。
这取决于代理 CONNECT 的工作方式,而不是 Squid 问题。
答案2
这里描述了; http://wiki.squid-cache.org/SquidFaq/SquidAcl
我当前的设置是这样的;
acl special_client src 10.1.255.93
acl special_url url_regex ^http://ppa.launchpad.net/adiscon/v8-devel/ubuntu/.*
http_access allow special_client special_url
http_access deny special_url
答案3
顺序很重要。将允许行放在拒绝行之前。
此外,url_regex 匹配包括 http:// 在内的整个 URL,因此您需要更改正则表达式。请记住在更改后重新启动或重新加载 squid。
答案4
我认为你正在寻找这样的东西:
http_access allow good
http_access deny bad !good
因为实际上good
正则表达式也与正则表达式匹配bad
,所以您需要在第二行使用 AND 连接器。
请注意,您可以使用以下行来调试 acl:
debug_options ALL,1 28,3 33,2