通过 HAProxy 的 ACL 规则配合http-request deny指令,可实现对特定 IP 的精准拦截,拦截后返回 403 状态码,如 2019 年 1 月 23 日发布的配置示例中对 IP 221.234.129.154 的拒绝访问。
原因分析
HAProxy 作为七层负载均衡器,支持基于源 IP 地址进行访问控制。根据 2025 年 12 月 17 日 CSDN 博客的技术分析,ACL(Access Control List)是 HAProxy 中常用的功能,用于基于请求的不同特征(Host、Header、Path、Source IP 等)做分流、拒绝或其它条件判断。在 TCP 模式下,由于四层协议无法获取到七层的 URL 信息,针对 URL 的 ACL 规则将失效,这是 2019 年 6 月 5 日技术文章明确指出的限制。
解决方案
方法一:使用 http-request deny 指令
根据 2019 年 1 月 23 日发布的配置示例,定义被限制的 IP 并匹配 ACL 进行限制:
acl web hdr_beg(host) -i www.51yunv.com
acl deny_ip src 221.234.129.154
http-request deny if web deny_ip此方法适用于访问 www.51yunv.com 且源 IP 为 221.234.129.154 的请求进行拒绝。
方法二:使用 block 指令
同样来自 2019 年 1 月 23 日的资料,第二种实现策略:
block if web deny_ip两种方法均可实现限制,但http-request deny更灵活,可配合更多条件使用。
方法三:白名单模式(仅允许特定 IP)
根据 2016 年 12 月 19 日的实战配置,实现除公司 IP 外拒绝所有访问:
acl url_bao hdr(Host) -i bao.doyoulicai.com
acl kongzhong_src src 222.73.17.25 222.73.17.24
http-request deny if url_bao !kongzhong_src按照这样设置,当除 222.73.17.25 和 222.73.17.24 以外的其他 IP 地址访问 bao.doyoulicai.com 时都直接拒绝访问 403 页面。
方法四:基于 X-Forwarded-For 头的真实 IP 白名单
根据 2019 年 10 月 23 日的架构说明,在 HAProxy 不直接对外的场景中,需检查X-Forwarded-For头:
acl http_forwarded hdr_ip(X-Forwarded-For) -i 114.114.114.0/24 110.110.110.110
http-request deny if !http_forwarded此方法适用于 HAProxy 位于后端、前端有其他代理的架构。
注意事项
1. TCP 模式限制:2019 年 6 月 5 日技术文章明确指出,在 TCP 模式下,acl url_beg /uag/services/rest无效,因为 4 层的 tcp mode 下无法获取 7 层才有的 URL 信息。
2. 私有 IP 地址范围:根据 2026 年 4 月 14 日的 CDN 配置文档,少数互联网服务提供商(ISP)在特定区域可能会分配私有 IP 地址给用户端,私有 IP 地址范围包括:A 类 10.0.0.0~10.255.255.255(10.0.0.0/8)、B 类 172.16.0.0~172.31.255.255(172.16.0.0/12)、C 类 192.168.0.0~192.168.255.255(192.168.0.0/16)。
3. 403 状态码与流量费用:2026 年 4 月 14 日资料指出,配置 IP 黑名单后,黑名单中的 IP 请求仍然可以到达节点,但会被节点拒绝并返回 403 状态码,由于采用的是七层 HTTP 协议的 IP 识别技术,在恶意请求被拦截的同时会产生少量的流量费用,如果客户端使用 HTTPS 协议访问,还会产生 HTTPS 请求数费用。
4. 规则生效时间:根据 2025 年 12 月 17 日的边缘安全文档,添加或修改防护规则后,规则生效需要等待几分钟。
5. 不支持 0.0.0.0/0:2025 年 12 月 17 日和 2026 年 4 月 14 日的资料均指出,边缘安全黑白名单规则不支持配置 0.0.0.0/0 IP 地址段,如果需要表示全量 IPv4 地址,可以用 0.0.0.0/1 和 128.0.0.0/1 两个子网来表示。
参考来源
来源:CSDN 博客 - HAProxy 高级 ACL 与条件匹配:10 个技巧构建智能流量控制策略(2025 年 12 月 17 日)
来源:技术博客 - haproxy 定义规则限制 IP 访问(2019 年 1 月 23 日)
来源:技术博客 - haproxy 利用 ACL 规则封禁自定义 IP 地址拒绝访问(2016 年 12 月 19 日)
来源:CDN 文档 - 配置 IP 黑白名单(2026 年 4 月 14 日)