ACL配置分网络设备和Linux系统两类:前者在路由器/防火墙上用高级ACL(3000–3999)控制服务器流量,需绑定inbound接口;后者用setfacl命令为文件目录设置细粒度权限,并依赖文件系统acl挂载选项。

服务器 ACL 配置分两类场景:一类是网络设备(如路由器、防火墙)上的 ACL,用于控制进出服务器的流量;另一类是操作系统级 ACL(如 Linux 文件系统 ACL),用于控制用户对文件/目录的访问权限。两者目标一致——精细化访问控制,但实现层和命令完全不同。下面按实际运维中最常遇到的两种情况展开说明。
网络设备侧:在路由器或防火墙上配置 ACL 限制访问服务器
这是最典型的“服务器区域防护”场景。比如只允许运维终端(10.10.1.100)通过 SSH(TCP 22)访问生产服务器(192.168.5.10),禁止其他所有 IP 访问该服务器的任何服务。
- 使用高级 ACL(编号 3000–3999),匹配五元组:源 IP、目的 IP、协议、目的端口
- 规则顺序很重要:先写精确规则(如允许特定 IP 的 SSH),再写通用拒绝(deny ip any any)
- ACL 必须绑定到靠近服务器的接口入方向(inbound),才能生效
- 示例(华为设备):
acl number 3001
rule 5 permit tcp source 10.10.1.100 0 destination 192.168.5.10 0 destination-port eq 22
rule 10 deny ip destination 192.168.5.10 0
interface GigabitEthernet0/0/1
traffic-filter inbound acl 3001
Linux 系统侧:为服务器文件或目录配置文件系统 ACL
当需要给某位开发人员单独授予某个日志目录的读写权,又不改动该目录原有属主权限时,就用 setfacl。
- 确认文件系统已启用 ACL 支持:挂载选项含 acl(如 /etc/fstab 中 ext4 defaults,acl)
- 给用户 userA 授予 /var/log/app/ 的读写权限:
setfacl -m u:userA:rw /var/log/app/ - 设置默认 ACL,让新创建的子文件/目录自动继承:
setfacl -d -m u:userA:rw /var/log/app/ - 查看效果:
getfacl /var/log/app/,注意输出中会显示 user:userA:rw- 和 default:user:userA:rw-
关键细节提醒
ACL 不是“开了就灵”,几个容易忽略却导致失败的点:
- 网络 ACL 未调用到接口 → 规则写了也无效
- 规则顺序写反:把 permit any 放在 deny 前面,等于全放行
- Linux ACL 权限不会覆盖基本权限(rwx),但会叠加;若基础权限无读,ACL 给读也打不开
- 某些服务(如 NFS、Samba)需额外开启 ACL 支持,并在服务配置中显式启用
- 修改后务必测试:用被控 IP 尝试连接、用被控用户尝试访问文件,再查日志确认是否命中规则
验证与排错常用命令
快速判断 ACL 是否生效:
- 网络设备:display acl 3001、display traffic-filter applied-record
- Linux:getfacl /path、ls -l /path(看末尾是否有 + 号)
- 抓包辅助判断:tcpdump -i eth0 host 10.10.1.100 and port 22
- 日志记录(华为):info-center enable + acl logging 3001,可定向输出命中记录

















