Squid代理基于MAC地址的ACL规则不生效问题求助
问题背景
IP为10.26.98.4的客户端被列入restricted_ip_range ACL,仅允许访问domain_whitelist内的域名;该客户端MAC地址已加入MacExceptionList例外列表,但开启代理后仍无法访问白名单外网站。已尝试重载/重启Squid、调整ACL顺序,均无效。
相关配置
MAC例外列表(/etc/squid/mac_exception_list.acl):
A8:A1:59:FC:A0:39 ##:##:##:##:##:##
核心自定义ACL与规则:
########## Custom ACL ########## acl restricted_ip_range src 10.26.97.0/24 10.26.98.4 acl MacExceptionList arp "/etc/squid/mac_exception_list.acl" acl domain_whitelist dstdomain "/etc/squid/domain_allowlist.acl" ########## Custom Rules ########## http_access allow MacExceptionList http_access deny restricted_ip_range !domain_whitelist
排查与解决步骤
1. 确认Squid是否支持ARP ACL
ARP ACL依赖Squid编译时启用--enable-arp-acl选项,运行以下命令检查编译参数:
squid -v
若输出中无--enable-arp-acl,则Squid不支持ARP匹配,需重新编译Squid并添加该选项,或改用其他例外方式(如单独放行该IP)。
2. 修正MAC列表文件格式
Squid的ACL文件中,注释行必须以#开头,当前列表中的##:##:##:##:##:##会被识别为无效MAC地址,需修改为:
A8:A1:59:FC:A0:39 # ##:##:##:##:##:##
同时确保文件使用Unix换行符(LF)、UTF-8无BOM编码,避免格式解析错误。
3. 验证客户端MAC是否被Squid识别
Squid仅能获取同一二层子网内客户端的MAC地址,若客户端与Squid跨子网部署,ARP ACL将无法生效。
查看Squid访问日志(默认路径/var/log/squid/access.log),若日志条目未包含客户端MAC(如A8:A1:59:FC:A0:39),说明MAC未被识别,此时需:
- 将Squid迁移至客户端所在二层子网;
- 临时改用IP例外:在
http_access allow MacExceptionList后添加http_access allow src 10.26.98.4,直接放行该IP。
4. 验证规则匹配顺序与语法
运行以下命令检查配置文件语法:
squid -k parse
确保无语法错误后,重启Squid:
systemctl restart squid
再次测试访问非白名单域名,同时查看access.log,确认请求是否匹配MacExceptionList的allow规则(日志中会标记匹配的ACL名称)。
关键注意事项
- Squid的
http_access规则按从上到下顺序匹配,匹配到第一条规则后即停止后续判断,需确保http_access allow MacExceptionList位于所有deny规则之前; - ARP ACL仅适用于二层直连场景,跨子网环境下无法获取MAC,需改用其他认证/例外机制。
内容的提问来源于stack exchange,提问作者localbot

