使用 Squid 允许特定的 URL 路径

使用 Squid 允许特定的 URL 路径

我在 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

相关内容