如何使用Squid正则表达式ACL排除特定子域名?
Squid配置:拦截域名但排除特定子域名
要实现拦截所有domain.com相关域名,仅允许test.demo.domain.com这类包含demo的测试子域访问,由于GNU正则不支持负向前瞻语法,你可以通过拆分ACL规则的方式来实现,逻辑更清晰且易于维护:
配置步骤
- 先创建允许测试子域的ACL,匹配包含
demo.domain.com的域名:acl allow_demo dstdom_regex demo\.domain\.com - 再创建拦截生产域名的ACL,匹配所有以
domain.com结尾的域名:acl deny_domain dstdom_regex domain\.com$ - 设置访问控制规则(Squid规则按从上到下顺序匹配,匹配即生效):
http_access allow allow_demo http_access deny deny_domain http_access allow all
原理说明
- 所有访问
test.demo.domain.com的请求会先被allow_demo规则匹配,直接允许通过,不会触发后续的拒绝规则 - 其他如
test.domain.com这类不包含demo的domain.com域名,会被deny_domain规则拦截 - 最后一条
http_access allow all保证非domain.com的其他域名正常访问
内容的提问来源于stack exchange,提问作者YuHao Wu
相关产品推荐
相关产品推荐

