You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Squid代理基于MAC地址的ACL规则不生效问题求助

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 11:13:18