Squid配置文件使用acl指令定义访问控制列表(access control list, acl),http_access指令定义访问规则(access rulers)。
acl指令的语法格式为:
acl aclname type values
http_access指令的语法格式为:
http_access allow/deny aclname
1、IP地址:type的值可以为src(Client)、dst(Server)、myip
acl aclname src ip/netmask
acl aclname dst hostname
其中,子网掩码netmask可以省略(netmask的值应该等于IP地址中非零值的个数)。
acl Squid dst www.squid-cache.org
注意,上面这种使用hostname定义acl效率比较低, 在启动Squid其它模块前,会先解析conf配置文件,其中的hostname无法使用Squid非阻塞的IP Cache接口,而是通过阻塞的gethostbyname( )调用来解析IP地址。这样会延缓Squid的启动速度。
定义只包含一个IP地址的acl:
下面三组ACL定义都是等价的:
acl Foo src 172.16.44.21/255.255.255.255
acl Foo src 172.16.44.21/32
acl Foo src 172.16.44.21
acl Xyz src 172.16.55.32/255.255.255.248
acl Xyz src 172.16.55.32/28
acl Bar src 172.16.66.0/255.255.255.0
acl Bar src 172.16.66.0/24
acl Bar src 172.16.66.0
定义包含一组连续IP地址的acl:
acl Bar src 172.16.10.0-172.16.19.0/24
2、域名:type的值可以为srcdomain、dstdomain、cache_host_domain
acl A dstdomain foo.com
acl B dstdomain .foo.com
注意:B最前的那个点被看做通配符,如http://foo.com/同时匹配A和B,http://www.foo.com/ 将匹配B
URL hostname |
Matches ACL lrrr.org? |
Matches ACL .lrrr.org? |
Yes |
Yes |
|
No |
Yes |
|
No |
No |
不要在同一个aclname里定义有重叠的域名或IP地址,例如:
acl Foo dstdomain .lrrr.org .am.lrrr.org警告:'.am.lrrr.org' is a subdomain of '.lrrr.org'
acl Foo src 1.2.3.0/24 acl Foo src 1.2.3.4/32警告:'1.2.3.4' is a subnetwork of '1.2.3.0/255.255.255.0'
3、用户名:type的取值可以为ident、proxy_auth。
4、正则表达式:type的值可以为srcdom_regex, dstdom_regex, url_regex, urlpath_regex, browser, referer_regex, ident_regex, proxy_auth_regex, req_mime_type, rep_mime_type。例如:
acl Foo url_regex -i ^http://www
其中-i表示大小写不敏感,定义了一个正则表达式url_regex,它必须以http开头。
5、端口号:type的值可以为port, myport。
acl Foo port 123
acl Bar port 1-1024
6、Autonomous system numbers:type的值可以为src_as, dst_as。
7、Method:type的值可以为GET, POST, PUT, HEAD, CONNECT, TRACE, OPTIONS, and DELETE等,例如:
acl Uploads method PUT POST
8、proto:type的只可以为http, https (same as HTTP/TLS), ftp, gopher, urn, whois, and cache_object等,例如:
acl FTP proto FTP