我有一个配置文件,在允许和限制站点的行中,我有以下内容:
acl AllowedSites dstdomain "/home/john/squid3_sites/allowed-sites.squid"
acl RestrictedSites dstdomain "/home/john/squid3_sites/restricted-sites.squid"
在我的http_access
清单上,我有
http_access allow AllowedSites
http_access deny RestrictedSites
我的 allowed-sites.squid 的内容只有一个 *,表示允许所有站点。而我的 restricted-sites.squid 上只有“www.facebook.com”。代理限制除 facebook.com 之外的所有站点。当我访问我能想到的任何站点时,都会出现“访问被拒绝”的错误站点。如果有帮助,以下是我的完整http_access
列表:
http_access allow AllowedSites
http_access deny RestrictedSites
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny all
以及我的所有 acl:
acl SSL_ports port 443 563
acl AllowedSites dstdomain “/usr/local/etc/allowed-sites.squid”
acl RestrictedSites dstdomain “/usr/local/etc/restricted-sites.squid”
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
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
acl all src all
答案1
就像许多基于允许/拒绝规则的系统一样,一旦规则匹配,就会应用该规则,并且不会进一步处理该规则链。因此,一旦您允许 *,它甚至不会到达该链的任何后续拒绝规则。或者如文档所述:
访问列表规则按照其写入的顺序进行检查。只要有一条规则匹配,列表搜索就会终止。
deny all
一旦您将 * 替换为实际列表,它就会起作用。如果您在拒绝站点列表后面跟着一个,那么您也不需要拒绝站点列表。