如何用Varnish的acl unwanted配置正确的子网IP封禁语法?
Varnish IP封禁配置修正方案
问题分析
你当前的VCL配置无法生效,核心问题是ACL中的IP格式不符合Varnish要求:
"45.77"这种写法未指定子网掩码,Varnish无法识别为有效网段;- 虽
"45.32"/24和"45.76"/24格式正确,但ACL规则会因无效条目导致匹配失败。
正确配置示例
acl unwanted { "45.32.0.0"/24; # 完整CIDR格式,匹配45.32.0.0-45.32.0.255 "45.76.0.0"/24; # 同上,匹配45.76.0.0-45.76.0.255 "45.77.0.0"/16; # 封禁整个45.77网段需指定/16子网掩码 # 若要封禁单个IP,写法为:"45.77.xxx.xxx"; } sub vcl_recv { if (client.ip ~ unwanted) { return(synth(403, "Access denied")); } }
关键注意事项
- IP格式规范:Varnish的ACL仅支持完整IP(如
"192.168.1.100")或CIDR网段格式(如"192.168.1.0"/24),不支持"45.77"这类不完整网段写法; - 配置生效步骤:修改VCL后,需执行
varnishadm vcl.load new_config /path/to/your.vcl加载新配置,再用varnishadm vcl.use new_config切换生效; - 代理场景适配:若Varnish部署在反向代理(如Nginx)之后,
client.ip会获取代理服务器IP,需先在代理层传递真实客户端IP(如设置X-Forwarded-For),再在VCL中改用req.http.X-Forwarded-For进行匹配。
测试验证
用curl模拟指定IP访问,验证封禁效果:
curl -H "X-Forwarded-For: 45.77.1.1" http://your-domain.com # 或直接从目标IP服务器发起请求,查看是否返回403
内容的提问来源于stack exchange,提问作者user3004118
相关产品推荐
相关产品推荐

